作为一名后端开发,跟服务器的交流必不可少,刚好最近跟服务器打交道比较多,所以就汇总整理一下 Linux 下那些程序员经常需要使用的命令,掌握这些命令基本上可以在 Linux 系统里面横着走了(我明显是说大话了)
命令格式和帮助信息
常见的 Linux 命令格式是:命令名称,命令参数,命令对象,它们之间使用空格键隔开,大致如下:
代码语言:javascript复制命令名称 [命令参数] [命令对象]
一条完整的命令参数比较长,很容易劝退新手,所以很多时候我推荐短命令格式,更好记,他们区别如下:
代码语言:javascript复制# 长格式:
man --help
# 短格式
man -h
当你不可能记住 Linux 所有的命令,当你遇到不熟悉的命令,可以 man
来查看帮助信息(如上),通常 man
帮助文档都很长,你可能需要知道一些关于文档的翻页、搜索、定位操作:
按键 | 用途 |
---|---|
Page down | 下一页 |
Page up | 上一页 |
home | 首页 |
end | 页尾 |
/ | 从上往下搜索关键字 |
? | 从下往上搜索关键字 |
n | 定位到下一个关键字 |
N | 定位到上一个关键字 |
q | 退出帮助文档 |
知道了文档操作方式,那么可以了解一下 man
帮助文档的结构,因为大多数文档很长,如果不了解结构,读起来可能会比较困惑,我们找一个比较简单的 pwd
命令看看:
man pwd # 查看 man 帮助文档
NAME # 命令的名称
pwd - print name of current/working directory
SYNOPSIS # 参数的大致使用方法
pwd [OPTION]...
DESCRIPTION # 介绍说明
Print the full filename of the current working directory.
AUTHOR # 作者
Written by Jim Meyering.
REPORTING BUGS # Bug 反馈
....
COPYRIGHT # 版权信息
....
SEE ALSO # 相关资料
...
常用的系统命令
这里简单说介绍说明一下日常的命令和使用方法,更加详细的可以参考 man
命令:
echo 命令
主要用于输出文本和变量 输出一行本文示例如下:
代码语言:javascript复制echo "hello world"
hello world
输出一行变量(局部变量、环境变量、shell 变量)示例如下:
代码语言:javascript复制echo $SHELL
/bin/bash
data 命令
date
命令主要用于查看、修改系统时间,示例:
data
Sun Jun 13 09:19:33 CST 2021
按照指定格式查看系统时间:
代码语言:javascript复制date " %Y-%m-%d %H:%M:%S"
2021-06-13 09:23:12
将当前系统时间设置为指定时间:
代码语言:javascript复制date -s "20210613 9:27:00"
Sun Jun 13 09:27:00 CST 2021
wget 命令
通常我们在服务器搭建生产环境就会经常用到 wget
从网上下载程序包,如果不加任何参数,它就会将链接资源下载到当前目录,例如我从网上下载一份 PDF 文件,效果如下:
wget http://www.linuxprobe.com/docs/LinuxProbe.pdf # 下载
--2021-06-13 10:12:14-- http://www.linuxprobe.com/docs/LinuxProbe.pdf
Resolving www.linuxprobe.com (www.linuxprobe.com)... 59.37.142.226
Connecting to www.linuxprobe.com (www.linuxprobe.com)|59.37.142.226|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.linuxprobe.com/docs/LinuxProbe.pdf [following]
--2021-06-13 10:12:14-- https://www.linuxprobe.com/docs/LinuxProbe.pdf
Connecting to www.linuxprobe.com (www.linuxprobe.com)|59.37.142.226|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17676281 (17M) [application/pdf]
Saving to: 'LinuxProbe.pdf'
LinuxProbe.pdf 100%[=====================================================================================================================================>] 16.86M 29.2MB/s in 0.6s
2021-06-13 10:12:15 (29.2 MB/s) - 'LinuxProbe.pdf' saved [17676281/17676281]
然后我们查看目录
代码语言:javascript复制ls
LinuxProbe.pdf
另外 wget
还有一些命令参数,大概了解就好:
参数 | 作用 |
---|---|
-b | 后台下载 |
-P | 指定目录 |
-t | 尝试次数 |
-r | 递归下载 |
|-p | 下载所有资源 |
ps 命令
查看系统进程状态,通常会和 | grep
管道符号一起使用,我们通常执行 ps aux
可以看到以下输出:
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 177084 10100 ? Ss Mar02 1:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S Mar02 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Mar02 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Mar02 0:00 [rcu_par_gp]
简单说一下每列所代表的含义:
- USER 进程的所有者
- PID 进程 ID (
kill
命令指定的就是这里的 ID) - %CPU CPU 占用率
- %MEM 内存占用率
- VSZ 虚拟内存使用量,单位是 KB
- RSS 固定的内存占用量,单位是 KB
- TTY 所在终端
- STAT 进程状态(重点!,下面会详细说一下)
- START 启动时间
- TIME 使用 CPU 的时间
- COMMAND 进程相关的参数和命令
在 Linux 系统中,有 5 种常见的进程状态(上面的 STAT
标题)
- R 运行或等待运行
- S 中断或处于休眠中
- D 不可中断,即使
kill
命令也不能将其终端 - Z 进程已中止,但是进程描述符依然存在
- T 进程已停止
top 命令
可以实时监控进程活动和系统负载等信息,Windows | Mac OS X 里面的活动监视器,字段详情如下:
代码语言:javascript复制# top 系统时间,up 运行时间,users 登陆终端数,load average 系统平均负载
top - 15:55:42 up 102 days, 17:15, 2 users, load average: 0.00, 0.00, 0.00
# Tasks 进程总数,running 运行中的进程数,sleeping 睡眠进程数,stopped 停止的进程数,zombie 僵死的进程数
Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie
# 用户资源百分比,系统内核占用资源百分比,……空闲资源百分比
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 98.8 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
# 物理内存,内存使用量,内存空闲量,内核缓存的内存量
MiB Mem : 1723.2 total, 133.9 free, 732.1 used, 857.2 buff/cache
# 虚拟内存总量,虚拟内存使用量,虚拟内存空闲量,……
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 832.9 avail Mem
# 进程运行列表
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
228727 root 10 -10 172776 23340 10092 S 1.3 1.3 228:14.78 AliYunD
228682 root 10 -10 43328 5424 3792 S 0.3 0.3 13:08.95 AliYunD
1 root 20 0 177084 10100 7208 S 0.0 0.6 1:24.99 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.27 kthreadd
pidof 命令
可以通过服务名称查询进程的 PID,如下:
代码语言:javascript复制pidof mongod
226807
kill 命令
如果要终止指定的服务进程,通常会使用 pidof
查询的的 PID,然后使用 kill
干掉它
kill 226807
killall 命令
通常很多复杂软件不止一个进程,使用 kill
会比较麻烦,使用 killall [参数][服务名称]
则会方便很多,驶入
pidof httpd
13581 13580 13578 13577
killall httpd
状态检测命令
以下命令都超级实用,掌握了之后,对于线上问题排查会很大的帮助作用
ifconfig 命令
服务器网络应该是程序员检查最多的状态,很多时候服务器无法访问,程序员第一时间检查网络是否正常,Linux 中使用 ifconfig
用于获取网卡配置与网络状态。我们主要关注以下几个指标即可:
- 网卡名称,inet 参数后面的 IP 地址
- ether 参数后面的网卡物理地址,也是 MAC 地址
- RX,TX 接收数据包与发送数据包的个数累积流量
我们看一个示例:
代码语言:javascript复制ifconfig
# 网卡名称
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# IP 地址
inet 172.19.119.156 netmask 255.255.240.0 broadcast 172.19.127.255
inet6 fe80::216:3eff:fe14:3ae3 prefixlen 64 scopeid 0x20<link>
# MAC 地址
ether 00:16:3e:14:3a:e3 txqueuelen 1000 (Ethernet)
# 接收的数据包
RX packets 5544498 bytes 3279315266 (3.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
# 发送的数据包
TX packets 4845972 bytes 984357847 (938.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uname 命令
查看系统版本信息时,就需要用上该命令,通常会加上选项参数 -a
使用,不然只输出 Linux
似乎没有任何意义,如下:
uname -a
Linux iZwz9bvey7lnzwc5wzksanZ 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00:20:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
以上信息解析如下:
- 内核名称:Linux
- 主机名:iZwz9bvey7lnzwc5wzksanZ
- 内核发行版:4.18.0-193.28.1.el8_2.x86_64
- 节点名称:#1
- 系统时间:SMP Thu Oct 22 00:20:22 UTC
- 硬件信息以及操作系统等:x86_64 x86_64 x86_64 GNU/Linux
当然如果你需要查看当前发行版的信息,需要查看 redhat-release 文件,命令如下:
代码语言:javascript复制cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
uptime 命令
一个简洁的查看系统负载信息的命令,使用如下:
代码语言:javascript复制uptime
16:47:02 up 102 days, 18:06, 5 users, load average: 0.00, 0.00, 0.00
可以很方便的查看系统运行时间,连接终端数量,平均负载信息等。顺带一提,关于平均负载的几个注意事项:
- 平均负载是指系统最近 1 分钟、5 分钟、15 分钟内的压力情况
- 负载值通常来说是越低越好,尽量不要长期超过 1,生产环境不要超过 5
free 命令
显示当前系统的内存情况,直接输出是字节数,加上 free -h
更符合人类的阅读习惯,如下:
total used free shared buff/cache available
Mem: 1.7Gi 751Mi 113Mi 2.0Mi 858Mi 813Mi
Swap: 0B 0B 0B
总内存书,已使用,未使用这里很清晰就不多讲了。
who 命令
查看登陆主机的用户终端信息,有时候用来排查谁修改配置,黑客攻击等情况:
代码语言:javascript复制who
root pts/0 Jun 13 15:44 (120.85.126.66)
root pts/1 Jun 13 15:55 (120.85.126.66)
root pts/2 Jun 13 16:23 (120.85.126.66)
last 命令
用于查看所有系统的登陆记录,这些信息都是以日志文件保存,很容易被篡改
代码语言:javascript复制last
root pts/5 120.85.126.66 Sun Jun 13 16:57 still logged in
root pts/4 120.85.126.66 Sun Jun 13 16:46 still logged in
root pts/3 120.85.126.66 Sun Jun 13 16:35 still logged in
..... 这里省略一万条登陆信息 .....
history 命令
这应该是我最常用的命令,可以查看当前用户最近执行过的 1000 条命令,如果觉得不够的话可以修改 /etc/profile 文件中的 HISTSIZE 变量(其实大多数场景下够用了),甚至大多数场景都是比较多的,我通常还会在后面增加数组选项来限制它的输出,如下:
代码语言:javascript复制history 5
325 history 15
326 clear
327 man history
328 history
329 history 5
可以看到我最近输入了 300 多条命令,因为有参数的限制,所以它只输出了最后 5 条,历史命令都被保存在用户目录的 .bash_history 文件中(Linux 使用 . 开头的均代表隐藏文件),可以使用 cat
查看文档内容:
cat ~/.bash_history
如果要清空历史命令,可以使用 -c
选项,如下:
history -c
sosreport 命令
这个应该很少用,就是用于生成系统的诊断文档,提供给技术支持人员查看的,因为很少用就不详细概述了
工作目录命令
不同于图形化操作系统,想要 Linux 系统来回穿梭,不得不掌握这些命令
pwd 命令
显示当前所在的目录,普通用户登陆进入默认在 /home/当前用户 的目录下,如果是 root 用户则在根目录的 /root 目录下:
代码语言:javascript复制pwd
/root
cd 命令
切换目录的命令,常见的用法是 cd [目录名称]
,当然还有一些其他的用法,查看示例:
cd /etc # 进入 /etc 目录
cd /bin # 进入 /bin 目录
cd .. # 切换到当前目录的上一级
cd ~ # 切换到当前用户目录的根目录
ls 命令
显示目录的文件列表,常用的选项参数有:
- -a 查看全部文件,包括隐藏文件
- -l 查看文件的属性
示例:
代码语言:javascript复制ls -al
dr-xr-xr-x. 17 root root 244 Mar 2 22:37 .
dr-xr-xr-x. 17 root root 244 Mar 2 22:37 ..
-rw-r--r-- 1 root root 0 Nov 20 2020 .autorelabel
lrwxrwxrwx. 1 root root 7 May 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Nov 20 2020 boot
drwxr-xr-x 19 root root 2960 Jun 12 11:32 dev
drwxr-xr-x. 96 root root 8192 Mar 2 22:42 etc
drwxr-xr-x. 2 root root 6 Jun 11 16:05 home
........ 这里省略很多目录 ........
文本编辑命令
前面讲的都是系统信息查询,切换,那么找到文件,编辑命令自然是要派上用场的,Linux 下常用的编辑命令有:
cat 命令
主要用于查看 内容较少的文本,如果加上 -n
选项参数还能看到行号,如下:
cat -n ecs_network_optimization.log
1 running /sbin/ecs_mq_rps_rfs
2 ======== ECS network setting starts 2021-03-02 22:37:28 ========
3 optimize network performance: current device eth0
4 set and check multiqueue on eth0
5 only support 1 queue; no need to enable multiqueue on eth0
6 OK. irqbalance stoped.
7 max node :0
8 mask:1, irq:29
9 mask:2, irq:30
10 ======== ECS network setting END 2021-03-02 22:37:28 ========
more 命令
主要用于查看 内容较多的文本,more
面对大量文本相比 cat
有如下优势:
- 不会快速翻滚,文本底部会有百分比来提示已阅读多少内容
- 使用快捷键可以进行翻页
大概是这样
代码语言:javascript复制more dnf.log
2021-05-26T12:10:13Z DDEBUG Command: dnf makecache --timer
2021-05-26T12:10:13Z DDEBUG Installroot: /
2021-05-26T12:10:13Z DDEBUG Releasever: 8
2021-05-26T12:10:13Z DEBUG cachedir: /var/cache/dnf
2021-05-26T12:10:13Z DDEBUG Base command: makecache
2021-05-26T12:10:13Z DDEBUG Extra commands: ['makecache', '--timer']
2021-05-26T12:10:13Z DEBUG Unknown configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-epel.repo; Configuration: OptionBinding with id "failovermethod" does not exist
2021-05-26T12:10:13Z DEBUG Making cache files for all metadata files.
2021-05-26T12:10:13Z DEBUG AppStream: has expired and will be refreshed.
2021-05-26T12:10:13Z DEBUG BaseOS: has expired and will be refreshed.
--More--(0%) # 显示阅读进度
head 命令
如果不需要完整阅读文档,只查看前 N 行就可以使用 head
命令,不加参数默认是前 10 行,可以使用 -n
参数指定输出的行数,效果如下:
head dnf.log
2021-05-26T09:08:04Z INFO Metadata cache created.
2021-05-26T09:08:04Z DDEBUG Cleaning up.
2021-05-26T10:08:13Z INFO --- logging initialized ---
2021-05-26T10:08:13Z DDEBUG timer: config: 2 ms
2021-05-26T10:08:13Z DEBUG Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, needs-restarting, playground, repoclosure, repodiff, repograph, repomanage, reposync
2021-05-26T10:08:13Z DEBUG DNF version: 4.2.23
2021-05-26T10:08:13Z DDEBUG Command: dnf makecache --timer
2021-05-26T10:08:13Z DDEBUG Installroot: /
2021-05-26T10:08:13Z DDEBUG Releasever: 8
2021-05-26T10:08:13Z DEBUG cachedir: /var/cache/dnf
tail 命令
跟 head 相反,这里输出日志的最后 N 行,但是 tail 更常用,得益于 -f
参数可以实时监控输出,所以用于查报错日志,监控日志输出的时候特别有用,也是平时在服务器上很常用的一个命令
tail -f dnf.log
2021-06-13T10:24:02Z DDEBUG Command: dnf makecache --timer
2021-06-13T10:24:02Z DDEBUG Installroot: /
2021-06-13T10:24:02Z DDEBUG Releasever: 8
2021-06-13T10:24:02Z DEBUG cachedir: /var/cache/dnf
2021-06-13T10:24:02Z DDEBUG Base command: makecache
2021-06-13T10:24:02Z DDEBUG Extra commands: ['makecache', '--timer']
2021-06-13T10:24:02Z DEBUG Unknown configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-epel.repo; Configuration: OptionBinding with id "failovermethod" does not exist
2021-06-13T10:24:02Z DEBUG Making cache files for all metadata files.
2021-06-13T10:24:02Z INFO Metadata cache refreshed recently.
2021-06-13T10:24:02Z DDEBUG Cleaning up.
> # 这里不会终止,一直监控日志的输出
tr 命令
用于大批量替换文本,通常结合管道符号使用,这里就不详细描述了(其实我更喜欢通过 VIM 来替换文本)
wc 命令
统计文本的行数、字数、字节数,比较常用的参数有:
- -l 只现实行数
- -w 只显示单词数
- -c 只显示字节数
我们可以找一个日志文件看看:
代码语言:javascript复制wc dnf.log
8863 71220 682533 dnf.log
还有一个有趣的玩法是用来统计 /etc/passwd 文件的行数可以统计当前系统有多少用户(/etc/passwd 保存系统的用户信息):
代码语言:javascript复制wc -l /etc/passwd
29 /etc/passwd
stat 命令
相当于 Windows 查看文件属性,可以看到文件具体的存储信息和时间
代码语言:javascript复制stat ip_address
File: ip_address
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 100709276 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-06-13 18:33:47.951395782 0800
Modify: 2021-06-13 18:33:47.951395782 0800
Change: 2021-06-13 18:33:47.951395782 0800
Birth: -
cut 命令
可以让每行字符按照特定的格式输出,例如我们刚才的 /etc/passwd 文件,如果我们只看用户名的话,直接使用 cat
可能会让控制台多出很多无关的字符:
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
....
使用 cut
可以帮我们过滤很多噪音数据
cut -d: -f1 /etc/passwd
root
bin
daemon
adm
diff 命令
可以比较多个文件之间的差异,还可以使用 --brief
来比较文件是否相同,不过很多场地可以被 git diff
来替代,我简单创建 2 个文件看看示例:
diff -c ip_address ip_address_2
*** ip_address Sun Jun 13 18:33:47 2021
--- ip_address_2 Sun Jun 13 19:49:37 2021
***************
*** 1 ****
--- 1,2 ----
192.168.0.0
192.168.100.100
文件目录管理
这里主要描述对文件的创建、修改、复制、剪切、更名、删除等操作
touch 命令
touch 可以创建空白文件,这里就不介绍了,现在基本都在使用 vim fileName
命令创建并编辑文件了,touch 主要还是用于修改文件的时间戳:
# 创建一个当前文件
echo "hello world" >> hello.cfg
ls
# 查看时间戳
-rw-r--r-- 1 root root 12 Jun 13 20:06 hello.cfg
# 使用 touch 让它时光倒流
touch -d "2017-06-13 20:00" hello.cfg
ls
# 文件时间已被修改
-rw-r--r-- 1 root root 12 Jun 13 2017 hello.cfg
mkdir 命令
就创建一个目录,这没啥好说的。。
代码语言:javascript复制mkdir demo_directorie
drwxr-xr-x 2 root root 6 Jun 13 20:11 demo_directorie
cp 命令
就是复制文件和目录,命令格式:cp[选项]用法也很简单:
代码语言:javascript复制# 复制 hello.cfg 文件,新文件命名 h2.cfg
cp hello.cfg h2.cfg
# 复制 text_edit/ 目录
cp -r text_edit/ t2
更多选项参数可以使用 man
查看
mv 命令
就是移动文件,如果文件目录不变则视为重命名操作,示例:
代码语言:javascript复制ls /home # 查看空目录
mv h2.cfg /home # 把当前目录下文件移动到 /home 目录下
ls /home # h2.cfg 移动过来
h2.cfg
cd /home
mv h2.cfg h5.cfg # 重命名操作
rm 命令
常用的主要是删除文件、目录,Linux 从安全考虑每次删除都会询问,如下:
代码语言:javascript复制rm h5.cfg
rm: remove regular file 'h5.cfg'?
如果你觉得烦,并且确认删除操作安全的话,可以加上 -f
选项参数避开这个提示,另外删除目录也需要加 -r
来表示递归操作,示例:
# 递归删除 /text_edit 目录,并且不提示
rm -rf text_edit
dd 命令
比较有意思的命令,可以指定大小的数据块来复制文件,官方对它的解释是:
Copy a file, converting and formatting according to the operands.
这命令用得少,但是我们还是可以了解一下基本玩法的,例如我们可以从 /dev/zero 里面抽取一个指定大小的数据块(随便来一个 500M 吧),我们看示例
代码语言:javascript复制dd if=/dev/zero of=500_file count=1 bs=560M
1 0 records in
1 0 records out
587202560 bytes (587 MB, 560 MiB) copied, 4.3654 s, 135 MB/s
dd 的功能还不止复制这么简单,有时候可以把抽取的数据制作成其他格式文件,例如 ISO 这在 Windows 要借助第三方专业软件才能做到,因为很少用,这里就不详细展开了
file 命令
由于 Linux 系统所有一切都成为文件,而且单凭后缀无法区分具体类型的时候,就需要 file
命令来查看文件类型了:
# 数据类型
file 500_file
500_file: data
# 文本类型
echo 'hello world' >> h2.txt
file h2.txt
h2.txt: ASCII text
打包压缩与搜索
网上下载软件包安装,或者把 Linux 文件打包发给别人,都离不开压缩/解压命令,所以这里也很重要,值得了解一下
tar 命令
主要对文件压缩/解压操作,虽然网上的压缩格式比较多,但基本都是 tar
衍生出来的,所以不用担心要记太多的命令,用好 tar
就可以了,我们先看压缩示例代码,后面再讲参数详情,这样会比较有趣一点
# 压缩 /etc 目录到 etc.tar.gz
tar -czvf etc.tar.gz /etc
/etc/
/etc/mtab
/etc/fstab
/etc/crypttab
....
# 打包完成后,可以在当前目录看到压缩文件
ll -h
-rw-r--r-- 1 root root 5.2M Jun 13 22:44 etc.tar.gz
那么如何把文件解压到指定目录呢 ?请看示例代码
代码语言:javascript复制# 解压文件到 /root/etc 目录
tar -xzvf etc.tar.gz -C /root/etc
etc/
etc/mtab
etc/fstab
etc/crypttab
etc/resolv.conf
.....
压缩和解压命令参数都比较长,压缩用 -czvf
解压用 -xzvf
,他们各自的具体含义,我们看看 tar
比较常用的选项参数的含义:
- -c 压缩文件
- -x 解压文件
- -t 查看压缩包的文件
- -z 使用 Gzip 压缩/解压(常用)
- -v 显示压缩/解压的过程(墙裂推荐)
- -f 目标的文件名
- -C 解压到指定目录
还有很多不常用的参数,可以使用 man
查看文档
grep 命令
对于很多需要文本搜索的场景都会用到 grep
,大多会配合管道 |
使用,grep
很少会配合选项参数使用,后面简单介绍几个常用的选项参数,如果嗨还有兴趣的话可以通过 man grep
命令保存,示例程序:
# 使用 grep 过滤不允许再登陆系统的用户
cat /etc/passwd | grep /sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
一些常用的选项参数:
- -b 将 binary 文件当作 text 来搜索
- -c 仅显示匹配文本的行数
- -i 忽略大小写
- -n 显示行号
- -v 反向,列出没有"关键字"的行
find 命令
搜索工作一般都是通过 find 命令来完成的,它可以通过多维度来搜索文件(名称,大小,时间,权限等),我们先看一个简单的示例:
代码语言:javascript复制# 特定目录下的 文件模糊匹配 (不想限制目录的话,可以移除)
find /root -name 'phoenix*'
# 匹配项
/root/.halo/upload/2021/03/phoenix_logo-332a6c083168451a9887c3d9cd675993.jpg
/root/.halo/upload/2021/03/phoenix_logo-332a6c083168451a9887c3d9cd675993-thumbnail.jpg
/root/phoenix.txt
通过权限搜索(我暂时想不到有什么使用场景)
代码语言:javascript复制find / -perm -4000
/var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
/var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
......
find 常用的选项参数:
- -name 名称匹配
- -perm 权限匹配
- -user 用户匹配
- -group 用户组匹配
- -size 匹配文件大小
.... 更多参数还是要用的时候再查文档。
到这里差不多,有点累,我要休息一下了。