Linux 常用命令

Linux 常用命令

1. vim

  1. dd 删除一整行,下一行提上来;D删除一整行,光标在行头
  2. S删除一整行并插入,相当于D+i;s 删除当前位置的字符并插入
  3. I 到行首插入;i 在当前光标位置插入
  4. :set nu 行号;:set nonu 取消行号
  5. J 合并当前行和下一行
  6. ctrl+f 向下翻页
  7. ctrl+b 向上翻页
  8. n 向下查找匹配项
  9. N 向上查找匹配项

2. 端口

2.1 lsof=list open files

lsof -i:3306

2.1 netstat

netstat -anu/-ant

-a 全部
-n 显示ip,不是域名
-t tcp协议
-u udp协议
-l或–listening 显示监控中的服务器的Socket
-p或–programs 显示正在使用Socket的程序识别码和程序名称

查看网络连接状况
netstat -an

如何统计系统当前进程连接数
netstat -an | grep ESTABLISHED | wc -l

用 netstat 命令配合其他命令,按照源 IP 统计所有到 80 端口的 ESTABLISHED 状态链接的个数
netstat -an|grep ESTABLISHED|grep “:80”|awk ‘BEGIN{FS=”[[:space:]:]+”}{print $4}’|sort|uniq -c|sort -nr

3. jvm相关的命令

参考文档

  1. jps:显示系统内所有的jvm进程
  2. jstat:收集jvm相关的运行数据
  3. jinfo:显示jmv配置信息
  4. jmap:用于生成jvm的快照
  5. jhat:用于分析heapdump文件,可以建立一个http/html服务,在浏览器上查看分析结果
  6. jstack:显示jvm的线程快照
  7. jconsole: 一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM

jcmd 替换 jmap
jcmd pid help 查看可以支持的一些option选项
jcmd pid

4. find

查找指定文件名的文件(不区分大小写)
find -iname “xxx”

对找到的文件执行某个命令
find -iname “xxx” -exec md5sum {} \

查找home目录下所有空文件
find ~ -empty

在/usr目录下找出大小超过10M的文件
find /usr -type f -size +10240k

在/var目录下找出90天之内未被访问过的文件
find /var ! -atime -90

在/home目录下找出120天之前被修改过的文件
find /home -mtime +120

在整个目录树下查找文件,如果发现直接删除
find / -name “xxx” -exec rm {} \

5. du

找出磁盘上占空间大的文件或文件夹
du -a /var | sort -n -r | head -n 10

6. ls/ll

按照最后修改时间升序列出文件
ll -tr 或者 ls -ltr

7. rsync

每周一下午3点定时将 /tmp/logs 目录下所有后缀为 .log 的文件同步到备份服务器同样的目录下
crontab -e
0 15 * * 1 rsync -avzp /tmp/logs/
.log root@ip:/tmp/logs

8. top

实时监控系统的cpu和内存,3s刷新一次

包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统 CPU 使用情况(vmstat)等

9. free

查看内存大小,使用多少,剩余多少

10. less

打开大文件,vi 会卡,less可以在不加载整个文件的前提下显示文件内容

ctrl+f 上页
ctrl+b 下页
命令和vi类似

11. grep

统计文件中包含匹配项的行数
grep -c “xxx” file

列出包含匹配项的文件名称
grep -l “xxx” file1 file2 file3

正则匹配
grep -E “[1-9]+” file

匹配多个内容
grep -e “xx” -e “xxxx” file

12. sed

用 sed 命令将指定的路径 /usr/local/http 替换成为 /usr/src/local/http
echo “/usr/local/http” | sed ‘s#/usr/local/http#/usr/src/local/http#’

echo ‘/a’ | sed -e ‘s///x/g’ -e ‘s/a/y/g’
等价于
echo ‘/a’ | sed ‘s//a/xy/g’

# 貌似是把一些特殊字符的转义给省略了。方便直接去做替换

打印 /etc/ssh/sshd_config 的第一百行
sed -n ‘100p’ /etc/ssh/sshd_config

打印第1到3行
sed -n ‘1,3p’ /etc/passwd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/bash

# dateTime=$(date +%Y%m%d_%H%M%S);
# curl url > $dateTime.txt
# t1=$(sed -n '196p' $dateTime.txt | sed 's/[[:space:]]//g');
# t2=$(sed -n '205p' $dateTime.txt | sed 's/[[:space:]]//g');
# echo $dateTime Memory Used: $t1 -- VCores Used: $t2 >> monitor4yarn.txt
# rm -r $dateTime.txt

t1=1.07TB
unit=${t1:0-2};
val=$(echo ${t1} | sed "s/${unit}//g");
newVal=$(echo "scale=2;${val}*1024"|bc)
if [ $unit == "TB" ]
then t1=${newVal}"GB"
fi
echo $t1

13. awk

打印第1到3行
awk ‘NR>=1&&NR<=3{print $0}’ /etc/passwd

awk 可以把文件行内容通过分隔符来划分成不同的域,用 $1 $2 表示,$0 表示整行内容

14. xargs

将所有图片文件拷贝到外部驱动器
ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

将系统中所有 jpg 文件压缩打包
find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

下载文件中列出的所有 url 对应的页面
cat url-list.txt | xargs wget –c

把当前目录下所有后缀名为 .txt 的文件的权限修改为 777
find ./ -type f -name “.txt” |xargs chmod 777
find ./ -type f -name “
.txt” -exec chmod 777 {}

15. man

显示某个命令的帮助手册
man crontab

一个命令也许有好几个man页面,可以先通过 whatis xx 查看命令 xx 有哪些类型,然后通过 man selectNumber xx 查看对应类型号的命令xx的man页面

16. curl

ping 测试某个地址能否连接,curl 测试某个url是否可以访问

17. shell 脚本

1
2
3
4
5
6
7
8
9
if 条件
then 命令1
else
if 条件
then 命令2
else
命令3
fi
fi

大于 -gt

1
2
3
4
5
6
7
8
case 变量 in 
值1)
命令1
;;
值2)
命令2
;;
esac
1
2
3
4
for 变量 in item1 itme2 ... itemN
do
命令
done
1
2
3
4
while 条件
do
命令
done

18. 如何将标准输出和错误输出同时重定向到同一位置

2>&1
ls /usr/share/doc > out.txt 2>&1

&>
ls /usr/share/doc &> out.txt