程序员应该掌握的一些 Linux 命令

作为一名后端开发,跟服务器的交流必不可少,刚好最近跟服务器打交道比较多,所以就汇总整理一下 Linux 下那些程序员经常需要使用的命令,掌握这些命令基本上可以在 Linux 系统里面横着走了(我明天在说大话了)

命令格式和帮助信息

常见的 Linux 命令格式是:命令名称,命令参数,命令对象,它们之间使用空格键隔开,大致如下:

命令名称 [命令参数] [命令对象]

一条完整的命令参数比较长,很容易劝退新手,所以很多时候我推荐短命令格式,更好记,他们区别如下:

# 长格式:
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 命令

主要用于输出文本和变量

输出一行本文示例如下:

echo "hello world"
hello world

输出一行变量(局部变量、环境变量、shell 变量)示例如下:

echo $SHELL
/bin/bash

data 命令

date 命令主要用于查看、修改系统时间,示例:

data
Sun Jun 13 09:19:33 CST 2021

按照指定格式查看系统时间:

date "+%Y-%m-%d %H:%M:%S"
2021-06-13 09:23:12

将当前系统时间设置为指定时间:

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]

然后我们查看目录

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 里面的活动监视器,字段详情如下:

# 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,如下:

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 接收数据包与发送数据包的个数累积流量

我们看一个示例:

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 文件,命令如下:

cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

uptime 命令

一个简洁的查看系统负载信息的命令,使用如下:

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 命令

查看登陆主机的用户终端信息,有时候用来排查谁修改配置,黑客攻击等情况:

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 命令

用于查看所有系统的登陆记录,这些信息都是以日志文件保存,很容易被篡改

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 变量(其实大多数场景下够用了),甚至大多数场景都是比较多的,我通常还会在后面增加数组选项来限制它的输出,如下:

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 目录下:

pwd
/root

cd 命令

切换目录的命令,常见的用法是 cd [目录名称],当然还有一些其他的用法,查看示例:

cd /etc   # 进入 /etc 目录
cd /bin # 进入 /bin 目录
cd .. # 切换到当前目录的上一级
cd ~ # 切换到当前用户目录的根目录

ls 命令

显示目录的文件列表,常用的选项参数有:

  • -a 查看全部文件,包括隐藏文件
  • -l 查看文件的属性

示例:

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 有如下优势:

  • 不会快速翻滚,文本底部会有百分比来提示已阅读多少内容
  • 使用快捷键可以进行翻页

大概是这样

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 只显示字节数

我们可以找一个日志文件看看:

wc dnf.log
8863 71220 682533 dnf.log

还有一个有趣的玩法是用来统计 /etc/passwd 文件的行数可以统计当前系统有多少用户(/etc/passwd 保存系统的用户信息):

wc -l /etc/passwd
29 /etc/passwd

stat 命令

相当于 Windows 查看文件属性,可以看到文件具体的存储信息和时间

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 命令

就创建一个目录,这没啥好说的。。

mkdir demo_directorie
drwxr-xr-x 2 root root 6 Jun 13 20:11 demo_directorie

cp 命令

就是复制文件和目录,命令格式:cp[选项]用法也很简单:

# 复制 hello.cfg  文件,新文件命名 h2.cfg
cp hello.cfg h2.cfg
# 复制 text_edit/ 目录
cp -r text_edit/ t2

更多选项参数可以使用 man 查看

mv 命令

就是移动文件,如果文件目录不变则视为重命名操作,示例:

ls /home  # 查看空目录
mv h2.cfg /home # 把当前目录下文件移动到 /home 目录下
ls /home # h2.cfg 移动过来
h2.cfg cd /home
mv h2.cfg h5.cfg # 重命名操作

rm 命令

常用的主要是删除文件、目录,Linux 从安全考虑每次删除都会询问,如下:

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 吧),我们看示例

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

那么如何把文件解压到指定目录呢 ?请看示例代码

# 解压文件到 /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 命令来完成的,它可以通过多维度来搜索文件(名称,大小,时间,权限等),我们先看一个简单的示例:

# 特定目录下的 文件模糊匹配 (不想限制目录的话,可以移除)
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

通过权限搜索(我暂时想不到有什么使用场景)

find / -perm -4000

/var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
/var/lib/docker/overlay2/bcb0d4a5d9a0c29cd9f022....
......

find 常用的选项参数:

  • -name 名称匹配
  • -perm 权限匹配
  • -user 用户匹配
  • -group 用户组匹配
  • -size 匹配文件大小

.... 更多参数还是要用的时候再查文档。

到这里差不多,有点累,我要休息一下了。

程序员应该掌握的一些 Linux 命令的更多相关文章

  1. Java程序员必须掌握的常用Linux命令。

    Java程序员也是半个运维了,在日常开发中经常会接触到Linux环境操作.小公司的开发人员甚至是兼了全运维的工作,下面整理了一些常用的Linux操作命令. Linux常用指令 ls 显示文件或目录 - ...

  2. Java开发程序员必须要学会的linux命令总结

    查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xml文 ...

  3. java程序员必须要学会的linux命令总结

    1.查找文件find / -name filename.txt 根据名称查找/目录下的filename.txt文件.find . -name “*.xml” 递归查找所有的xml文件2.查看一个程序是 ...

  4. J2EE程序员应该要掌握的linux知识

    J2EE程序员应该要掌握的linux知识 大型J2EE应用都在建构在linux环境下的.开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试.但是最后的发布还 ...

  5. 漫谈程序员(十八)windows中的命令subst

    漫谈程序员(十八)windows中的命令subst 用法格式 一.subst [盘符] [路径]  将指定的路径替代盘符,该路径将作为驱动器使用 二.subst /d 解除替代 三.不加任何参数键入  ...

  6. 做10年Windows程序员与做10年Linux程序员的区别

    如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...

  7. 做10年Windows程序员与做10年Linux程序员的区别(附无数评论)(开源软件相当于熟读唐诗三百首,不会作诗也会吟)

    如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...

  8. 程序猿必知必会Linux命令之awk

    前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数 ...

  9. Python程序员为什么一定要掌握Linux?

    不少Python新手经常问到学Python到底需不需要学习Linux? Python不是支持Windows和Linux操作系统吗?能在Windows下开发为什么还要学习Linux? 问这样的问题的朋友 ...

  10. 黑马程序员——JAVA基础之常用DOS命令和环境变量的配置

    ------- android培训.java培训.期待与您交流! ----------   1.常用dos命令: dir   显示当前文件下目录                             ...

随机推荐

  1. P4913【橙】

    蕾姆了,上一道题做的好烦,结果直接把上一题的代码稍微改改就直接五分钟做出了另一道题,就是这道橙题.虽然只是一道橙题,但上一题代码得以复用显得自己没浪费那么多时间,显得自己还是有不少收获的.心里平摊多了 ...

  2. BFS(广度优先搜索) poj3278

    ***今天发现一个很有趣的是,这道题应该几个月前就会了,但是一次比赛中总是WA,果断C++提交,然后就过了,然后就很无语了,G++不让过C++能过,今天又交一遍发现把队列定义为全局变量就都能过了,至于 ...

  3. 如何在Python中的子进程获取键盘输入

    场景:在Python中使用multiprocessing模块的Process创建子进程,试图在子进程中获取键盘输入. 使用input() 在子进程中使用input()会弹出报错信息:EOFError: ...

  4. Chrome 控制台 换行编写js调试代码

    转载请注明出处: 在 chrome 浏览器的console 控制台编写 js 调试或验证代码时,每输一行换行时,就会执行当前行的函数,再重新换行输入时,就会将之前的代码忽略,这种方式就会导致 chro ...

  5. springBoot 整合 hikari

    Hikari是一款非常强大,高效,并且号称"史上最快连接池".并且在springboot2.0之后,采用的默认数据库连接池就是Hikari.不需要引入依赖,已经在SpringBoo ...

  6. linux 查看服务器cpu 与内存配置

    转载请注明出处: 1. 通过 lscpu 命令查看 服务器的cpu 配置 显示格式: Architecture: #架构 CPU(s): #逻辑cpu颗数 Thread(s) per core: #每 ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (184)-- 算法导论13.5 1题

    一.用go语言,对于图14-1中的红黑树 T,说明执行 OS-SELECT(T.root,10)的过程. 文心一言: 在红黑树中,OS-SELECT 是一个用于在树中查找特定键值的操作.给定一个红黑树 ...

  8. spring-transaction源码分析(2)EnableTransactionManagement注解

    概述(Java doc) 该注解开启spring的注解驱动事务管理功能,通常标注在@Configuration类上面用于开启命令式事务管理或响应式事务管理. @Configuration @Enabl ...

  9. 【面试题精讲】为什么G1收集器不需要调优性能也很优秀

    G1(Garbage-First)收集器是一种面向服务器端应用的垃圾回收器,它在JDK 7u4版本中首次引入,主要用于替代CMS(Concurrent Mark Sweep)收集器.相比于其他垃圾回收 ...

  10. [转帖]nginx反向代理时保持长连接

    https://www.cnblogs.com/liufarui/p/11075630.html ·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上 ...