介绍Linux常用命令工具。

文档帮助

查看命令简要说明:whatis

  • 参数-w开启正则匹配

查看命令详细说明:info

strace:strace常用来跟踪进程执行时的系统调用和所接收的信号

查看命令说明文档:man

  • 基于命令的功能来搜索命令:man -k

  • 根据命令的名称快速查找命令的功 能:man -f

  • 重建man数据库:man -u

  • 读取命令的特定man page:man [1-8]

    1. 普通命令,如cd、chmod、lp、mkdir和passwd。

    2. 由内核提供的底层系统调用,如intro和chmod。

    3. C库函数,如beep、HTML::Parser和Mail::Internet。

    4. 特殊文件,如/dev中找到的设备,包括控制台(console)、打 印机(lp)和鼠标(mouse)。

    5. 文件格式和约定,如apt.conf、dpkg.cfg、hosts和 passwd。

    6. 游戏,如atlantik、bouncingcow、kmahjongg和rubik。

    7. 杂项,包括宏包(macro package)。如ascii、samba和utf8。

    8. 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的区别:

    1. less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
    2. less不必读整个文件,加载速度会比more更快
    3. 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:查找路径,路径基名内容包含modao

  • locate modao modao_test:查找路径,路径内容包含modaomodao_test

  • locate -A modao modao_test:查找路径,路径内容包含modaomodao_test

  • locate -c modao:查找路径,路径内容包含modao,结果是显示匹配的条目数

在文本文件中搜索:grep

一般用法:grep modao ./dir/*

image-20210103203410531

正则表达式中的单引号和双引号的用法也有很大区别。单引号是在告诉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参数使用,通过行号数字后面的字符
      • 为冒号(:)表示匹配行
      • 为连字符(-)表示匹配行之前或之后的行

组合命令

分号;创建命令栈:命令栈是将所有需要运行的命令放到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已经另外记录

Linux 三剑客之 awk 详解

磁盘管理

查看磁盘空间: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:不提示,直接覆盖

image-20200718152352629

进程管理

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)
    1. 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

    2. 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。

    3. 要撤销所有的后台作业,可以输入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

Linux lsof命令

Linux 命令神器:lsof

使用文件或文件结构识别进程: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

超级监控工具: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] upiwconfig [interface] up启动有线或无线网络连接

关闭网络连接:ifdown [interface]

  • 也可以使用ifconfig [interface] downiwconfig [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:运算符

    • <= or le:小于等于
    • >= or ge:大于等于
    • == or eq:等于
    • != or ne:不等于
    • < or lt:小于
    • > or gt:大于
  • 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进程时,其读取环境设置脚本分为三步:

  1. 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d/etc/inputrc
  2. 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
  3. 读取~/.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

主要参考

Linux工具快速教程

本文命令测试环境:Ubuntu 18.04 x86_64