Linux基础命令
介绍Linux常用命令工具。
文档帮助
查看命令简要说明:whatis
- 参数-w开启正则匹配
查看命令详细说明:info
strace:strace常用来跟踪进程执行时的系统调用和所接收的信号
查看命令说明文档:man
基于命令的功能来搜索命令:man -k
根据命令的名称快速查找命令的功 能:man -f
重建man数据库:man -u
读取命令的特定man page:man [1-8]
普通命令,如cd、chmod、lp、mkdir和passwd。
由内核提供的底层系统调用,如intro和chmod。
C库函数,如beep、HTML::Parser和Mail::Internet。
特殊文件,如/dev中找到的设备,包括控制台(console)、打 印机(lp)和鼠标(mouse)。
文件格式和约定,如apt.conf、dpkg.cfg、hosts和 passwd。
游戏,如atlantik、bouncingcow、kmahjongg和rubik。
杂项,包括宏包(macro package)。如ascii、samba和utf8。
root用户使用的系统管理命令,如mount和shutdown。
读取命令的描述:whatis
,相当于man -f
- 参数-w:开启通配符匹配
- 参数-r:开启正则匹配
基于功能查找命令:opropos
,相当于man -k
参数-w:开启通配符匹配
参数-r:开启正则匹配
参数-e:开启精确匹配
whereis
:查找命令的可执行文件、源文件和 man page的路径
- 参数-b:如果只想搜索二进制文件
- 参数-m:如果只想搜索man page
- 参数-s:如果只想搜索源文件
which
:命名存在多个版本时,找出将要运行的命令的版本
- 参数-a:查找命令的所有位置
文件管理
创建文件,修改时间:touch
,touch存在的主要目的是更新文件访问和修改时间
- 参数-a:只更新访问时间
- 参数-m:只更新修改时间
- 参数
-t YYYYMMDDhhmm.ss
:指定修改时间
创建目录:mkdir
- 参数-p:逐层建立子目录
- 参数-v:执行时显示执行过程
删除:rm
- 参数-r、-R表递归子目录
- 参数-v:执行时显示执行过程
- 参数-f表示不询问
- 参数-i表示删除之前询问
- 删除空目录:
rmdir
- 删除文件和非空的目录:
rm -rf
- 参数
--
:跟在后面的任何东西都不能作为选项,而是文件或文件夹 的名称
移动:mv
- mv命令实际上执行了一个cp -a操作,在成功复制文件后再移除原有的文件
- 参数-i表示覆盖之前询问
- 参数-v:执行时显示执行过程
- 移动软连接时,在软连接末端加斜杆
/
移动的是软连接指定的目录,没有斜杆时移动软连接本身
复制:cp
参数-r、-R表示递归复制
参数-a表示保留链接和文件属性,并递归子目录,用于制作完整备份,相当于
-dpR
参数-i表示覆盖之前询问
参数-p表示复制修改时间和访问权限
参数-v:执行时显示执行过程
显示当前目录:pwd
切换目录:cd
列出目录项:ls
- 参数-l表示显示详细信息
- 参数-a表示显示隐藏文件
- 参数-R表示递归
- 参数-h以易读方式显示
查看文件内容:
cat
:从头到尾显示内容,常用来拼接文件- 参数-n表示显示行号
tac
:从尾到头显示内容head
:默认显示文件前10行- 参数-n 4表示显示前4行的内容
- 参数-n -4表示显示除文件最后4行外的内容
- 参数-c 2表示显示前2个字节的内容
- 参数-c -2表示显示除文件最后2个字节外的内容
tail
:默认显示文件后10行- 参数-n 4表示显示后4行的内容
- 参数-n -4表示显示除文件前面4行外的内容
- 参数-c 2表示显示后2个字节的内容
- 参数-c +2表示显示除文件前2个字节外的内容
more
&less
的区别:- less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
- less不必读整个文件,加载速度会比more更快
- less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
创建链接:
ln
:硬链接,相对独立ln -s
:软连接(符号链接),相当于快捷方式
搜索查找
根据指定的条件查询:find
find . -name modao
:根据文件名modao查找当前目录- 搜索使用的是相对路径,结果使用的也是相对路径
- 搜索使用的是绝对路径,结果使用的也是绝对路径
find . -user modao
:根据拥有者搜索文件- 搜索结果取反:
find . ! -user modao
- 搜索结果取反:
find . -group modao
:根据用户组搜索文件- 搜索结果取反:
find . ! -group modao
- 搜索结果取反:
find . -size 10M
:根据文件大小搜索文件- 文件大小后缀:
- b:512字节块,默认值
- c:字节
- k:千字节
- M:兆字节
- G:吉字节
- 如果要搜索的文件大小大于10 MB,需要在指定的大小 前面加一个加号(+)
- 如果要搜索的文件大小小于10 MB,则需要在 大小前面加一个减号(-)
- 文件大小后缀:
find . -type d
:根据文件类型搜索文件- f:普通文件
- d:目录
- l: 符号(软)链接
- b:块文件
- c:字符文件
- p:管道文件
- s:套接字
- 参数-a:与,把搜索选项组合起来,当表达式均为true时显示结果
- 参数-o:或,把搜索选项并列起来,当表达式中只有一个为true时就显示结果
- 参数-n:取反,把搜索结果取反,当表达式为not true时显示结果
- 参数-exec:后接一个命令,对搜索到的每个文件执行命令
- 参数-fprint:将搜索结果打印到文件,后面指定文件名
搜索文件名数据库:locate
知道文件的名称,或者名称的一部分,但不记得放在系统的哪个位置。这就是locate命令要解决的问题。locate命令能够在文件、程序和目录中查找与提供的搜索项匹配的内容,并把任何匹配的结果依次显示到终端界面上。
搜索结果出来得非常快,因为locate命令并没有对系统进行实时搜 索。实际上,它搜索的是每天自动更新的文件名数据库。因为locate搜索的是早已创建好的数据库,所以搜 索结果几乎能够瞬间显示出来。
locate
:从数据库 (/var/lib/mlocate/mlocate.db)
查找命令,使用updatedb
更新库。索引查找速度快,需要更新,查找结果是整个路径
locate modao
:查找路径,路径内容包含modao参数-i:不区分大小写的搜索
参数-n:管理搜索文件名数据库时返回的结果,通过指定的数字指定结果个数
updatedb
:更新locate使用的数据库time updatedb
:更新数据库时顺便计时,处理完后显示更新花费的时间。locate -b modao
:查找路径,路径基名内容包含modaolocate modao modao_test
:查找路径,路径内容包含modao或modao_testlocate -A modao modao_test
:查找路径,路径内容包含modao和modao_testlocate -c modao
:查找路径,路径内容包含modao,结果是显示匹配的条目数
在文本文件中搜索:grep
一般用法:grep modao ./dir/*
正则表达式中的单引号和双引号的用法也有很大区别。单引号是在告诉shell正在搜索一个字符串,而双引号则是让shell知道想要使用shell变量。
- 如果要搜索精确的匹配结果,就使用单引号;
- 如果要把shell变量结 合到搜索内容中(很少有这样的需要),就使用双引号;
- 但如果搜索 关键字只包含数字和字母,完全不使用任何引号也没有问题。
参数-R:递归式地搜索文件中的文本
参数-i:搜索文件中的文本,忽略大小写
参数-w:在文件中只搜索整个词
参数-n:显示搜索结果在文件中的行号
参数-v:显示没有包含搜索内容的行
参数-l:列出包含搜索内容的文件名
在其他命令的输出中搜索特定内容:ls -1 | grep 1960
在搜索结果中进行搜索:ls -1 | grep 196[6-7] | grep -v Live
查看文件中搜索内容的上下文信息:
- -A:搜索结果包括后面n行
- -B:搜索结果包括前面n行
- -C:搜索结果包括前面n行和后面n行
- 配合-n参数使用,通过行号数字后面的字符
- 为冒号(:)表示匹配行
- 为连字符(-)表示匹配行之前或之后的行
- 配合-n参数使用,通过行号数字后面的字符
组合命令
分号;
创建命令栈:命令栈是将所有需要运行的命令放到shell的一行上,再用分号(;) 隔开每个具体的命令。接着依次顺序执行每个命令,只有一个命令结束运行(无论成功或失败),才会运行下一个命令。
使用&&
代替;
来顺序执行命令:只有前面的命令运行成功,才运行下一个命令
使用||
代替;
来顺序执行命令:只有前面的命令运行失败,才运行下一个命令
$()
:命令替换,将一个命令的输出插入到另一个命令
mkdir $(date "+%Y-%m-%d")
标准输入输出流
|
:当把它放在两个命令之间时,它可以将第一个命令的输出作为第二个命令的输入。换句话说,|重定向stdout,将它发送到第二个命令的stdin。
>
:将命令的输出重定向到文件,覆盖型。为了防止重定向时覆盖文件:set -o noclobber
,从现在起,如果要使用重定向并覆盖文件,应该用>|
代替>
。关闭noclobber:set +o noclobber
。要一直开着noclobber
选项,需要在.bashrc
文件中增加一行set -o noclobber
。
>>
:将命令的输出追加到文件的底部,追加型(如果文件不存在,就会创建它)
<
:将文件作为命令的输入
文本处理
sort命令:对文本内容排序
- -d:按字典序升序排列,空行在前(默认);
- -r:降序
- -b:忽略每行前面开始的空格字符,空格数量不固定时,该选项几乎是必须要使用的;
- -f:忽略大小写进行排列
- -h:使用易读性数字(例如:2K、1G)
- 按行中的某个字段排序:
- -k [n]:n从1开始计数,字段间默认使用空格隔开,默认-k 1
- +[n]:n从0开始计算,默认+0
- -n:按照数值的大小排序(升序)
- -o <输出文件>:将排序后的结果存入指定的文件
- -u:忽略相同行
- -c:选项检查文件是否已经排好序
- -t <分割字符>:指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符
- --help:显示帮助
- --version:显示版本信息
uniq命令:比较相邻的行并去掉重复的行,对不相邻的行无效
- -c:去掉相邻重复的行,并在每列旁边重复该行出现的次数
- -u:仅显示出现一次的行
- -d:只显示重复的行
- [输入文件]:指定已经排好序的文本文件,如果不指定此项,则从标准读取数据
- [输出文件]:指定输出的文件,如果不指定此选项,则将内容显示到标准输出设备(显示终端)
【留空】
sed和echo已经另外记录
磁盘管理
查看磁盘空间:df
,默认以B为单位且不显示单位
- 参数-h,易读方式显示(人类可读的(human-readable)),显示单位(M/G)
查看当前目录所占空间:du
参数-h,易读方式显示
参数-s,只报告目录使用的总空间
查看当前目录下所有子文件夹排序后的大小:
for i in `ls`; do du -sh $i; done | sort ## 或者: du -sh `ls` | sort
在linux中归档和压缩和分两步来实现的
归档文件:tar
- 参数-c:打包选项
- 参数-v:显示进度
- 参数-z:调用gzip程序进行压缩,生成tar.gz
- 参数-j:调用bzip2程序进行压缩,生成tar.bz2
- 参数-f:使用档案文件,后跟文件名
解包文件:tar
- 参数-x:解包选项
- 参数-v:显示进度
- 参数-z:调用gzip程序进行解压
- 参数-j:调用bzip2程序进行解压
- 参数-f:使用档案文件,后跟文件名
测试tarball:参数-t
压缩文件 & 解压文件:
gzip
,压缩文件后缀为gz结尾,不需要命名压缩文件,压缩后删除原文件参数-c:保留原始文件,需要重定向输出
gzip -c paradise_lost.txt > paradise_lost.txt.gz
参数-r:递归遍历子目录,默认不递归
zcat
:不解压查看gz压缩文件参数-d:解压文件
参数
-[0-9]
:压缩效果,默认为6
gunzip
:解压gz压缩文件,解压完后删除压缩文件参数-c:保留压缩文件,需要重定向输出
gunzip -c paradise_lost.txt.gz > paradise_lost.txt
参数-t:测试压缩文件
bzip2
:压缩文件后缀为bz2结尾*(比gzip有着更大压缩比)*- 参数-c:保留原始文件,需要重定向输出
- 参数-k,压缩或解压后保留原文件
- 参数-d,解压bz2压缩文件
- 参数
-[0-9]
:压缩效果,默认为6 bzcat
:不解压查看bz2压缩文件
bgunzip2
:解压bz2压缩文件,解压完后删除压缩文件- 参数-c:保留压缩文件,需要重定向输出
- 参数-t:测试压缩文件
xz
:压缩文件后缀为xz结尾- 参数-d:解压
- 参数-k:压缩或解压后保留原文件
- 参数-#:压缩比
unxz
:解压xzcat
:不解压查看
zip
:打包压缩工具,可以压缩目录,默认不删除原文件:zip [目标zip文件名称] [要加到zip文件的内容]
- 参数-r:递归目录
- 参数-d:删除压缩文件中的某个文件
- 参数-m:添加某个文件到压缩文件中
- 压缩效果-[0-9]:数字越大,压缩效果越好
- 参数
-P [passwd]
:设置压缩密码 - 参数-e:设置压缩密码,交互输入更安全
unzip
:解压工具- 参数-v:显示更多运行时信息
- 参数-l:不解压查看文件内容
- 参数-t:测试待解压文件
- 参数-d:指定解压目录
- 参数-o:不提示,直接覆盖
进程管理
ps
查询所有进程信息:ps aux
- a:所有用户
- u:显示拥有每个进程的用户
- x:没有控制tty或终端屏幕的进程
ps命令显示当前状态(STAT)的种类
- R:运行
- S:休眠
- T:停止
- Z:僵尸:表示进程已经终止,但父进程无法正常终止它
Z是个坏消息,因为它意味着进程基本上一直处于挂起状态,不能停止 (幸运的是,这并不意味着没有解决问题的办法)。如果某个程序有 问题,ps标明其状态为Z,这时或许只有重启计算机才能完全关闭这个 程序。
kill -9选项对“僵尸”进程也没有效果,这样的进程早已经死掉了,因此kill命令对它也无能为力。重启是唯一能够解决这种问题的办法,不过这样的问题通常是无关紧 要的。
查看进程树:ps axjf
查看特定用户拥有的进程:ps U [username]
kill
发送指定信号到相应进程:kill
,默认信息是15,指正常停止,一般操作对象是PID,也可使用%jobs指定作业号
参数-l,列出全部信号名称
参数-u,为指定用户的所有进程发送信号
参数-s #,指定信号,常缩写为**
-#
**常用信号:
- HUP,1,终端短线
- INT,2,中断(同C-c)
- QUIT,3,退出(同C-\)
- TERM,15,默认信号
- KILL,9,强制终止
- CONT,18,继续(与STOP相反,
fg/bg
命令) - STOP,19,暂停(同C-z)
当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。
要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。
top
top命令提供的则是进程的动态更新的视图,展示系统中正在运行着什么进程,以及每个进程正在使用多少系统资源
top
:查看系统中使用CPU、使用内存最多的进程,交互界面- P:根据CPU使用百分比大小进行排序
- M:根据驻留内存大小进行排序
- i:使top不显示任何闲置或者僵死进程
- k:在top命令中关闭程序
htop
:- 上左区:显示了CPU、物理内存和交换分区的信息;
- 上右区:显示了任务数量、平均负载和连接运行时间等信息
- 进程区域:显示出当前系统中的所有进程
- 操作提示区:显示了当前界面中F1-F10功能键中定义的快捷功能
bpytop
:可视化程度更高
分析线程堆栈:pmap
,输出内存的状况
lsof
Linux系统中的所有东西都是文件,包括目录、网络连接和设备
列出当前系统打开的所有文件的工具:lsof
(list open files的缩写)
# 列出所有打开的文件:
lsof
# 备注: 如果不加任何参数,就会打开所有被打开的文件,内容非常多,可以通过管道传给less
# 列出某个用户打开的文件
lsof -u username
# 列出除了某个用户外的被打开的文件
lsof -u ^username
# 列出正在使用特定文件的用户
lsof /filepath/file
#递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
lsof | grep ‘/filepath/filepath2/’
# 列出特定程序的进程
lsof -c [program]
# 列出多个程序的进程
lsof -c [program] -c [program]
# 列出某个用户以及某个程序所打开的文件
lsof -u username -c [program]
# 通过某个进程号显示该进行打开的文件
lsof -p 1
# 列出多个进程号对应的文件信息
lsof -p 123,456,789
# 列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1
# 列出所有的网络连接
lsof -i
# 列出所有tcp 网络连接信息
lsof -i tcp
# 列出所有udp网络连接信息
lsof -i udp
# 列出谁在使用某个端口
lsof -i :3306
# 列出谁在使用某个特定的udp端口
lsof -i udp:55
# 特定的tcp端口
lsof -i tcp:80
# 列出某个用户的所有活跃的网络端口
lsof -a -u test -i
# 列出所有网络文件系统
lsof -N
#域名socket文件
lsof -u
#某个用户组所打开的文件信息
lsof -g 5555
# 根据文件描述列出对应的文件信息
lsof -d description(like 2)
# 根据文件描述范围列出文件信息
lsof -d 2-3
使用文件或文件结构识别进程:fuser
fuser命令 用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号,那些本地进程使用file,参数指定的本地或远程文件。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。
每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。
- c:指示进程的工作目录。
- e:指示该文件为进程的可执行文件(即进程由该文件拉起)。
- f:指示该文件被进程打开,默认情况下f字符不显示。
- F:指示该文件被进程打开进行写入,默认情况下F字符不显示。
- r:指示该目录为进程的根目录。
- m:指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。
语法:fuser(选项)(参数) 选项: -a:显示命令行中指定的所有文件; -c:和-m一样,用于POSIX兼容; -s:静默模式,这时候-u,-v会被忽略。-a不能和-s一起使用; -k:杀死访问指定文件的所有进程,如果没有指定-signal就会发送SIGKILL信号; -signal:使用指定的信号,而不是用SIGKILL来杀掉进程。可以通过名称或者号码来表示信号(例如-HUP,-1),这个选项要和-k一起使用,否则会被忽略; -i:杀死进程前需要用户进行确认; -l:列出所有已知信号名; -m name:指定一个被加载的文件系统或一个被加载的块设备,这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成"name/",并使用所有挂载在那个目录下面的文件系统; -n space:选择不同的名称空间,这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口, 可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如:name/space (即形如:80/tcp之类的表示); -u:在每个进程后显示所属的用户名; -v:详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel. -V 输出版本号。 -4:使用IPV4套接字,不能和-6一起应用,只在-n的tcp和udp的命名存在时不被忽略。 -6:使用IPV6套接字,不能和-4一起应用,只在-n的tcp和udp的命名存在时不被忽略。 -:重置所有的选项,把信号设置为SIGKILL. 参数:文件,可以是文件名或者TCP、UDP端口号。 #列出使用/etc/passwd文件的本地进程的进程号 fuser /etc/passwd #列出使用/etc/filesystems文件的进程信息 fuser -um /etc/filesystems #杀掉打开readme文件的程序 fuser -m -k -i readme #查看那些程序使用tcp的80端口 fuser -v -n tcp 80 fuser -v 80/tcp #用 -l参数可以列出fuser所知的信号 fuser -l #终止使用给定文件系统的所有进程 fuser -k -x -u -c /dev/hd1 fuser -kxuc /home 命令会列出了进程号和用户名,然后终止每个正在使用/dev/hd1 (/home)文件系统的进程。仅有root用户能终止属于另一用户的进程。如果您正在试图卸下/dev/hd1文件系统,而一个正在访问/dev/hd1文件系统的进程不允许这样,您可能希望使用此命令。 #列出正在使用已从给定文件系统删除的文件的全部进程 fuser -d /usr文件 /dev/kmem 用于系统映像。 /dev/mem 也用于系统映像。
pgrep
性能监控
CPU监控:top
内存监控:free
- 参数-m,以MB为单位
- 参数-k,以KB为单位
- 参数-g,以GB为单位
综合监控工具:vmstat
- 参数
- 参数1:刷新时间
- 参数2:采集次数
- 字段
- procs
- r:等待执行的任务数
- B:等待IO的进程数量
- memory
- swpd:正在使用虚拟的内存大小,单位k
- free:空闲内存大小
- buff:已用的buff大小,对块设备的读写进行缓冲
- cache:已用的cache大小,文件系统的cache
- swap
- si:每秒从交换区写入内存的大小(单位:kb/s)
- so:每秒从内存写到交换区的大小
- IO
- bi:每秒读取的块数(读磁盘)
- bo:每秒写入的块数(写磁盘)
- system
- in:每秒中断数,包括时钟中断
- cs:每秒上下文切换数
- CPU
- us:用户进程执行消耗cpu时间(user time)
- sy:系统进程消耗cpu时间(system time)
- id:空闲时间(包括IO等待时间)
- wa:等待IO时间
- st:Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown
- procs
超级监控工具:dstat
- 常用:
dstat -clmnsygdr
网络工具
查看网络接口状态:ifconfig
- 参数-a:显示全部的接口,包括未启用的接口
配置网络接口:ifconfig
# eth0上的以太网卡的IP地址修改为192.168.0.125,
ifconfig eth0 192.168.0.125
# 为了运行某种类型的网络数据包嗅探工具(如强大的Ethereal),
# 需要首先将网卡设置为混杂(promiscuous)模式。
ifconfig eth0 promisc
# 关闭混杂模式
ifconfig eth0 -promisc
# 修改[或“欺骗(spoff)”]网络设备的硬件MAC地址
# 修改MAC地址时要小心,因为万一出错,就可能与其他网络设备发生冲突,引发问题
# 首先一定要用ifconfig获得设备的默认MAC地址,以便以后可以把默认的MAC地址再修改回来
ifconfig eth0 hw ether 00:14:CC:00:1A:00
查看无线网络接口的状态:iwconfig
,可以尽可能多地得到与无线网卡相关的数据
配置无线网络接口:iwconfig
验证计算机能否联网:ping
,发送ICMP消息
- 参数-c:指定发送次数
追踪路由:traceroute
,默认路由跳数为30
- 参数-m:设置路由跳数
执行DNS查询:host
host [域名]
:查域名关联的IP地址host [IP]
:查IP地址关联的域名
使用DHCP获得新的网络地址:dhclient
- 手动发起DHCP请求:
dhclient eth0
- 释放(或放弃)DHCP服务器分配的IP地址:
dhclient -r eth0
启动网络连接:ifup [interface]
- 也可以使用
ifconfig [interface] up
或iwconfig [interface] up
启动有线或无线网络连接
关闭网络连接:ifdown [interface]
- 也可以使用
ifconfig [interface] down
或iwconfig [interface] down
关闭有线或无线网络连接。
显示IP路由表、修改IP路由表:route
ss
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。
使用方式:
ss [选项]
ss [选项] [过滤条件]
-h, --help this message
-V, --version output version information
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening socket
-o, --options show timer information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-i, --info show internal TCP information
-s, --summary show socket usage summary
-4, --ipv4 display only IP version 4 sockets
-6, --ipv6 display only IP version 6 sockets
-0, --packet display PACKET sockets
-t, --tcp display only TCP sockets
-u, --udp display only UDP sockets
-d, --dccp display only DCCP sockets
-w, --raw display only RAW sockets
-x, --unix display only Unix domain sockets
-f, --family=FAMILY display sockets of type FAMILY
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE Dump raw information about TCP sockets to FILE
-F, --filter=FILE read filter information from FILE
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
常用命令:
# 显示所有TCP socket
ss -t -a
# 显示所有UDP socket
ss -u -a
# 列出所有打开的网络连接端口
ss -l
# 显示每个进程打开的socket
ss -pl
# 显示所有已建立的SMTP连接
ss -o state established '( dport = :smtp or sport = :smtp )'
# 显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
# 找出所有连接X服务器的进程
ss -X src /tmp/.X11-unix/*
# 列出当前socket(已连接、关闭、等待)详细信息
ss -s
ss常用的state状态:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : All of the above states
connected : All the states except for listen and closed
synchronized : All the connected states except for syn-sent
bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
big : Opposite to bucket state.
ss使用IP地址筛选:ss src ADDRESS_PATTERN
src:表示来源
ADDRESS_PATTERN:表示地址规则
示例:
# 列出来之20.33.31.1的连接 ss src 120.33.31.1 # 列出来至120.33.31.1,80端口的连接 ss src 120.33.31.1:http ss src 120.33.31.1:80
ss使用端口筛选:ss (dport | sport) OP PORT
OP:运算符
<=
orle
:小于等于>=
orge
:大于等于==
oreq
:等于!=
orne
:不等于<
orlt
:小于>
orgt
:大于
PORT:端口
过滤端口
dport
:过滤目标端口sport
:过滤源端口
示例:
ss sport = :http 也可以是 ss sport = :80 ss dport = :http ss dport \> :1024 ss sport \> :1024 ss sport \< :32000 ss sport eq :22 ss dport != :22 ss state connected sport = :http ss \( sport = :http or sport = :https \) ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
为什么ss比netstat快? netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多
用户管理
添加用户:useradd -m [username] -s [/bin/bash]
设置密码:passwd [username]
删除用户:userdel [username]
- 参数-r,删除用户并删除用户信息
切换用户:su [username]
su -l [uwername]
变更到其他用户,包括其环境变量su
:变更到root用户su -
:变更到root用户,包括其环境变量
查看当前用户所属组:groups
将用户添加到组:usermod -G [groupname] [username]
变更用户所在组:usermod -g [groupname] [username]
,添加到新组,从旧组中删除
查看所有用户及权限:less /etc/passwd
查看所有用户组及权限:less /etc/group
修改文件或目录属于的用户组:chgrp
- 修改文件:
chgrp [用户组名称/ID] 文件
- 递归修改目录:
chgrp -R [用户组名称/ID] 文件
- 参数-v:执行时显示执行过程
- 参数-c:只显示修改过的内容
同时修改文件和目录的拥有者和用户组:chown owner:group
,甚至可以省略owner实现修改用户组,被修改的文件或目录有:
则使用反斜杠转义。
- 参数-R:递归修改
更改文件和目录的权限:chmod [userMark](+|-|=)[PermissionsMark]
userMark
取值:- u:拥有者
- g:拥有者所在组之内的其它用户
- o:拥有者所在组之外的其它用户
- a:所有用户
PermissionsMark
取值:- r:读,4
- w:写,2
- x:执行,1
- 参数-R:递归修改
chmod a+x main 对所有用户给文件main增加可执行权限
chmod g+w blogs 对组用户给文件blogs增加可写权限
chmod o= test 删除系统中所有其他用户的所有权限
# 数字方式
chmod 740 main 将main的用户权限设置为rwxr-----
# 更改文件拥有者
chown username dirOrFile
# 更改目录拥有者(-R选项递归更改)
chown -R weber server/
可以对文件或目录使用chmod 000,但是那样的话,唯一能 够对它进行任何操作或再使用chmod命令修改权限的用户就只有 root了。
环境变量
Bash快捷操作:
C-u
:删除光标到行首的所有字符,在某些设置下,删除全行C-w
:删除当前光标到前边的最近一个空格之间的字符(保留空格后面的字符)C-H
:删除光标前边的字符,相当于退格键
用户环境信息配置文件,保存于用户主目录:
.bashrc
:用于交互式non-loginshell
.profile
:用于交互式login shell
~/.profile
与~/.bashrc
的区别:
- 这两者都具有个性化定制功能
~/.profile
可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次~/.bashrc
也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
系统全局环境信息配置文件,保存于/etc
目录:
/etc/profile
/etc/bashrc
当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:
- 首先读入的是全局环境变量设置文件
/etc/profile
,然后根据其内容读取额外的文档,如/etc/profile.d
和/etc/inputrc
- 读取当前登录用户Home目录下的文件
~/.bash_profile
,其次读取~/.bash_login
,最后读取~/.profile
,这三个文档设定基本上是一样的,读取有优先关系- 读取
~/.bashrc
系统管理
查看Linux系统版本:
uname -a
lsb_release -a
,等价于more /etc/lsb-release
more /etc/os-release
查看CPU信息:cat /proc/cpuinfo
查看CPU核心:cat /proc/cpuinfo | grep processor | wc -l
查看内存信息:cat /proc/meminfo
查看架构:arch
系统时间:date
- 参数-s,设置系统日期和时间(格式如:2000-12-30 13:02:00)
- 格式化输出:
date +%Y%m%d.%H%M%S
设置时区:tzselect
将系统时间写入CMOS:clock -w
主要参考
本文命令测试环境:Ubuntu 18.04 x86_64