0%

linux-常用命令总结

命令帮助

whatis command 查看命令的作用

info command 查看命令的详情

man command 查看命令的怎么使用,说明文档

which 查看命令二进制文件所在地方

文件及目录:

​ 目录及文件的创建

​ mkdir:创建目录 参数 -m 设置权限,-p递归创建 -v 显示创建信息

​ mkdir -p /dir1/dir2

​ rm 删除文件或是目录

​ rm -rf 递归删除目录及文件。

​ 递归删除删除某一类后缀名 find ./rm/. -name “*.txt” |xargs rm -f

​ mv 移动文件或者文件夹到另外一个目录下,-i 提示是否覆盖 -f强制覆盖 -v打印移动信息

​ mv fileName1 fileName2 更改文件名

​ mv dir1 dir2 目标目录存在则移动dir1到dir2,dir2不存在更改目录命名

​ mv file dir将文件移动到目录下

cp :复制文件或是目录

ls 显示目录下下文件 ls -al ,ls -alt

cd 进入目录,pwd显示当前所在文件路径

scp 拷贝远程到本机或者本机到远程

​ scp local/dir root@IP:/server/dir

split 切割文件

查找文件及目录

find ./ -name 文件名

查看文件内容

​ cat -n 显示行号

​ tail -f 实时跟踪文件变更

​ wc -l 查看文件总行数

​ head -10 查看文件开头十行

​ tail -10查看文件最后十行

grep 匹配文件内容

cat file | grep

egrep 查找文件内容

改变文件属性

chown 改变文件所属用户组。chmod 改变文件读写执行权限

链接

ln -s fiel newfile 建立软连接【软连接保存了指向目标文件的路径信息】

ln cc ccAgain :硬连接;删除一个,将仍能找到;

一些特殊符号

| 管道符号,用于把一个命令的输出的内容传递另外一个命令里 find . -name “*.txt” |xargs rm -f

> ,>> 重定向符号

df,du磁盘相关:du -sh -h是人性化显示 s是递归整个目录的大小

网络攻击:

​ netstat:查看网络端口和服务

1
2
3
4
5
netstat -a     #列出所有端口netstat -at    #列出所有tcp端口
netstat -au #列出所有udp端口
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口netstat -lx #只列出所有监听 UNIX 端口 netstat -antp | grep 6379 查找某一个端口netstat -an | grep ':80'netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1 通过端口找进程IDnetstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr 查看连接某服务端口最多的的IP地址:netstat -anpo | grep "php-cgi" | wc -l 查看phpcgi进程数,如果接近预设值,说明不够用,需要增加

​ route 查看路由状态

ping 发送ping报

traceroute IP 探测前往地址IP的路由路径

性能监控:

top ,htop

sar -u 查看CPU利用率

free -m 查看内存使用情况

进程相关:

ps:查找进程的命令。

1
linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) ps工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process 1.命令格式:ps[参数]2.命令功能:用来显示当前进程的状态3.命令参数:a  显示所有进程-a 显示同一终端下的所有程序-A 显示所有进程c  显示进程的真实名称-N 反向选择-e 等于“-A”e  显示环境变量f  显示程序间的关系-H 显示树状结构r  显示当前终端的进程T  显示当前终端的所有程序u  指定用户的所有进程-au 显示较详细的资讯-aux 显示所有包含其他使用者的行程 -C<命令> 列出指定命令的状况--lines<行数> 每页显示的行数--width<字符数> 每页显示的字符数--help 显示帮助信息--version 显示版本显示例子: ps auxps -ef ps -fe| grep colin115|grep HOST |awk '{print $2}' | xargs kill -9; //将用户colin115下所有进程名中包含HOST的进程终止: 

使用命令pmap 进程ID,来输出进程内存的状况,可以用来分析线程堆栈;

kill pid 杀死进程,kill -9 pid杀死相关进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
命令参数:

-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称

-a 当处理当前进程时,不限制命令名和进程号的对应关系

-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号

-s 指定发送信号

-u 指定用户注意:1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:kill -2 123它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。3、可以向多个进程发信号或终止它们。4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。说明:

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:

HUP 1 终端断线

INT 2 中断(同 Ctrl + C)

QUIT 3 退出(同 Ctrl + \)

TERM 15 终止

KILL 9 强制终止

CONT 18 继续(与STOP相反, fg/bg命令)

STOP 19 暂停(同 Ctrl + Z)

文本处理:

sed:命令处理文本内容

tr:将字符进行替换压缩和删除

1
2
3
4
5
-c或——complerment:取代所有不属于第一字符集的字符;-d或——delete:删除所有属于第一字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
例子:
echo "HELLO WORLD" | tr 'A-Z' 'a-z' 将输入字符由大写转换为小写:hello world echo "hello 123 world 456" | tr -d '0-9' 使用tr删除字符:hello world echo "thissss is a text linnnnnnne." | tr -s ' sn' 用tr压缩字符,可以压缩输入中重复的字符:this is a text line.

​ grep :文本搜索工具:是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

​ 选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 --text  # 不要忽略二进制数据。-A <显示行数>   --after-context=<显示行数>   # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作> # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式> # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件> # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp # 将范本样式视为固定字符串的列表。
-G --basic-regexp # 将范本样式视为普通的表示法来使用。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case # 忽略字符大小写的差别。
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
-q --quiet或--silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version # 显示版本信息。
-w --word-regexp # 只显示全字符合的列。
-x --line-regexp # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m <num> --max-count=<num> # 找到num行结果后停止查找,用来限制匹配行数

规则表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
^    # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。    
$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。

常见用法:

1
2
3
4
5
6
7
8
9
在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:grep "match_pattern" file_name
输出除之外的所有行 -v 选项grep -v "match_pattern" file_name使用正则表达式 -E 选项:
grep -E "[1-9]+"
只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+\." 输出:line.
搜索多个文件并查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...在多级目录中对文本进行递归搜索:
grep "text" . -r -n
# .表示当前目录。

xargs:是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
用作替换工具,读取输入数据重新格式化后输出。cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
使用 -n 进行多行输出cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
使用 -d 分割输入echo "nameXnameXnameXname" | xargs -dX
name name name name
结合 -I 选项xargs 的一个 选项 -I ,使用 -I 指定一个替换字符串{},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images
xargs 结合 find 使用用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs去避免这个问题:find . -type f -name "*.log" -print0 | xargs -0 rm -f
使用 -p 选项确认执行的命令-p选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比如,查找当前目录下 .log 文件,每一次删除都需要确认:find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}

awk:命令

是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

常用命令选项

  • -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
  • -v var=value 赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile 从脚本文件中读取awk命令
  • -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

awk模式和操作

awk脚本是由模式和操作组成的。

模式

模式可以是以下任意一个:

  • /正则表达式/:使用通配符的扩展集。
  • 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
  • 模式匹配表达式:用运算符~(匹配)和!~(不匹配)。
  • BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理

操作

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:

  • 变量或数组赋值

  • 输出命令

  • 内置函数

  • 控制流语句

  • awk脚本基本结构

    1
    awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

    一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 单引号双引号 中,例如:

    1
    2
    awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
    awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

    awk的工作原理

    1
    awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
    • 第一步:执行BEGIN{ commands }语句块中的语句;

    • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

    • 第三步:当读至输入流末尾时,执行END{ commands }语句块。

      BEGIN语句块 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

      END语句块 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

      pattern语句块 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

      示例

    1
    2
    3
    4
    5
    echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
    Start
    A line 1
    A line 2
    End

    当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:

    1
    2
    echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' 
    v1 v2 v3

特殊变量: NR NF $0 $1 $2

NR:表示记录数量,在执行过程中对应当前行号;

NF:表示字段数量,在执行过程总对应当前行的字段数;

$0:这个变量包含执行过程中当前行的文本内容;

$1:第一个字段的文本内容;

$2:第二个字段的文本内容;

使用-F来设置定界符(默认为空格):

1
2
awk -F: '{print $NF}' /etc/passwd
查找指定进程并输出进程IDps aux | grep java|awk '{print $2}'|xargs echo

uniq:消除重复行

sort:排序

1
sort unsort.txt | uniq -c 统计各行在文件中出现的次数

wc 统计行和字符的工具

cut:按列分割文本