跳至主要內容

Linux 系统命令

Sankgao约 16896 字大约 56 分钟ComputerLinux

常用命令

man

man 用于查看命令的作用及选项信息,使用 q 退出。语法格式:man 命令

example:

man echo

echo

echo 用于在终端上输出字符串或变量提取后的值。语法格式:echo [字符串][$变量]

选项作用
-e使用转义符

example:

echo 'Hello world!'  # 输出结果:Hello world!

echo "$SHELL"  # 输出结果:/bin/bash

echo -e "one\ttwo\tthree"  # 输出结果:one     two     three

su

su 用于切换用户账户。语法格式:su [选项] 用户名

提示

从 root 用户切换到普通用户不需要输入密码,从普通用户切换到普通用户和 root 用户需要输入密码

选项作用
--l切换用户时重置环境变量
-c变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-f不必读启动档(如 csh.cshrc 等),仅用于 cshtcsh
-s指定要执行的 shellbash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell

example:

su zhangshan  # 切换到 zhangsan 用户,不重置环境变量
su - zhangshan  # 切换到 zhangsan 用户,重置环境变量

sudo

sudo 用于给普通用户提供额外的权限。语法格式:sudo [选项]

选项作用
-l列出当前用户可执行的命令
-u以指定用户执行命令
-k清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证
-b在后台执行指定的命令
-p更改询问密码的提升语

example:

sudo -l

date

date 用于显示或设置系统的时间与日期。语法格式:date [+指定的格式]

选项作用
%F显示年月日(example:2022-10-11)
%T显示时分秒(example:19:26:26)
%S秒(00-59)
%M分钟(00-59)
%H小时(00-23)
%l小时(00-12)
%m月份(1-12)
%p显示出 AM 或 PM
%r显示出 09:56:34 AM
%a缩写的工作日名称(example:Sun)
%A完整的工作日名称(example:Sunday)
%b缩写的月份名称(example:Jan)
%B完整的月份名称(example:January)
%q季度(1-4)
%y简写年份(example:22)
%Y完整年份(example:2022)
%d本月中的第几天
%j本年中的第几天
%w一个星期的第几天(0代表星期天)
%W一年的第几个星期(00~53,星期一为第一天)
%n换行符(相当于回车键)
%t跳格(相当于 Tab 键)

example:

date  # 查看默认系统时间
date "+%Y-%m-%d %H:%M:%S"  # 按指定格式查看系统时间
date -s "20221101 8:30:00"  # 设置当前系统时间
date "+%F_%T"  # 显示年月日,时分秒,用 “_” 下划线分割

timedatectl

timedatectl 用于查看设置系统的时区。语法格式:timedatectl [选项]

选项作用
status显示状态信息
list-timezones列出已知时区
set-time设置系统时间
set-timezone设置生效时区

example:

timedatectl status  # 查看系统时间与时区

tiemedatectl set-timezone Asia/Shanghai  # 设置系统时区

timedatectl set-time 2022-9-23  # 设置系统日期

timedatectl set-time 9:30:00  # 设置系统时间

reboot

reboot 用于重启系统

poweroff

poweroff 用于关闭系统

wget

wget 用于在终端命令行上下载网络文件,无需打开浏览器。语法格式:wget [选项] 网址

选项作用
-b后台下载模式
-P下载到指定目录
-t最大尝试次数。值为 0 时将强制不断进行尝试
-c断点续传
-p下载页面内所有资源,包括图片、视频等
-r递归下载
-O指定文件名
-o将输出的内容保存到指定文件中
-nc文件存在时,下载文件不覆盖原有文件
-mc下载时只显示更新和出错信息,不显示指令的详细执行过程
--no-check-certificate下载 https 网站资源时可能需要使用该选项跳过证书检测的过程
--limit-rate限制下载指定带宽。可以用 k(千字节)和 m(兆字节)指定速度限制
--user网站需要认证时,指定用户名
--password网站需要认证时,指定密码
--ask-password网站需要认证时,在网页中输入密码

example:

wget https://www.linuxprobe.com/docs/LinuxProbe.pdf  # 下载指定文件

wget -r -p https://www.linuxprobe.com  # 递归下载网站内的所有数据及文件

curl

curl 命令的用途广泛,其功能包括下载、发送各种 HTTP 请求以及指定 HTTP 头部。语法格式:curl [选项] 网址

选项作用
-C -推断出正确的续传位置。不需要指定准确的字节偏移使用 -C
-dPOST 方式提交用户数据。-d 的字符串参数形式类似于 GET 请求。每对 var=value 之间用 & 分隔
-O指明将下载数据写入文件
-o指定输出文件名
-u username:password完成 HTTP 或 FTP 认证,指定用户名和密码。如果想要提示后再输入密码,则不加 password
-I--head只打印 HTTP 头部信息,无须下载远程文件
--silent不显示进度信息
--progress显示形如 # 的进度条
--referer指定参照页字符串
--cookie指定提供哪些 cookie,多个 cookie 之间用 ; 号分隔
--cookie-jarcookie 另存为文件
--limit-rate限制下载指定带宽。可以用 k(千字节)和 m(兆字节)指定速度限制
--max-filesize指定可下载的最大文件大小

example:

curl www.knopper.net/index.html --silent -o test.html  # 不显示进度,并将文件名改为 test.html

curl www.knopper.net/index.html --limit-rate 20k  # 限制下载速度

lsof

lsof 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。语法格式:lsof [选项]

选项作用
-a列出打开文件存在的进程
-c<进程名>列出指定进程所打开的文件
-g列出 GID 号进程详情
-d<文件号>列出占用该文件号的进程
+d<目录>列出目录下被打开的文件
+D<目录>递归列出目录下被打开的文件
-n<目录>列出使用 NFS 的文件
-i<条件>列出符合条件的进程。(4、6、协议、:端口、 @ip)
-p<进程号>列出指定进程号所打开的文件
-u列出 UID 号进程详情
-R列出父进程标识符
-h显示帮助信息
-v显示版本信息

example:

lsof

COMMAND     PID  TID TASKCMD             USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd       1                          root  cwd       DIR              253,0      224        128 /
systemd       1                          root  rtd       DIR              253,0      224        128 /
systemd       1                          root  txt       REG              253,0  1605448   67840620 /usr/lib/systemd/systemd
systemd       1                          root  mem       REG              253,0  1599024   67499916 /usr/lib64/libm-2.28.so
systemd       1                          root  mem       REG              253,0   636768   67806046 /usr/lib64/libudev.so.1.6.11
systemd       1                          root  mem       REG              253,0   735192   67500018 /usr/lib64/libsepol.so.1
......省略部分内容

各个列表的含义:

  • COMMAND:进程的名称
  • PID:进程标识符
  • USER:进程所有者
  • PGID:进程所属组
  • FD:文件描述符,应用程序通过文件描述符识别该文件
  • TYPE:是与文件关联的节点类型,例如:GDIR、GREG、VDIR、VREG 等。
  • DEVICE:指定磁盘的名称
  • SIZE:文件的大小
  • NODE:索引节点(文件在磁盘上的标识)
  • NAME:打开文件的确切名称

ps

ps 用于查看系统中的进程状态。语法格式:ps [选项]

选项作用
-a显示所有进程(包括其他用户的进程)
-u用户以及其他详细信息
-x显示当前用户在所有终端下的进程
-e显示系统内的所有进程信息
-l使用长(long)格式显示进程信息
-f使用完整的(full)格式显示进程信息
-T查看进程下面的子线程

Linux 系统常见的进程状态:

R(运行):进程正在运行或在运行队列中等待 S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态 D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断 Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用 wait4() 系统函数后将进程释放 T(停止):进程收到停止信号后停止运行

ps -aux

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.7 176264 14616 ?        Ss   Sep23   0:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2  0.0  0.0      0     0 ?        S    Sep23   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Sep23   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Sep23   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   Sep23   0:00 [kworker/0:0H-events_highpri]
root           9  0.0  0.0      0     0 ?        I<   Sep23   0:00 [mm_percpu_wq]
root          10  0.0  0.0      0     0 ?        S    Sep23   0:00 [rcu_tasks_rude_]
root          11  0.0  0.0      0     0 ?        S    Sep23   0:00 [rcu_tasks_trace]
......(省略部分信息)

各个列表的含义:

  • USER:进程的属主
  • PID:进程的 PID
  • %CPU:进程占用的 CPU 百分比
  • %MEM:占用内存的百分比
  • VSZ:进程使用的虚拟內存量(KB)
  • RSS:该进程占用的固定內存量(KB)(驻留中页的数量)
  • TTY:该进程在哪个终端上运行(登陆者的终端位置),若与终端无关,则显示(?)。若为 pts/0 等,则表示由网络连接主机进程
  • STAT:状态位常见的状态字符
    • D:无法中断的休眠状态(通常 IO 的进程)
    • R:正在运行可中在队列中可过行的
    • S:处于休眠状态
    • T:停止或被追踪
    • W:进入内存交换 (从内核 2.6 开始无效)
    • X:死掉的进程 (基本很少見)
    • Z:僵尸进程
    • <:优先级高的进程
    • N:优先级较低的进程
    • L:有些页被锁进内存
    • s:进程的领导者(在它之下有子进程)
    • l:多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
    • +:位于前台的进程组
  • START:该进程被触发启动时间
  • TIME:该进程实际使用 CPU 运行时间
  • COMMAND:命令的名称和参数

pstree

pstree 用于以树状图的形式展示进程之间的关系

选项作用
-A各进程树之间的连接以 ASCII 码字符来连接
-U各进程树之间的连接以 utf8 字符来连接,某些终端可能会有错误
-p同时列出每个进程的 PID
-u同时列出每个进程的所属账号名称
pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─agetty
        ├─atd
        ├─auditd─┬─sedispatch
        │        └─2*[{auditd}]
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─irqbalance───{irqbalance}
        ├─lsmd
        ├─mcelog
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─smartd
        ├─sshd─┬─sshd───sshd───bash───pstree
        │      └─sshd───sshd───sftp-server
        ├─sssd─┬─sssd_be
        │      └─sssd_nss
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───3*[{vmtoolsd}]

top

top 用于动态地监视进程活动及系统负载等信息。语法格式:top | top [-d number] | top [-bn 3 -p 1712]

选项作用
-dnumber 表示页面更新的间隔秒数,默认是 5 秒
-b以批次的方式执行 top
-n-b 配合使用,表示输出的 top 结果次数
-p指定特定的 pid 进程号

top 命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):

  • ?:在 top 当中可以输入的命令
  • d:指定 top 页面的刷新间隔
  • P:以 CPU 的使用资源排序显示
  • M:以内存的使用资源排序显示
  • N:以 pid 排序显示
  • T:由进程使用的时间累计排序显示
  • k:给某一个 pid 一个信号。可以用来杀死进程
  • r:给某个 pid 重新定制一个 nice 值(即优先级)
  • q:退出 top(用 ctrl+c 也可以退出 top)

top 前 5 行统计信息:

第一行top - 10:33:20 up 3 days, 17:19, 1 user, load average: 0.00, 0.00, 0.00

  • 10:33:20:系统时间
  • up 3 days:运行时间
  • 1 user:登录终端数
  • load average: 0.00, 0.00, 0.00:系统负载(三个值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小负载越低)

load average: 如果这个数除以逻辑 CPU 的数量,结果高于 5 的时候就表明系统在超负荷运转了

第二行Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie

  • 162 total:进程总数
  • 1 running:运行中的进程数
  • 161 sleeping:睡眠中的进程数
  • 0 stopped:停止的进程数
  • 0 zombie:僵死的进程数

第三行%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st

  • 0.2 us:用户空间占用 CPU 百分比
  • 0.0 sy:内核空间占用 CPU 百分比
  • 0.0 ni:用户进程空间内改变过优先级的进程占用 CPU 百分比
  • 99.7 id:空闲 CPU 百分比
  • 0.0 wa:等待输入输出的 CPU 时间百分比
  • 0.2 hi:硬中断(Hardware IRQ)占用 CPU 的百分比
  • 0.0 si:软中断(Software Interrupts)占用 CPU 的百分比
  • 0.0 st:用于有虚拟 CPU 的情况,用来指示被虚拟机偷掉的 CPU 时间

第四行MiB Mem : 1785.3 total, 684.9 free, 309.6 used, 790.9 buff/cache

  • 1785.3 total:物理内存总量
  • 684.9 free:空闲内存总量
  • 309.6 used:使用的物理内存总量
  • 790.9 buff/cache:作为内核缓存的内存量

第五行MiB Swap: 2076.0 total, 2076.0 free, 0.0 used. 1276.2 avail Mem

  • 2076.0 total:交换区总量
  • 2076.0 free:空闲交换区总量
  • 0.0 used:使用的交换区总量
  • 1276.2 avail Mem:可用于进程下一次分配的物理内存数量

缓冲的交换区总量:所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入

进程信息:

  • PID:进程 PID
  • PPID:父进程 PID
  • RUSER:真实用户名
  • UID:进程所有者的用户 UID
  • USER:进程所有者的用户名
  • GROUP:进程所有者的组名
  • TTY:启动进程的终端名。
  • PR:优先级
  • NI:nice 值。负值表示高优先级,正值表示低优先级
  • P:最后使用的 CPU,仅在多 CPU 环境下有意义
  • %CPU:上次更新到现在的 CPU 时间占用百分比
  • TIME:进程使用的 CPU 时间总计,单位秒
  • TIME+:进程使用的 CPU 时间总计,单位 1/100 秒
  • %MEM:进程使用的物理内存百分比
  • VIRT:进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
  • SWAP:进程使用的虚拟内存中,被换出的大小,单位 kb
  • RES:进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
  • CODE:可执行代码占用的物理内存大小,单位 kb
  • DATA:可执行代码以外的部分(数据段 + 栈)占用的物理内存大小,单位 kb
  • SHR:共享内存大小,单位 kb
  • nFLT:页面错误次数
  • nDRT:最后一次写入到现在,被修改过的页面数。
  • S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  • COMMAND:命令名/命令行
  • WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
  • Flags:任务标志

nice

nice 用于调整进程的优先级。语法格式:nice 优先级数字 服务名称

提示

优先级的范围:-20~19。共 40 个等级,其中数值越小优先级越高,数值越大优先级越低,即 -20 的优先级最高,19 的优先级最低

选项作用
-n指定优先级数

example:

nice -n -20 sshd

pidof

pidof 用于查询某个指定服务进程的 PID 值。语法格式:pidof [选项] 服务名称

选项作用
-s仅返回一个进程号
-c仅显示具有相同 root 目录的进程
-x显示由脚本开启的进程
-o指定不显示的进程 ID

example:

pidof sshd

kill

kill 用于终止指定 PID 值的服务进程。语法格式:kill [选项] 进程的PID

选项作用
-l信号,如果不加信号的编号选项,则使用 “-l” 选项会列出全部的信号名称
-a当处理当前进程时,不限制命令名和进程号的对应关系
-p指定 kill 命令只打印相关进程的进程号,而不发送任何信号
-s指定发送信号
-u指定用户

信号值:

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
  • 1) SIGHUP:终端的控制进程结束,通知 session 内的各个作业,脱离关系
  • 2) SIGINT:中断(同 Ctrl + C
  • 3) SIGQUIT:退出(同 Ctrl + \),产生 core 文件
  • 4) SIGILL:执行了非法指令,可执行文件本身出现错误
  • 5) SIGTRAP:有断点指令或其他 trap 指令产生,有 debugger 使用
  • 6) SIGABRT:调用 abort 函数生成的信号
  • 7) SIGBUS:非法地址(内存地址对齐出错)
  • 8) SIGFPE:致命的算术错误(浮点数运算,溢出,及除数为 0 错误)
  • 9) SIGKILL:强制终止,用来立即结束程序的运行(不能为阻塞,处理,忽略)
  • 10) SIGUSR1:用户使用
  • 11) SIGSEGV:访问内存错误
  • 12) SIGUSR2:用户使用
  • 13) SIGPIPE:管道破裂
  • 14) SIGALRM:时钟定时信号
  • 15) SIGTERM:终止(正常停止一个进程),程序结束信号(可被阻塞,处理)
  • 16) SIGSTKFLT:协处理器栈堆错误
  • 17) SIGCHLD:子进程结束,父进程收到这个信号并进行处理,(wait 也可以)否则僵尸进程
  • 18) SIGCONT:让一个停止的进程继续执行(不能被阻塞)
  • 19) SIGSTOP:让一个进程停止执行(不能被阻塞,处理,忽略)
  • 20) SIGTSTP:停止进程的运行(可以被处理和忽略)
  • 21) SIGTTIN:当后台作业要从用户终端读数据时, 该作业中的所有进程会收到 SIGTTIN 信号,缺省时这些进程会停止执行
  • 22) SIGTTOU:类似 SIGTTIN,但在写终端时收到
  • 23) SIGURG:有紧急数据或者 out—of—band 数据到达 socket 时产生
  • 24) SIGXCPU:超过 CPU 资源限定,这个限定可改变
  • 25) SIGXFSZ:当进程企图扩大文件以至于超过文件大小资源限制
  • 26) SIGVTALRM:虚拟时钟信号(计算的是该进程占用的 CPU 时间)
  • 27) SIGPROF:时钟信号(进程用的 CPU 时间及系统调用时间)
  • 28) SIGWINCH:窗口大小改变时发出
  • 29) SIGIO:文件描述符准备就绪,可以进行读写操作
  • 30) SIGPWR:power failure
  • 31) SIGSYS:非法的系统调用

提示

linux 的 kill 命令是向进程发送信号,kill 不是杀死的意思,-9 表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因

example:

kill -9 1050

killall

killall 用于终止指定名称服务所对应的全部进程。语法格式:killall [选项] 服务名称

选项作用
-e--exact进程需要和名字完全相符
-I--ignore-case忽略大小写
-g--process-group结束进程组
-i--interactive结束之前询问
-l--list列出所有的信号名称
-q--quite进程没有结束时,不输出任何信息
-r--regexp将进程名模式解释为扩展的正则表达式
-s--signal发送指定信号
-u--user结束指定用户的进程
-v--verbose显示详细执行过程
-w--wait等待所有的进程都结束
-V--version显示版本信息
--help显示帮助信息

example:

killall sshd

ln

ln 用于创建文件的软硬链接。语法格式:ln [选项] 原始文件名 链接文件名

提示

软链接可以对文件、目录做软链接,也可以跨文件系统

硬链接只能对文件做硬链接,不能跨文件系统

选项作用
-s创建 “软连接(符号链接)”,如果不带 -s 选项,则默认创建硬链接
-f强制创建文件或目录的链接
-i覆盖前先询问
-v显示创建链接的过程

example:

ln -s aaa.txt bbb.txt

tee

tee 用于从标准输入读取,再写入标准输出和文件。语法格式:tee [OPTION] [FILE]

选项作用
-a追加到文件
-i忽略终端信号
-P诊断写入非管道的错误
--output-error[=MODE]设置输出错误的方式
  • MODE:
    • warn:写入遇到错误时诊断
    • warn-nopipe:写入非管道遇到错误时诊断
    • exit:写入遇到错误时退出
    • exit-nopipe:写入非管道遇到错误时退出

如果没有指定 --output-errortee 会在写入管道发生错误时立即退出,写入非管道时诊断

example:

[root@localhost shell]# echo "one" | tee test.txt
one

[root@localhost shell]# cat test.txt
one

[root@localhost shell]# echo "two" | tee -a test.txt
two

[root@localhost shell]# cat test.txt
one
two

eval

eval 会对后面的 cmdLine 进行两遍扫描,如果第一遍扫描后,cmdLine 是个普通命令,则执行此命令;如果 cmdLine 中含有变量,则进行对变量的替换再执行命令。语法格式:eval cmdLine

example:

NAME=ZONE

eval echo $NAME 等价于 echo $NAME  # 输出结果:ZONE

[root@localhost shell]# echo "Hello shell world!" > test.txt
[root@localhost shell]# myfile="cat test.txt"
[root@localhost shell]# echo $myfile  # 输出结果:cat test.txt
[root@localhost shell]# eval $myfile  # 输出结果:hello shell world!

提示

执行 eval $myfile 命令时,先将 $myfile 替换成 cat test.txt,执行 eval cat test.txt 此命令

bc

bc 是一种支持任意精度数字的语言,支持语句的交互式执行。语法格式:bc [OPTION] [FILE]

选项作用
-h–help打印此用法并退出
-i–interactive强制交互模式
-l–mathlib使用预定义的数学例程
-q–quiet不要打印初始横幅
-s–standard非标准 bc 构造是错误的
-w–warn警告非标准 bc 构造
-v–version打印版本信息并退出

支持的运算包括:

  • +:加法
  • -:减法
  • *: 乘法
  • /:除法
  • ^:指数
  • %:余数

特殊变量说明

  • 浮点数精度变量 scale=10:设置之后的 scale 为 10,默认为 0(及整数除法会返回整数)
  • 进制变量 obase=16;ibase=16:设置输入和输出都为 16 进制,默认值为 10。注意:为 10 时可不设置 ibaseobase 的值,obase 要尽量放在 ibase 前面,因为 ibase 设置后,后面的数字都是以 ibase 的进制来换算的
  • last:是指上一次返回出来的数字
  • quit:退出计算

example:

[root@localhost shell]# bc -q
100 / 3
33
scale = 4
100 /3
33.3333

a=3
b=4
a+b
7
c=100
c * last
700
quit

[root@localhost shell]# echo "sqrt(100)" | bc
10
[root@localhost shell]#
[root@localhost shell]# echo "3^3" | bc
27
[root@localhost shell]# echo "obase=2;10" | bc  # 十进制转二进制
1010
[root@localhost shell]# echo "obase=16;10" | bc  # 十进制转十六进制
A
[root@localhost shell]# echo "obase=8;10" | bc  # 十进制转八进制
12
[root@localhost shell]# echo "obase=10;ibase=16;A" | bc  # 十六进制转十进制
10
[root@localhost shell]# echo "obase=10;ibase=2;1010" | bc  # 二进制转十进制
10

管理 SELinux 服务命令

getenforce

getenforce 用于查看当前 SELinux 服务的运行模式。语法格式:getenforce

SELinux 运行模式:

  • enforce:启用
  • permissive:发出警告不拦截
  • disabled:禁用

example:

getenforce

setenforce

setenforce 用于设置 SELinux 服务的运行模式。语法格式:setenforce [0|1]

选项作用
0禁用 SELinux 服务
1启用 SELinux 服务

example:

setenforce 0

semanage

semanage 用于管理 SELinux 的策略。语法格式:semanage [位置参数] [选项] 文件名

可以使用 semanage -h 查看

位置参数作用
import导入本地自定义
export输出本地自定义
login管理 linux 用户和 SELinux 之间的登录映射受限用户
user管理 SELinux 受限用户(角色和级别 SELinux 用户)
port管理网络端口类型定义
ibpkey管理 infiniband ibpkey 类型定义
ibendport管理 infiniband 端端口类型定义
interface管理网络接口类型定义
module管理 SELinux 策略模块
node节点管理网络节点类型定义
fcontext管理文件上下文映射定义
boolean管理布尔值以选择性地启用功能
permissive管理进程类型强制模式
dontaudit在策略中禁用/启用 dontauedit 规则

可以使用 semanage [位置参数] -h 查看

选项作用
-l查询
-a添加
-m修改
-d删除
-tSELinux 的对象类型

example:

ls -Zd /var/www/html  # 查看 /var/www/html 目录的安全上下文值

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

restorecon

restorecon 用于将设置好的 SELinux 安全上下文立即生效。语法格式:restorecon [选项] 文件名

选项作用
-R递归
-v显示修改过程

example:

restorecon -Rv /home/wwwroot/

getsebool

getsebool 用于查询 SELinux 安全策略的布尔值。语法格式:getsebool [选项] [布尔值条款]

提示

getsebool 显示所有 SELinux 布尔值,其中 off 为禁止状态,on 为允许状态

选项作用
-a显示所有 SELinux 布尔值
-P将修改后的 SELinux 策略永久生效且立即生效

example:

getsebool -a | grep http  # 查看 http 协议相关的安全策略
getsebool -P httpd_enable_homedirs=on  # 开启 http 服务的个人用户主页功能

查看磁盘信息

mount

mount 用于挂载文件系统。语法格式:mount [选项] 文件系统 挂载目录

选项作用
-a自动挂载所有在 /etc/fstab 中定义的文件系统
-c不规范化路径
-l显示文件系统标签
-n不要写入 /etc/mtab
-r以只读方式装载文件系统(与 -oro 相同)
-t指定文件系统类型
-w挂载文件系统读写(默认)
-o<选项>指定加载文件系统选项

example:

mount -t ext4 /dev/sdb2 /backup

-o 选项如下:

  • async:以非同步的方式执行文件系统的输入、输出动作
  • atime:每次存取都更新 inode 的存取时间,默认设置,取消选项为 noatime
  • auto:必须在 /etc/fstab 文件中指定此选项。指定 -a 选项时,会加载设置为 auto 的设备,取消选项为 noauto
  • dev:可读文件系统上的字符或块设备,取消选项为 nodev
  • exec:可执行二进制文件,取消选项为 noexec
  • noatime:每次存取时不更新 inode 的存取时间
  • noauto:加入此选项,就无法使用 -a 选项来加载
  • nodev:不读文件系统上的字符或块设备
  • noexec:无法执行二进制文件
  • nosuid:关闭 set-user-identifier(设置用户 ID)与 set-group-identifer(设置组 ID)设置位
  • nouser:使用户无法执行加载操作,默认设置
  • iocharset=XXX:指定 mount 分区时使用的字符集
  • codepage=XXX:指定 mount 分区时使用的内码表
  • remount:重新加载设备。通常用于改变设备的设置状态
  • ro:以只读模式加载
  • rw:以可读写模式加载
  • suid:启动 set-user-identifier(设置用户 ID)与 set-group-identifer(设置组 ID)设置位,取消选项为 nosuid
  • sync:以同步方式执行文件系统的输入、输出动作
  • user:可以让一般用户加载设备
  • defaults:使用默认选项。默认选项为 rwsuiddevexecantonouserasync

-t<文件系统类型> 指定设备的文件系统类型,常用选项如下:

  • ext3/ext2:Linux 目前的常用文件系统
  • msdos:MS-DOS 的 FAT
  • vfat:Windows 95/98 的 VFAT
  • nfs:网络文件系统
  • iso9660:CD-ROM 光盘的标准文件系统
  • ntfs:Windows NT 的文件系统

umount

umount 用于卸载设备或文件系统。语法格式:umount [设备文件/挂载目录]

提示

如果当前就处在设备所挂载的目录时,系统会提升该设备繁忙,只需退出到其他目录在使用 umount 命令即可

example:

umount /dev/sdb2

blkid

blkid 用于显示设备的属性信息。语法格式:blkid [设备名]

example:

blkid  # 查看所有设备信息
blkid /dev/nvme0n1p1  # 查看指定设备信息

df

df 用于查看已挂载的磁盘空间使用情况。语法格式:df [选项]

选项作用
-a查看所有文件系统,包括伪、重复、不可访问的文件系统
-h人类可读的显示大小,1024 次方(例如:1023M)
-H显示大小为 1000 次方(例如:1.1G)
-i列出索引节点信息
-l本地文件系统列表
-T显示文件系统类型

example:

df -hT

fdisk

fdisk 用于新建、修改及删除磁盘的分区表信息。语法格式:fdisk 磁盘名称

fdisk 命令中的选项作用:

选项作用
m查看全部可用的选项
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

example:

fdisk /dev/sdb

mkfs

mkfs 用于格式化文件系统。语法格式:mkfs.文件类型 磁盘名称

example:

mkfs.xfs /dev/sdb2

du

du 用于查看分区或目录所占用的磁盘容量大小。语法格式:du [选项] 目录名称

选项作用
-a显示目录中所有文件的大小
-b显示目录或文件大小时,以 byte 为单位
-c除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
-D显示指定符号连接的源文件大小
-hKMG 为单位,提高信息的可读性
-H-h 选项相同,但是 KMG 是以 1000 为换算单位
-k以 1024 bytes 为单位
-l重复计算硬件连接的文件
-m1MB 为单位
-s仅显示总计
--max-depth限制 du 应该遍历多少层子目录

example:

du -sh /etc

fsck

fsck 用于检查文件系统并尝试修复错误。语法格式:fsck [选项] [-t <文件系统类型>] [设备名]

选项作用
-A检查所有文件系统
-C[<fd>]显示进度条;文件描述符用于 GUI
-l锁定设备以保证独占访问
-M不检查已装载的文件系统
-N不执行,只显示将要执行的操作
-P并行检查文件系统,包括根
-R跳过根文件系统;仅与 -A 一起使用
-r[<fd>]报告检查的每个设备的统计信息;文件描述符用于 GUI
-s序列化检查操作
-T启动时不显示标题
-t<type>指定要检查的文件系统类型;<type> 允许是逗号分隔的列表
-V显示过程

example:

fsck -rV -t ext3 /dev/sda2  # 检查并尝试修复出问题的磁盘分区 /dev/sda2,在执行修复时进行询问,让用户得以确认并决定处理方式

sync

sync 用于强制将内存缓冲区中的数据立即写入磁盘。语法格式:sync [选项] [文件]

用户通常无需执行 sync 命令,系统会自动执行 updatebdflush 操作,将缓冲区的数据写入磁盘

选项作用
-d只同步文件数据,没有不需要的元数据
-f同步包含文件的文件系统

example:

sync

状态检测命令

ifconfig

ifconfig 用于获取网卡配置与网络状态等信息。语法格式:ifconfig [选项] [网络设备]

选项作用
-a显示所有接口信息
-s显示简要信息
-a显示所有接口信息
-a显示所有接口信息

example:

ifconfig ens160

ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.151  netmask 255.255.255.0  broadcast 192.168.4.255
        inet6 fe80::20c:29ff:fe6a:447a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6a:44:7a  txqueuelen 1000  (Ethernet)
        RX packets 57848  bytes 47691039 (45.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 45972  bytes 3837385 (3.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

启动或关闭指定网卡:

ifconfig ens160 up
ifconfig ens160 down
ifup ens160
ifdow ens160

promisc 设置是否支持网卡的 promiscuous 模式,选择此选项,网卡将接收网络中发给它所有的数据包

ifconfig ens160 promisc    //设置
ifconfig ens160 -promisc    //取消设置

allmulti 设置是否支持多播模式,选择此选项,网卡将接受网络中所有的多播数据包

ifconfig ens160 allmulti    //设置
ifconfig ens160 -allmulti    //取消设置

配置 IP 地址:

ifconfig ens160 192.168.4.120
ifconfig ens160 192.168.4.120 netmask 255.255.255.0
ifconfig ens160 192.168.4.120 netmask 255.255.255.0 broadcast 192.168.4.255

单网卡添加多个 IP 地址:

ifconfig ens160:0 192.168.4.130 netmask 255.255.255.0
ifconfig ens160:1 192.168.4.131 netmask 255.255.255.0

删除 IP 地址:

ifconfig ens160 del 192.168.4.120

启动或关闭 ARP 协议:

ifconfig ens160 arp
ifconfig ens160 -arp

nslookup

nslookup 用于域名与 IP 地址的解析记录。语法格式:nslookup [域名 | IP]

example:

nslookup www.baidu.com
nslookup 192.168.10.10

nmcli

nmcli 网络管理,查看设备信息,并进行配置。语法格式:nmcli [选项] 对象 { COMMAND | help }

选项作用
-a询问缺少的选项
-c是否在输出中使用颜色
-e值中的转义列分隔符
-f指定要输出的字段
-h打印此帮助
-m输出模式
-o概览模式
-p漂亮输出
-s允许显示密码
-t简洁输出
-v显示程序版本
-w设置等待完成操作的超时

提示

可以只写对象的前几个字母,或只写对象的第一个字母

对象作用
generalNetworkManager 的常规状态和操作
networking整体联网控制
radioNetworkManager radio 开关
connectionNetworkManager 的连接
device由 NetworkManager 管理的设备
agentNetworkManager secret agent or polkit agent
monitor监视 NetworkManager 更改

example:

nmcli con show  # 查看网卡信息
nmcli con show eth0  # 查看指定网卡的详细信息
nmcli con show -active  # 查看活动的网络连接
nmcli status  # 显示设备的连接状态
nmcli dev show  # 显示所有设备网络设备详情信息
nmcli dev show eth0  # 显示指定设备网络设备详情信息

nmcli con up eth0  # 启用网络连接
nmcli con down eth0  # 停用网络连接(可以被自动激活)
nmcli device disconnect eth0  # 禁用网卡,防止自动被激活
nmcli con delete eth0  # 删除网络连接的配置文件
nmcli con reload  # 重新加载网络配置文件

route

route 用于查看网络信息,操作和显示 IP 路由表。语法格式:route [选项] [-A family |-4|-6]

选项作用
-n不解析名字
-v显示详细的处理信息
-F显示转发信息库(默认)
-C显示路由缓存
del删除路由
add添加新的路由
-net目标地址是一个网络
-host目标地址是一个主机
netmask添加网络路由时,要使用的网络掩码
gw通过网关路由数据包
metric设置路由跳数
route -n  # 以 IP 地址的形式显示
route add -net 192.56.76.0 netmask 255.255.255.0 metric 1024 dev eth0  # 通过 “eth0” 向本地网络 192.56.76.x 添加路由。这里可以省略单词 “dev”
route del default  # 删除当前默认路由,该路由在当前路由表的目标字段中标记为“default”或0.0.0.0

uname

uname 用于查看系统内核版本与系统架构等信息。语法格式:uname [选项]

选项作用
-a显示全部的信息
-m显示电脑类型
-n显示在网络上的主机名称
-r显示操作系统的发行编号
-s显示操作系统名称

example:

uname -a

Linux localhost.localdomain 4.18.0-408.el8.x86_64 #1 SMP Mon Jul 18 17:42:52 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

uptime

uptime 用于查看系统的负载信息。语法格式:uptime [选项]

选项作用
-p采用可读友好的格式输出系统已运行时长
-s以格式 2022-09-23 17:13:50 输出系统
-h显示帮助信息
-v显示版本信息

example:

uptime

 13:31:26 up 2 days, 20:17,  1 user,  load average: 0.00, 0.00, 0.00
Swap:         2.0Gi          0B       2.0Gi
  • 13:31:26:显示当前系统时间
  • up 2 days, 20:17:系统已运行时间
  • 1 user:启用终端数量
  • load average: 0.00, 0.00, 0.00:平均负载值(三个值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小负载越低)

free

free 用于显示当前系统中内存的使用量。语法格式:free [选项]

选项作用
-b以 bytes 为单位来显示内存的信息
-k以 kb 为单位来显示内存的信息
-m以 m 为单位来显示内存的信息
-h以 G 为单位来显示内存的信息
-h以适于人类可读方式显示内存信息。-h 与其他命令最大不同是 -h 选项会在数字后面加上适于人类可读的单位
-l显示高低内存的利用率
-t显示 linux 的全部内存
-s N表示每隔 N 秒打印一次内存信息,直到用 ctrl + c 结束
-c N表示重复打印内存信息 N 次
-w输出样式为宽输出
-V显示版本信息

example:

free -h

              total        used        free      shared  buff/cache   available
Mem:          1.7Gi       308Mi       699Mi        16Mi       777Mi       1.2Gi
Swap:         2.0Gi          0B       2.0Gi
  • total:总计内存的大小
  • used:已使用内存的大小
  • free:空闲内存的大小
  • shared:多个进程共享的内存总额
  • buff/cache:磁盘的缓存大小
  • available:可以被新应用程序使用的内存大小

who

who 用于查看当前登入主机的用户终端信息。语法格式:who [选项]

选项作用
-a显示所有用户的所有信息
-m显示运行该程序的用户名,和 who am I 的作用一样
-q只显示用户的登陆帐号和登陆用户的数量,该选项优先级高于其他任何选项
-u在登陆用户后面显示该用户最后一次对系统进行操作距今的时间
-H显示列标题

example:

who

root     pts/0        2022-09-23 17:14 (192.168.4.1)

last

last 用于调取主机的被访记录。语法格式:last [选项]

选项作用
-a把从何处登入系统的主机名称或 IP 地址,显示在最后一行
-d将 IP 地址转换成主机名称
-f <记录文件>指定记录文件
-n <显示列数>-<显示列数>设置列出名单的显示列数
-R不显示登入系统的主机名称或 IP 地址
-x显示系统关机,重新开机,以及执行等级的改变等信息

example:

last

root     pts/0        192.168.4.1      Fri Sep 23 17:14   still logged in
reboot   system boot  4.18.0-408.el8.x Fri Sep 23 17:14   still running
root     pts/0        192.168.4.1      Mon Sep 19 21:49 - 16:14 (2+18:24)
root     pts/2        192.168.4.1      Mon Sep 19 20:10 - 23:50  (03:39)
root     pts/1        192.168.4.1      Mon Sep 19 20:08 - 21:49  (01:41)
root     pts/0        192.168.4.1      Mon Sep 19 19:14 - 21:49  (02:35)
reboot   system boot  4.18.0-408.el8.x Mon Sep 19 19:09 - 16:14 (2+21:04)
root     pts/0        192.168.4.1      Mon Sep 19 18:48 - 19:09  (00:20)
root     tty1                          Mon Sep 19 18:48 - 19:09  (00:21)
reboot   system boot  4.18.0-408.el8.x Mon Sep 19 18:38 - 19:09  (00:31)

wtmp begins Mon Sep 19 18:38:23 2022

ping

ping 用于测试主机之间的网络连通性。语法格式:ping [选项] 主机地址

选项作用
-c总共发送次数
-f极限检测,快速连续 ping 一台主机,ping 的速度达到 100 次每秒
-I指定网卡名称
-i每次间隔时间(秒)
-n不要将 IP 地址转换成主机名
-s指定每次 ping 发送的数据字节数,默认为 “56 字节” + “28 字节” 的 ICMP 头,一共是 84 字节;包头 + 内容不能大于 65535,所以最大值为 65507(linux:65507, windows:65500)
-W最长等待时间(秒)

example:

ping www.baidu.com

tracepath

tracepath 用于显示数据包达到主机途中所经过的路由信息。语法格式:tracepath [选项] 域名

选项作用
-n主要以数字形式打印 IP 地址
-b打印主机名和 IP 地址
-l将 tracepath 的初始数据包长度设置为 pktlen,而不是 65535 或 tracepath6 的 128000
-m将最大跃点(或最大 TTL)设置为 max_hops,而不是 30
-p设置要使用的初始目标端口

example:

tracepath www.baidu.com

 1?: [LOCALHOST]                      pmtu 1500
 1:  _gateway                                              0.301ms
 1:  _gateway                                              0.256ms
 2:  no reply
 3:  no reply
......(省略部分内容)

netstat

netstat 用于显示网络连接、路由表、接口状态等网络相关信息。语法格式:netstat [选项]

选项作用
-a显示所有连接中的 Socket
-p显示正在使用的 Socket 信息
-t显示 TCP 协议的连接信息
-u显示 UDP 协议的连接信息
-n使用 IP 地址,不使用域名
-l仅列出正在监听的服务状态
-i现在网卡列表信息
-r显示路由表信息

example:

netstat -anpt

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1050/sshd
tcp        0    208 192.168.4.151:22        192.168.4.1:52934       ESTABLISHED 1690/sshd: root [pr
tcp        0      0 192.168.4.151:22        192.168.4.1:52936       ESTABLISHED 1697/sshd: root [pr
tcp6       0      0 :::22                   :::*                    LISTEN      1050/sshd

State 链接状态:

  • ESTABLISHED:指 TCP 连接已建立,双方可以进行方向数据传递
  • CLOSE_WAIT:表示在等待关闭
  • LISTENING:指 TCP 正在监听端口,可以接受链接
  • TIME_WAIT:指连接已准备关闭
  • FIN_WAIT_1:表示等待对方的 FIN 报文。SOCKET 在 ESTABLISHED 状态时,它想主动关闭连接,向对方发送了FIN 报文
  • FIN_WAIT_2:表示等待对方的 FIN 报文。SOCKET 在 ESTABLISHED 状态时,它想主动关闭连接,向对方发送了FIN 报文,并对方回应 ACK 报文后
  • LAST_ACK:是被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报文
  • SYNC_RECEIVED:收到对方的连接建立请求
  • SYNC_SEND:已经主动发出连接建立请求

history

history 用于显示执行过的命令历史。语法格式:history [选项]

选项作用
-c清空当前用户在本机上执行的 Linux 命令历史记录信息
-n显示历史记录中最近的 N 个记录,例如 history 5

example:

history

sosreport

sosreport 用于收集系统配置及架构信息并输出诊断文档,收集好的资料压缩文件以及校验码,在输出内容的最下面显示。语法格式:sosreport [选项]

选项作用
-l列出所有可用的插件及其选项
-n禁用指定的插件
-e启用指定的插件
-a对于所有的插件启用,将所有布尔选项设置为 True
-v增加日志记录的详细程度
--no-report禁用 HTML 报告写入
--config-fileCONFIG 指定备用配置文件

example:

sosreport

Please note the 'sosreport' command has been deprecated in favor of the new 'sos' command, E.G. 'sos report'.
Redirecting to 'sos report '


sosreport (version 4.3)

......(省略部分内容)

Your sosreport has been generated and saved in:
        /var/tmp/sosreport-localhost-2022-09-26-vdphrie.tar.xz

 Size   14.34MiB
 Owner  root
 sha256 96cd338ec557b41681041449d9ea402dcf2959573c254b1bd067da0441c2556c

Please send this file to your support representative.

watch

watch 命令会按照指定的间隔时间来执行命令并显示其输出,命令默认每 2 秒更新一次输出。语法格式:watch [选项] 命令

选项作用
-n指定更新输出的时间间隔
-d重标记出连续的命令输出之间的差异

example:

watch -n 5 'ls -l'
watch -n 30 -d 'ss | grep ESTAB'

查找定位文件命令

pwd

pwd 用于显示用户当前所处的工作目录

example:

pwd

cd

cd 用于切换当前的工作路径。语法格式:cd [选项] [目录]

  • cd -:返回到上一次所处的目录
  • cd ../:进入当前目录的上一级目录
  • cd ./:当前目录
  • cd ~:返回到当前用户的家目录

example:

cd /opt

ls

ls 用于显示目录中文件信息。语法格式:ls [选项] [文件名称]

选项作用
-a查看目录下的所有文件,包括隐藏文件
-l查看文件属性、大小等详细信息
-r对文件反向排序
-t对文件以时间排序
-Z查看文件的安全上下文值

example:

ls -al

total 40
dr-xr-x---.  4 root root   184 Sep 26 10:43 .
dr-xr-xr-x. 17 root root   224 Sep 19 18:30 ..
-rw-------.  1 root root  1247 Sep 19 18:37 anaconda-ks.cfg
-rw-------.  1 root root  3921 Sep 22 16:14 .bash_history
-rw-r--r--.  1 root root    18 May 11  2019 .bash_logout
-rw-r--r--.  1 root root   176 May 11  2019 .bash_profile
-rw-r--r--.  1 root root   176 May 11  2019 .bashrc
drwx------.  3 root root    20 Sep 21 18:47 .config
-rw-r--r--.  1 root root   100 May 11  2019 .cshrc
drwxr-xr-x.  3 root root    19 Sep 26 10:43 .systemtap
-rw-r--r--.  1 root root   129 May 11  2019 .tcshrc
-rw-------.  1 root root 11371 Sep 22 11:26 .viminfo

tree

tree 用于以树状图的形式列出目录内容及结构。语法格式:tree [选项]

选项作用
-a打印所有文件,包括隐藏文件、目录
-C在文件和目录清单上加上色彩,便于区分文件类型
-d仅列出目录名称,而非内容
-D列出文件或目录更改时间
-L目录树的最大显示深度
-p打印结构同时打印文件权限
-l跟随目录的符号链接,就像它们是目录一样。 避免了导致递归循环的链接
-f打印每个文件的完整路径前缀
-F在每个条目后加上文件类型的指示符(如目录是 /

example:

tree
.
└── anaconda-ks.cfg

0 directories, 1 file

find

find 用于按照指定条件来查找文件所对应的位置。语法格式:find [查找范围] [选项]

选项作用
-name匹配名称
-perm匹配权限(mode 为完全匹配,-mode 为包含即可)
-user匹配所有者
-group匹配所有组
-mtime -n +n匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser匹配无所有者的文件
-nogroup匹配无所有组的文件
-newer f1 !f2匹配比文件 f1 新但比 f2 旧的文件
--type b/d/c/p/l/f匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size匹配文件的大小(+50KB 为查找超过 50KB 的文件,而 -50KB 为查找小于 50KB 的文件)
-prune忽略某个目录
-exec .....{}\;后面可跟用于进一步处理搜索结构的命令

example:

find / -name anaconda-ks.cfg

locate

locate 用于按照名称快速搜索文件所对应的位置。语法格式:locate 文件名称

提示

find 命令进行全盘搜索虽然更准确,但是效率有点低,如果仅仅是想找一些常见的、又知道大概名称的文件,不如试试 locate 命令

locate 命令是将一些常用的目录作成一个索引库文件,一般叫做 /var/lib/mlocate/mlocate.db,后续再搜索文件的时候就是根据这个数据库中所包含的路径查找,速度会快很多

第一次使用 locate 命令前,先执行 updatedb 命令来生成索引数据库,然后再进行查找

example:

updatedb
locate anaconda-ks.cfg

whereis

whereis 用于按照名称快速搜索二进制程序(命令)、源代码以及帮助手册文件所对应的位置。语法格式:whereis 命令名称

example:

whereis cd

which

which 用于按照名称快速搜索二进制程序(命令)所对应的位置。语法格式:which 命令名称

example:

which cd

cat

cat 用于查看纯文本文件(内容较少的)。语法格式:cat [选项] 文件名称

选项作用
-n显示行号
-b显示行号,空白行不显示行号
-s当遇到有连续两行或两行以上的空白行,就代换为一行的空白行
-e在输出内容的每一行后面加一个 $ 符号。(包括空白行)

example:

cat anaconda-ks.cfg

more

more 用于查看纯文本文件(内容较多的)。语法格式:more [选项] 文件名称

选项作用
+<number>从第 n 行开始显示
-<number>定义屏幕大小为 n 行
+/pattern在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c从顶部清屏,然后显示
-d提示 “Press space to continue,’q’ to quit(按空格键继续,按 q 键退出)”,禁用响铃功能
-l忽略 Ctrl+l(换页)字符
-p通过清除窗口而不是滚屏来对文件进行换页,与 -c 选项相似
-s把连续的多个空行显示为一行
-u把文件内容中的下画线去掉

example:

more anaconda-ks.cfg

head 用于查看纯文本文件的前 N 行。语法格式:head [选项] 文件名称

默认查看文本文件的前 10 行

选项作用
-n指定前 N 行
-c输出文件前面的 K 个字节

example:

head -n 5 anaconda-ks.cfg

tail

tail 用于查看纯文本文件的后 N 行或持续刷新文件的最新内容。语法格式:tail [选项] 文件名称

默认查看文本文件的后 10 行

选项作用
-n指定后 N 行
-c输出文件最后的 K 个字节
-f持续刷新文件内容

example:

tail -n 5 anaconda-ks.cfg

tr

tr 用于替换文本内容中的字符。语法格式:tr [原始字符] [目标字符]

选项作用
-d删除指定字符串
-s删除所有重复出现字符序列,只保留一个;即将重复出现字符串压缩为一个字符串

example:

cat anaconda-ks.cfg | tr [a-z] [A-Z]
tr -d '\n\t' anaconda-ks.cfg  # 删除空格和制表符
tr -s ' ' anaconda-ks.cfg  # 将多个空格保留一个

wc

wc 用于统计指定文本文件的行数、字数或字节数。语法格式:wc [选项] 文件名称

选项作用
-l只显示行数
-w只显示单词数
-c只显示字节数

example:

wc anaconda-ks.cfg

  52  105 1247 anaconda-ks.cfg

stat

stat 用于查看文件的具体存储细节和时间等信息。语法格式:stat 文件名称

example:

stat anaconda-ks.cfg

  File: anaconda-ks.cfg
  Size: 1247            Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 201326724   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2022-09-26 10:43:41.301895665 +0800
Modify: 2022-09-19 18:37:33.175123857 +0800
Change: 2022-09-19 18:37:33.175123857 +0800
 Birth: 2022-09-19 18:37:33.073120718 +0800

grep

grep 用于按行提取文本内容。语法格式:grep [选项] 文件名称

选项作用
-b将可执行文件(binary)当作文本文件(text)来搜索
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v取反
-E扩展 grep

example:

grep "root" /etc/passwd

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

cut

cut 用于案列提取文本内容。语法格式:cut [选项] 文件名称

选项作用
-b以字节为单位进行分割
-c以字符为单位进行分割
-d自定义分隔符,默认为制表符
-f设置需要查看的列数

example:

cut -d : -f 1 /etc/passwd

root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
......(省略部分内容)

diff

diff 用于比较多个文件之间内容的差异。语法格式:diff [选项] 文件名称A 文件名称B

选项作用
-adiff 只会逐行比较文本文件
-b不检查空格字符的不同
-c描述文件内容具体的不同
-H比较大文件时,可加快速度

diff 命令的显示结果有以下两种方式:

  • <:表示第一个文件中的数据行
  • >:表示第二个文件中的数据行

example:

diff -c A.txt B.txt

*** A.txt       2022-09-26 13:52:21.734094906 +0800
--- B.txt       2022-09-26 13:52:35.845517696 +0800
***************
*** 1,6 ****
  aaaa
! bbb
! ccc
! ddd
! eeee
! ffff
--- 1,6 ----
  aaaa
! bbbbbbb
! cccc
! d
! eee
! fffff

uniq

uniq 用于去除文本中连续重复的行。语法格式:uniq [选项] 文件名称

选项作用
-c--count打印每行出现的次数
-d--repeated只打印重复出现的行
-D打印所有重复行
--all-repeated[=METHOD]类似 -D,使用空行分隔每个组,METHOD=none,prepend,separate
-f--skip-fields=N不比较前 N 个字段
--group[=METHOD]使用空行分隔每个组,METHOD=separate,prepend,append,both
-i--ignore-case忽略大小写
-s--skip-chars=N不比较前 N 个字符
-u--unique只打印出现一次的行
-z--zero-terminated行分隔符是 NUL 而不是换行符
-w--check-chars=N比较不多于 N 个字符
--help帮助文档
--version版本信息

example:

uniq B.txt

aaaa
bbbbbbb
cccc
d
eee
fffff

sort

sort 用于对文本内容进行排序,默认为正序排序。语法格式:sort [选项] 文件名称

选项作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围

example:

sort -r C.txt

www
jjj
gg
ee
ddd
ccc
aaa

split

split 用于将一个文件分割成数个。语法格式:split [选项] 文件名

选项作用
-a生成长度为 N 的后缀(默认值为 2)
--additional-suffix=SUFFIX将附加后缀添加到分割后的文件名
-b为每个输出文件输入 SIZE 字节
-C每个输出文件最多放置行的大小字节
-d使用从 0 开始的数字后缀,而不是字母后缀
--numeric-suffixes[=FROM]-d 相同,但允许设置起始值
-x使用从 0 开始的十六进制后缀,而不是字母后缀
--hex-suffixes[=FROM]-x 相同,但允许设置起始值
-e不会生成带有 -n 的空输出文件
--filter=COMMAND写入 shel 命令;文件名为 $file
-l指定分割每个文件的长度(默认为 1000 行)
-n指定分割多少个文件
-u使用 -n r/… 立即将输入复制到输出

example:

split -b 100M aaa.txt  # 将文件分割为 100M 大小的文件
split -l 10 aaa.txt  # 将文件分割为 10 行大小的文件
split -n 3 aaa.txt  # 将文件分割为 3 个文件

touch

touch 用于创建空白文件或设置文件的时间。语法格式:touch [选项] 文件名称

选项作用
-a仅修改 “读取时间”(atime)
-m仅修改 “修改时间”(mtime)
-d同时修改 atime 和 mtime
-c仅修改文件的时间,若该文件不存在则不建立新文件
-t后面可以接想要修改的时间而不用目前时间,格式为 [YYMMDDhhmm]

example:

touch -d "2022-05-06" 15:21 anaconda-ks.cfg

mkdir

mkdir 用于创建目录。语法格式:mkdir [选项] 目录名称

选项作用
-p递归创建目录
-m在创建目录的同时设定权限
-v显示创建目录的过程信息
-Z将每个创建的目录的 SELinux 安全环境设置为 CTX

example:

mkdir aaa

chmod

chmod 用于修改文件属主、属组和其他用户访问权限。语法格式:chmod [选项] 文件名

提示

读、写、执行的权限可以分别用:4、2、1 数字表示

属主、属组、其他用户可以分别用:u、g、o 表示

字母 a 包括属主、属组、其他用户

选项作用
-c若该文件权限确实已经更改,才显示其更改动作
-f若该文件权限无法被更改也不要显示错误信息
-v显示权限变更的详细信息
-R递归更改文件和目录

example:

drwxr-xr-x. 110 root root 8192 Oct 10 14:50 etc
  • d:这个 d 表示这是一个目录文件(- 表示普通文件;l 表示链接文件;p 表示管道文件;b 表示块设备文件;c 表示字符设备文件)
  • rwx:第一个 rwx 表示属主具有读、写、执行的权限
  • r-x:第二个 r-x 表示属组具有读、执行的权限(读、写、执行,没有哪一个权限,就用 - 代替)
  • r-x:第三个 r-x 表示其他用户具有读、执行的权限
  • .:最后的 . 表示 SELinux 安全机制打开
chmod 754 aaa.txt    ### 第一个 7 表示属主具有读、写、执行权限,即 4+2+1=7;第二个 5 表示属组具有读、执行权限,即 4+1=5;第三个 4 表示其他用户具有读权限,即 4

chmod u-wx,g+w aaa.txt    ### u-wx 表示属主在原有的权限上,取消写、执行权限;g+w 表示属组在原有的权限上,添加写的权限

chmod a+x aaa.txt    ### a+x 表示属主、属组、其他用户在原有的权限上,都添加执行权限

特殊权限:

选项作用
u+s设置 SUID 权限
u-s取消 SUID 权限
g+s设置 SGID 权限
g-s取消 SGID 权限
o+t设置 SBIT 权限
o-t取消 SBIT 权限
  • SUID:可以让执行者临时拥有文件属主的权限

    • 如果原有文件有 x 执行权,赋予特殊权限后为 rws,如果原有文件没有 x 执行权,赋予特殊权限后为 rwS(例如:-rwsr-xr-x.)
  • SGID:对普通文件设置时,让执行者临时拥有文件属组的权限;而对目录进行设置时,让目录内新创建的文件属组自动继承该目录原有的属组

    • 如果原有文件有 x 执行权,赋予特殊权限后为 rws,如果原有文件没有 x 执行权,赋予特殊权限后为 rwS(例如:-rwxr-sr-x.)
  • SBIT:该目录中的文件就只能被其属主用户删除,其他用户没有删除权限

    • 如果原有文件有 x 执行权,赋予特殊权限后为 rwt,如果原有文件没有 x 执行权,赋予特殊权限后为 rwT(例如:-rwxr-xr-t.)
  • X:特殊执行权限,只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行

example:

chmod u+s aaa.txt

chattr

chattr 用于设置文件的隐藏权限。语法格式:chattr [选项] 文件名

选项作用
i无法对文件进行修改,若对目录设置该选项,则仅能修改其中的子文件内容而不能新建或删除文件
a仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S文件内容在变更后立即同步到硬盘(sync)
s彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域)
A不再修改这个文件或目录的最后访问时间(atime)
b不再修改文件或目录的存取时间
D检查压缩文件中的错误
d使用 dump 命令备份时忽略本文件/目录
c默认将文件或目录进行压缩
U当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t让文件系统支持尾部合并(tail-merging)
x可以直接访问压缩文件中的内容

example:

chattr +i aaa.txt

lsattr

lsattr 用于查看文件的隐藏权限。语法格式:lsattr [选项] 文件名

选项作用
-R递归列出目录及其内容的属性
-V显示程序版本
-a列出目录中的所有文件,包括以 . 开头的文件
-d列出目录,而不是列出其内容
-l使用长名称而不是单字符缩写打印选项
-p列出文件的项目编号
-v列出文件的版本/生成编号

example:

lsattr aaa.txt

setfacl

setfacl 用于管理文件的 ACL 权限规则。语法格式:setfacl [选项] 文件名

提示

查看文件是否设置 ACL 权限,可以通过 ls 命令查看文件最后的 .,如果变成 + 号,则这个文件已经设置了 ACL 权限

选项作用
-m修改权限
-M从文件中读取权限
-x删除某个权限
-b删除全部权限
-R递归子目录

example:

setfacl -Rm u:zhangsan:rwx /root  # 为某个用户设置访问 /root 权限
setfacl -Rm g:zhangsan:rwx /root  # 为某个组中的所有用户设置访问 /root 权限

getfacl

getfacl 用于查看文件的 ACL 权限规则。语法格式:getfacl [选项] 文件名

选项作用
-a仅显示文件访问控制列表
-d仅显示默认访问控制列表
-c不显示注释标题
-e打印所有有效权限
-E打印无有效权限
-s只包含基本项的跳过文件
-R递归到子目录中
-L逻辑行走,遵循符号链接
-P物理行走,不遵循符号链接
-t使用表格输出格式
-n打印数字用户/组标识符
-p不去除路径名中的前导 /

example:

getfacl -a aaa.txt  # 查看 /root ACL 权限
getfacl -R /root > root_backup.acl  # 将 /root 目录 ACL 权限进行备份

cp

cp 用于本地复制文件或目录。语法格式:cp [选项] 源文件 目标文件

选项作用
-p保留原始文件的属性
-d若对象为 “链接文件”,则保留该 “链接文件” 的属性
-r递归复制目录
-i若目标文件存在,则询问是否覆盖
-a向当于 -pdr

example:

cp anaconda-ks.cfg /opt/

scp

scp 用于跨主机传输数据,而且所有的数据都进行加密处理。语法格式:scp [选项] 本地文件 远程账户@远程IP地址:远程目录 | scp [选项] 远程账户@远程IP地址:远程目录 本地文件

选项作用
-v显示详细的连接进度
-P指定远程主机的 sshd 端口号
-r用于传送文件夹
-6使用 IPv6 协议

example:

scp aaa.txt zhangsan@192.168.10.10:/home/zhangsan  # 将本地的 aaa.txt 文件传送到 192.168.10.10 主机的 zhangsan 用户的 /home/zhangsan 目录下
scp zhangsan@192.168.10.10:/home/zhangsan/bbb.txt ./  # 将 192.168.10.10 主机的 zhangsan 用户的 /home/zhangsan 目录下的 bbb.txt 文件,传送到本地的 ./ 当前目录下

mv

mv 用于移动或重命名文件。语法格式:mv [选项] 源文件 目标文件

选项作用
-b当文件存在时,覆盖前为其创建一个备份
-f强制覆盖前不提示
-i覆盖前的交互式提示
-n无清除不覆盖现有文件
-S为备份文件指定后缀,而不使用默认的后缀
-u仅当 SOURCE 文件较新时更新移动目标文件

example:

mv anaconda-ks.cfg /opt/

rm

rm 用于删除文件或目录。语法格式:rm [选项] 文件名称

选项作用
-f强制执行
-i删除前询问
-r删除目录
-v显示过程

example:

rm C.txt

dd

dd 用于按照指定大小的数据块个数来复制文件或转换文件。语法格式:dd if=参数值 of=参数值 count=参数值 bs=参数值

选项作用
if输入的文件名称
of输出的文件名称
bs设置每个 “块” 的大小
count设置要复制 “块” 的个数

example:

dd if=/dev/zero of=560_file count=1 bs=560M

file

file 用于查看文件的类型。语法格式:file 文件名称

example:

file anaconda-ks.cfg

tar

tar 用于对文件进行打包压缩或解压。语法格式:tar [选项] 压缩名 文件名称

选项作用
-c创建压缩文件
-x解开压缩文件
-t查看压缩包内的文件
-z用 Gzip 压缩或解压
-j用 bzip2 压缩或解压
-v显示压缩或解压的过程
-f目标文件名
-p保留原始的权限与属性
-P使用绝对路径来压缩
-C指定解压到的目录
-r指定的任意文件加入到归档文件中
--exclude将匹配通配符模式的文件排除在归档过程之外

example:

tar zcvf anaconda-ks.cfg.tar.gz anaconda-ks.cfg

zip

zip 用于对文件或目录进行压缩。语法格式:zip [选项] 压缩名 文件名

选项作用
-d删除 zip 文件中的条目
-m移动到 zip 文件中(删除操作系统文件)
-r递归到目录
-q不显示过程
-v详细信息
-c添加一行注释
-z添加 zip 文件注释
-x "文件列表"排除 "文件列表" 中文件
-i "文件列表"仅包括 "文件列表" 中文件
-F修复 zip 文件(-FF 更努力)
-D不添加目录项
-T测试 zip 文件完整性
-e加密
-压缩级别-1 压缩更快 -9 次压缩更好

example:

zip -r etc.zip /etc  # 压缩 /etc 目录文件,压缩名为 etc.zip
zip -e etc.zip /etc  # 加密压缩,需要输入密码

unzip

unzip 用于解压以 .zip 为后缀的压缩包文件。语法格式:unzip [选项] 压缩包文件

选项作用
-d删除 zip 文件中的条目
-l查看压缩包文件
-t测试压缩包是否正确
-z仅显示压缩包注释
-v详细信息
-x "文件列表"解压时排除 "文件列表" 中文件
-d将文件解压缩到指定目录中
-n从不覆盖现有文件
-q不显示过程
-o在没有提示的情况下覆盖文件
-a自动转换任何文本文件
-C匹配文件名不区分大小写
-L使(某些)名称小写

example:

unzip -d etc.zip /home/zhangsan/aaa/  # 将 etc.zip 解压缩到 aaa 目录下
unzip -l etc.zip  # 查看压缩文件里的内容

用户命令

id

id 用于显示用户详细信息。语法格式:id 用户名

example:

id root

uid=0(root) gid=0(root) groups=0(root)

useradd

useradd 用于创建用户账户。语法格式:useradd [选项] 用户名

选项作用
-d指定用户家目录(默认为 /home/ 目录下)
-e账户的到期时间,格式为:YYYY-MM-DD
-u指定该用户的默认 UID
-g指定一个初始的用户组(该组必须存在)
-G指定一个或多个扩展用户组
-N不创建与用户同名的基本用户组
-s指定该用户的默认 Shell 解释器
-M不创建用户家目录
-r创建系统用户

example:

useradd -M -s /sbin/nologin nginx

groupadd

groupadd 用于创建用户组。语法格式:groupadd [选项] 用户组名

选项作用
-g指定新建工作组的 id
-r创建系统工作组,系统工作组的组 ID 小于 500
-K覆盖配置文件 /etc/login.defs
-o允许添加组 ID 号不唯一的工作组
-f如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的 GID_MIN 已经存在时,选择另一个唯一的 GID(即 -g 关闭)

example:

groupadd nginx

usermod

usermod 用于修改用户的属性。语法格式:usermod [选项] 用户名

选项作用
-c填写用户账户的备注信息
-d -m选项 -m-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e账户的到期时间,格式为 YYYY-MM-DD
-g变更所属用户组
-G变更扩展用户组
-L锁定用户禁止其登录系统
-U解锁用户,允许其登录系统
-u修改用户的 UID
-s变更默认终端

example:

usermod -G root zhangsan

passwd

passwd 用于修改用户的密码、过期时间等信息。语法格式:passwd [选项] 用户名

选项作用
-l锁定用户,禁止用户登录
-u解除锁定,运行用户登录
-d使该用户可用空密码登录系统
-e强制用户在下次登录时修改密码
-S显示用户的密码是否被锁定,以及密码所采用的加密算法名称
--stdin允许通过标准输入修改密码

example:

passwd root

echo "root123" | passwd --stdin root

userdel

userdel 用于删除已有的用户。语法格式:userdel [选项] 用户名

默认保留用户家目录

选项作用
-f强制删除用户
-r同时删除用户及用户家目录

example:

userdel zhangsan