# Linux命令行大全

参照《Linux命令行大全》一书,对Linux以及Linux命令进行学习。

# 导航相关指令

与导航相关的指令主要有cd,ls,pwd指令。

# 更改工作目录-cd 常用

cd(change directory)命令可以更改当前工作目录。只需要在cd命令之后输入要更改的工作目录的路径名即可。

# 基础语法

cd [dirName]

# 常见示例

更改工作路径为当前用户的家目录~

# cd指令不加参数的情况下,会默认增加一个~参数,使用这个参数的话会将当前路径切换到家目录
# 可用pwd指令查看,超级用户root的家目录在/root,普通用户的家目录在/home/路径下对应用户名的文件夹下
[root@VM-8-5-centos ~]# cd /usr/bin
[root@VM-8-5-centos bin]# pwd
/usr/bin
[root@VM-8-5-centos bin]# cd
[root@VM-8-5-centos ~]# pwd
/root
[root@VM-8-5-centos ~]# cd /usr/bin
[root@VM-8-5-centos bin]# cd ~
[root@VM-8-5-centos ~]# pwd
/root

切换工作路径为父目录

# 使用cd .. 指令可以将路径切换到上一级路径
[root@VM-8-5-centos ~]# cd /usr/bin
[root@VM-8-5-centos bin]# pwd
/usr/bin
# ..代表当前工作目录的父目录
[root@VM-8-5-centos bin]# cd ..
[root@VM-8-5-centos usr]# pwd
/usr
[root@VM-8-5-centos ~]# cd /usr/bin
[root@VM-8-5-centos bin]# pwd
/usr/bin
# -代表当前工作目录的上一级目录
[root@VM-8-5-centos bin]# cd -
[root@VM-8-5-centos usr]# pwd
/usr

切换工作路径为子目录

[root@VM-8-5-centos ~]# cd /usr
[root@VM-8-5-centos usr]# pwd
/usr
[root@VM-8-5-centos usr]# ls
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
# .代表当前工作目录
[root@VM-8-5-centos usr]# cd ./bin
[root@VM-8-5-centos bin]# pwd
/usr/bin
[root@VM-8-5-centos bin]# cd ..
[root@VM-8-5-centos usr]# pwd
/usr
# 不加任何参数的情况下,默认会携带./ 可以看出 cd bin和cd ./bin等价,都从/usr目录切换到/usr/bin目录
[root@VM-8-5-centos usr]# cd bin
[root@VM-8-5-centos bin]# pwd
/usr/bin

# 显示指定目录下的内容-ls 常用

在linux中,ls全称"list",中文意思为"列表",其主要功能是显示指定工作目录下的内容(列出工作目录所含之文件及子目录)。当ls命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)。

# 基础语法

ls [OPTION]... [FILE]...

# 常见选项

选项 说明
-a,--all 列出所有文件,包括以点号(.)开头的隐藏文件(隐藏文件通常不会被列出)。
-A,--almost-all 与-a选项类似,但不列出.(当前工作目录)和..(父目录)。
-d,--directory 通常,如果指定了目录,ls命令会列出该目录中的内容而非目录本身。
-l 用长格式显示当前目录下文件的详细信息。
-h 配合-l使用,不再以字节为单位显示文件大小,而是以MB,GB等单位显示。
-t 依照文件修改日期对输出结果进行排序。
-S 按照文件大小排序输出结果。
-r,--reverse 降序显示输出结果。通常情况下,ls命令按照字母升序显示输出结果。

# 常见示例

查看当前路径下有哪些文件。

[root@VM-8-5-centos /]# ls
app  boot  dev  home  lib64       media  opt    proc  run   srv  tmp  var
bin  data  etc  lib   lost+found  mnt    patch  root  sbin  sys  usr  www

查看指定路径下有哪些文件。

# 可以看到/usr文件夹下有以下文件
[root@VM-8-5-centos ~]# ls /usr
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

查看多个路径下的文件。

# 这条指令可以同时查看~路径以及/usr路径下的文件
[root@VM-8-5-centos ~]# ls ~ /usr
# 显示/root路径下的文件,当前用户是root用户,因此他的家目录就是/root
/root:
cosfs.sh  dnspod.sh  txcdn.sh
# 显示/usr路径下的文件
/usr:
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

查看文件夹下的文件,同时对显示结果排序。

# -l 用长格式显示
# -t 按时间顺序排序(正序)
# --reverse (倒序显示)
[root@VM-8-5-centos usr]# ls -lt --reverse
# 这些文件夹的大小加起来是140k
total 140
# 文件权限 硬链接 文件用户 用户组 文件大小  最后更新日期 文件名
#d代表目录
# rwxr-xr-x,第2到4位rwx代表当前用户具有该文件的读写执行权限,第5到7位r-x代表用户组不具有写权限,第8到10位r-x代表所有用户不具有写权限
# 即除了该文件所属用户外,其余用户均不均有该文件的写权限(root用户除外)。
drwxr-xr-x.   2 root root  4096 Apr 11  2018 games
drwxr-xr-x.   2 root root  4096 Apr 11  2018 etc
lrwxrwxrwx.   1 root root    10 Mar  7  2019 tmp -> ../var/tmp
drwxr-xr-x.   4 root root  4096 Mar  7  2019 src
drwxr-xr-x.  84 root root 12288 Dec  5 10:32 include
dr-xr-xr-x.  35 root root  4096 Dec  5 10:35 lib
drwxr-xr-x.  19 root root  4096 Dec  5 10:35 local
dr-xr-xr-x.  53 root root 36864 Dec  5 10:36 lib64
dr-xr-xr-x.   2 root root 20480 Dec  5 10:36 sbin
drwxr-xr-x.  27 root root  4096 Dec  5 10:36 libexec
drwxr-xr-x. 112 root root  4096 Dec  5 10:36 share
dr-xr-xr-x.   2 root root 36864 Dec  7 18:15 bin

查看当前文件夹下的文件(比对-a以及-A参数的区别):

# -a参数会显示当前工作目录以及父目录
[root@VM-8-5-centos data]# ls -a
.  ..  kieoo
# -A参数不显示当前工作目录以及父目录
[root@VM-8-5-centos data]# ls -A
kieoo

显示每个文件的创建日期并重定向到一个文件中:

[root@test tempfile]# ls -l --time-style=full-iso > /app/test.txt

# 输出工作目录-pwd

pwd(print working directory,输出工作目录),下面是pwd目录的执行结果。

# 常见示例

# 可以看到pwd指令输出的root用户的工作目录是/root路径,这里是首次进入系统,也就是说root用户的~当前工作目录是/root路径
[root@VM-8-5-centos ~]# pwd
/root

# 操作文件和目录相关指令

与操作文件和目录相关的指令主要有mkdir,cp,mv,rm,cat,head,tail,locate,find,ln,split指令。

# 创建目录-mkdir 常用

mkdir指令(make directory)命令可以创建文件夹(目录)。

# 基本语法

mkdir [选项]... 目录...

# 常见选项

选项 说明
-m,--mode=MODE 对新创建的目录设置权限。
-p,--parents 在创建目录的时候,如果父目录(parents)不存在,默认情况会报错,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。
-v,--verbose 打印创建的目录。

# 常见示例

创建一个父目录不存在的子目录。

# 在test目录不存在的情况下创建/test/12345目录
[root@VM-8-5-centos /]# mkdir /test/12345
mkdir: cannot create directory ‘/test/12345’: No such file or directory

创建一个父目录不存在的子目录,同时赋予特定权限。

# 创建目录,如果父目录不存在,一并创建父目录
# 对创建的目录设置权限,权限为700
[root@VM-8-5-centos /]# mkdir -vp -m 700 /test/12345
mkdir: created directory ‘/test’
mkdir: created directory ‘/test/12345’

# 复制文件-cp 常用

cp指令是用于复制文件或目录的指令,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。

# 基础语法

# 语法1
cp [OPTION]... [-T] SOURCE DEST

# 语法2
# 将一到多个源目录中的内容复制到目标目录中
cp [OPTION]... SOURCE... DIRECTORY

# 语法3
# 将目标目录中的内容复制到一到多个源目录中
cp [OPTION]... -t DIRECTORY SOURCE...

# 常见选项

选项 说明
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。
-p 保留源文件或目录的属性,包括所有者、所属组、权限与时间。
-r,-R,--recursive 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。
-a, --archive 此参数的效果和同时指定'-dpr'参数相同。复制文件和目录及其所有权与权限在内的所有属性。
-f,--force 强行复制文件或目录, 不论目的文件或目录是否已经存在。
-i,--interactive 覆盖文件之前先询问用户。
-u,--update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件。
-v,-verbose 显示指令执行过程的细节。
--version 显示版本信息。
-T, --no-target-directory 将DEST目标视为普通文件对待。
-t, --target-directory=DIRECTORY 将所有SOURCE参数复制到DIRECTORY中。
-n, --no-clobber 不要覆盖现有文件。
-L, --dereference 使用SOURCE中的符号链接。
-P, --no-dereference 不使用SOURCE中的符号链接。
-l, --link 对所有文件执行硬链接而不是复制操作。
-s, --symbolic-link 对所有文件执行软链接而不是复制操作。
-H 对被复制后的文件使用SOURCE中的软链接。

# 常见示例

下面是一个cp指令的示例,这个示例里,当且仅当file1的更新日期大于file2的更新日期时,才将文件file1复制成文件file2,同时在复制的过程中显示cp指令执行的细节。

cp -u -v file1 file2

下面的指令将/mnt/*的所有文件复制到/app/leopard_home文件夹下

cp -prv /mnt/* /app/1eopard_home

# 移动文件-mv 常用

mv(move)指令可以执行文件移动文件重命名操作。不管哪种情况,操作完成之后,原先的文件名都不再存在。

# 基础语法

# 语法1
mv [OPTION]... [-T] SOURCE DEST

# 语法2
# 将一到多个源目录中的内容移动到目标目录中
mv [OPTION]... SOURCE... DIRECTORY

# 语法3
# 将目标目录中的内容移动到一到多个源目录中
mv [OPTION]... -t DIRECTORY SOURCE...

# 常见选项

选项 说明
-i 如果mv操作将导致对已存在的目标文件的覆盖,此时系统会询问是否覆盖,用户输入‘y进行覆盖,输入'n'则不覆盖,这样可以避免误覆盖文件。
-b 为每个已存在的目标文件创建备份。
-n,--no-clobber 不覆盖已经存在的文件。
-f 强制操作。在mv操作要覆盖某已有的目标文件或目录时不给任何指示,默认覆盖。如果所给目标文件(不是目录)已存在,此时该文件的内容将后备新文件覆盖,为防止用户用mv命令破坏另一个文件,使用mv命令移动文件时,最好使用i选项。
-b 覆盖文件前先对其进行备份。
-u,--update 仅当SOURCE文件比目标文件新或目标文件丢失时才移动。
-t, --target-directory=DIRECTORY 将所有SOURCE参数移动到DIRECTORY中。
-T, --no-target-directory 将DEST目标视为普通文件对待。
-v,--verbose 显示执行的详细信息。

# 常见示例

将一个文件夹移动到另一个文件夹下。

[root@VM-8-5-centos data]# mkdir test1
[root@VM-8-5-centos data]# ls
kieoo  test1
[root@VM-8-5-centos data]# mkdir test2
[root@VM-8-5-centos data]# mv test1 test2
[root@VM-8-5-centos data]# ls
kieoo  test2
[root@VM-8-5-centos data]# cd test2
[root@VM-8-5-centos test2]# ls
test1

# 删除文件-rm 常用

rm(remove)是linux中的删除指令,用户可以用rm命令删除不需要的目录及文件。该命令的功能是删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,源文件保持不变。

# 基础语法

rm [OPTION]... FILE...

# 常见选项

选项 说明
-f,--force 强制删除,忽略不存在的文件,无需提示。
-i 交互式提示。
-l 在删除三个以上的文件之前或递归删除时提示一次;比-i侵扰性更小,同时仍然可以防止大多数错误。
-r,-R,--recursive 递归删除目录及其内容。
-d,--dir 删除空目录。
-v,--verbose 显示执行过程中的细节。
--preserve-root 默认情况下会自动添加的一个参数,如果执行的是"rm -rf /"指令,linux会给出提示,并不会真正执行删除动作。
--no-preserve-root 强制去除掉--preserve-root选项,加了这个参数之后执行"rm -rf --no-preserve-boot /"指令会删掉所有文件。

# 常见示例

以下是几个切记不能随意输入的指令,如下:

[root@VM-8-5-centos ~]# rm --help
Usage: rm [OPTION]... FILE...
Remove (unlink) the FILE(s).

  -f, --force           ignore nonexistent files and arguments, never prompt
  -i                    prompt before every removal
      --no-preserve-root  do not treat '/' specially
# 通过查看--help可以看到系统中rm指令包含了--preserve-root 参数
      --preserve-root   do not remove '/' (default)
  -r, -R, --recursive   remove directories and their contents recursively
  -d, --dir             remove empty directories
  -v, --verbose         explain what is being done
      --help     display this help and exit
      --version  output version information and exit

By default, rm does not remove directories.  Use the --recursive (-r or -R)
option to remove each listed directory, too, along with all of its contents.

To remove a file whose name starts with a '-', for example '-foo',
use one of these commands:
  rm -- -foo

  rm ./-foo

Note that if you use rm to remove a file, it might be possible to recover
some of its contents, given sufficient expertise and/or time.  For greater
assurance that the contents are truly unrecoverable, consider using shred.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'rm invocation'
# 尝试执行指令,可以看到Linux会给出对应提示
[root@VM-8-5-centos ~]# rm -rf /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe

删除系统中的所有目录,且不会有任何提示。

# 这个指令不会给任何提示,绝对不要操作
rm -rf /*

删除当前路径下的所有文件。

# 默认追加上./ 所以实际效果是rm -rf ./* 即把当前文件夹下的内容全部删除
# 如果这里我们cd到了/目录的情况下,这条指令就等价于rm -rf /*了,一样是要爆炸的。
# 因此这个也要谨慎执行。
rm -rf *

指令输入有异常,不执行。

# 这个指令执行不会报错,但是也没有任何实际执行结果出现。
rm -rf 

小技巧

只要在使用rm命令时用到了通配符,除了仔细检查输入内容之外,还可以先使用ls命令测试一下rm命令的可能执行结果。这样就能事先知道要删除哪些文件。然后按向上方向键调出先前的命令,并将ls命令替换成rm命令即可。

# 连接文件并输出-cat 常用

cat命令源自于concatenate files and print这个词组,意思为「连接文件或标准输入并输出」。
该命令可以连接一个或多个文件,并将结果输出到终端或其他文件,这样我们就能在终端直接看到输出的内容。

# 基础语法

Usage: cat [OPTION]... [FILE]...
# 连接文件或标准输入(键盘)到标准输出,标准输入和标准输出都可以重定向。
Concatenate FILE(s), or standard input, to standard output.

# 常见示例

标准输入输出到标准输出中:

[root@VM-8-5-centos ~]# cat
# 使用键盘输入test
test
# cat指令将test输出到控制台
test
# 这里使用键盘输入howl
howl
# cat指令将howl输出到控制台
howl
# 使用ctrl+C退出cat指令
[root@VM-8-5-centos ~]#

标准输入输出到特定文件中:

# cat指令从键盘获取输入,同时将输出重定向到test.txt文件
[root@VM-8-5-centos ~]# cat > test.txt
# 输入一行内容
howl test
# 输入一行内容
yes
# 这里使用ctrl+C退出cat指令

特定文件输出到标准输出中:

# 对cat指令的输入进行重定向,将标准输入(键盘)重定向为一个特定文件
# 查看文件内容,可以看到,上面一条指令实际上隐含的追加了一个<符号,即重定向标准输入符号
[root@VM-8-5-centos ~]# cat < test.txt
howl test
yes
# 查看文件内容
# 增加-n参数的话会显示行号。
# 增加-s参数会压缩连续的空行为一个空行。
[root@VM-8-5-centos ~]# cat -ns test.txt
howl test
yes

提示

cat指令的一个最常见的功能就是查看文件。(仅适用文件大小较小的文件,如文件内容较大,一般需要使用tail指令)

多个文件输出到特定文件中(拼接文件):

# 以下指令将把file1和file2文件的内容合并,并将结果写入merged_file中。如果merged_file已经存在,它将被覆盖。
cat file1 file2 > merged_file

将一个文件追加输出到另一个文件中:

# 以下指令将把file1的内容追加到file2的末尾。
cat file1 >> file2

将文件内容通过管道传递给其他指令:

# 以下指令将把filename文件的内容传递给另一个命令(command),然后可以在该命令中对内容进行处理。
# 这里可以看出来,cat指令的执行结果可以作为一个进程的内容经由管道"|"传递给下一个进程。
cat filename | command

# 将文件头打印到标准输出-head

head命令用于将文件(开头部分的内容)打印到标准输出。

# 基础语法

[root@VM-8-5-centos bin]# head --help
Usage: head [OPTION]... [FILE]...
Print the first 10 lines of each FILE to standard output.

# 常见选项

选项 说明
-q 不打印文件名。
-v 打印文件名。
-n 显示指定行数的内容。
-c 显示指定字节的内容。

# 常见示例

查看文件前面几行的文件内容。

[root@VM-8-5-centos ~]# ls
test.txt
[root@VM-8-5-centos ~]# cat test.txt
howl test
yes
[root@VM-8-5-centos ~]# head -n 1 test.txt
howl test
[root@VM-8-5-centos ~]# head -n 2 test.txt
howl test
yes

# 将文件尾打印到标准输出-tail 常用

# 基础语法

tail [OPTION]... [FILE]...

# 常见选项

选项 说明
-n 显示指定行数的内容。
-c 显示指定字节的内容。
-q 不打印文件名。
-v 打印文件名。
-f 通过-f选项,tail指令会持续监视文件增长,一旦添加了新行,立即就会显示在屏幕中。

# 常见示例

# 持续查看该文件最后30行的文本,一般我们查看日志的时候都是用的tail指令去查看。
[root@VM-8-5-centos ~]# tail -30f test.txt
howl test
yes
# 这里按了ctrl+C指令退出了tail指令。
[root@VM-8-5-centos ~]#

# 文件检索-locate

locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库(locate自己内置的一个类似全文检索的数据库,该数据库由updatedb程序创建,程序会通过cron表达式触发守护进程更新数据,如果locate查找不到最新的数据,就需要切换root用户手动执行updatedb程序了。)内,查找合乎范本样式条件的文档或目录。一般情况我们只需要输入locate your_file_name 即可查找指定文件。

# 基础语法

locate [OPTION]... [PATTERN]...

# 常用选项

选项 说明
-b 仅匹配路径名的基本名称。
-c 只输出找到的数量。
-d 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db。
-e 仅打印当前现有文件的条目。
-L 检查文件时遵循尾随符号链接存在(默认)。
-i 匹配模式时忽略大小写区别。
-l -n LIMIT -- 将输出(或计数)限制为LIMIT个条目。
-m 忽略,用于向后兼容性。
-P 检查文件是否存在时不要遵循尾随符号链接。
-s 忽略,为了向后兼容。
-S 不搜索条目,打印每个已使用数据库的统计信息。
-q 安静模式,不会显示任何错误讯息。
-r 使用基本正则表达式。
-0 在输出上带有NUL的单独条目。
-1 如果是1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为locate必须至实际的档案系统中取得档案的权限资料。
-n 至多显示 n个输出。
-o 指定资料库存的名称。
-A 仅打印与所有模式匹配的条目。
-w 匹配整个路径名(默认)。

# 常用示例

查找 passwd 文件,输入以下命令:

[root@VM-8-5-centos ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/passwd
/usr/include/rpcsvc/yppasswd.h
/usr/include/rpcsvc/yppasswd.x
/usr/lib/firewalld/services/kpasswd.xml
...

查找文件名包含字符串bin/zip的所有文件:

[root@VM-8-5-centos ~]# locate bin/zip
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipgrep
/usr/bin/zipinfo
/usr/bin/zipnote
/usr/bin/zipsplit

使用locate命令结合grep指令搜索文件:

[root@VM-8-5-centos ~]# locate zip | grep bin
/usr/bin/bunzip2
/usr/bin/bzip2
/usr/bin/bzip2recover
/usr/bin/funzip
/usr/bin/gpg-zip
/usr/bin/gunzip
/usr/bin/gzip
/usr/bin/unzip
/usr/bin/unzipsfx
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipgrep
/usr/bin/zipinfo
/usr/bin/zipnote
/usr/bin/zipsplit
/usr/lib/firmware/qed/qed_init_values_zipped-8.10.10.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.10.5.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.15.3.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.20.0.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.33.1.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.33.11.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.37.2.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.37.7.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.4.2.0.bin
/usr/lib/firmware/qed/qed_init_values_zipped-8.7.3.0.bin
/usr/local/qcloud/YunJing/bin/unzip
/var/lib/docker/overlay2/4d0dc4ca2ea74faa8dbb708029e34fc80d8410688d4f35947d2ca6ed5312db50/diff/usr/bin/gunzip
/var/lib/docker/overlay2/4d0dc4ca2ea74faa8dbb708029e34fc80d8410688d4f35947d2ca6ed5312db50/diff/usr/bin/gzip

结合locate以及updatedb指令测试文件检索功能:

[root@VM-8-5-centos data]# mkdir shajhdkyh
[root@VM-8-5-centos data]# cd /
# 可以看到刚创建的文件并不能被locate指令检索到
[root@VM-8-5-centos /]# locate shajhdkyh
# 更新数据库
[root@VM-8-5-centos /]# updatedb
# 重新检索,成功检索到文件
[root@VM-8-5-centos /]# locate shajhdkyh
/data/shajhdkyh
[root@VM-8-5-centos /]# cd /data
# 删除文件
[root@VM-8-5-centos data]# rm -rf shajhdkyh/
# locate还是可以检索到文件
[root@VM-8-5-centos data]# locate shajhdkyh
/data/shajhdkyh
# 更新数据库
[root@VM-8-5-centos data]# updatedb
# locate无法检索到文件
[root@VM-8-5-centos data]# locate shajhdkyh

搜索 etc 目录下所有以 sh 开头的文件:

[root@VM-8-5-centos ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
/var/lib/docker/overlay2/4d0dc4ca2ea74faa8dbb708029e34fc80d8410688d4f35947d2ca6ed5312db50/diff/etc/shadow
/var/lib/docker/overlay2/4d0dc4ca2ea74faa8dbb708029e34fc80d8410688d4f35947d2ca6ed5312db50/diff/etc/shells
/var/lib/docker/overlay2/5d2e30ba39dacc5387f0f43e7aff6484e7d43012b9cd059c261e597cb37d80c2/diff/etc/shadow
/var/lib/docker/overlay2/5d2e30ba39dacc5387f0f43e7aff6484e7d43012b9cd059c261e597cb37d80c2/diff/etc/shadow-

忽略大小写搜索当前用户目录下所有以r开头的文件:

[root@VM-8-5-centos ~]# locate -i ~/r

# 文件检索-find指令 常用

find 命令用于在指定目录下查找文件和目录。它可以使用不同的选项来过滤和限制查找的结果。

# 基础语法

find [路径] [测试条件] [操作符] [预定义操作/自定义操作]

# 常见选项

  • 测试条件
选项 说明
-cmin -cmin n:匹配n分钟前改变状态(内容或属性)的文件或目录,如果不到n分钟,就用-n,如果超过n分钟,就用+n。
-cnewer -cnewer file: 匹配内容或属性的修改时间比文件file更晚的文件或目录。
-ctime -ctime n:匹配系统中n*24小时前文件状态被修改(内容,属性,访问权限等)的文件或目录。
-empty 匹配空文件及空目录 。
-group -group name:匹配属于name组的文件或目录。name可以描述为组名,也可以描述为该组的ID号。
-name -name pattern:按文件名查找,支持使用通配符 * 和 ?。
-iname -iname pattern: 与-name功能相同,只是不区分大小写。
-inum -inum n: 匹配索引节点是n的文件。
-mmin -mmin n:查找在n分钟内被修改过的文件或目录。
-mtime -mtime n:匹配n*24小时前只有内容被更改的文件或目录。
-newer -newer file: 匹配内容的修改时间比file文件更近的文件或目录。这在编写shell脚本进行文件备份的时候非常有用。每次创建备份时,更新某个文件(比如日志),然后用find+此参数选项来确定上一次更新后哪个文件改变了。
-nouser 匹配不属于有效用户的文件或目录。可以用来查找那些属于已删除账户的文件,也可以用来检测攻击者的活动。
-nogroup 匹配不属于有效组的文件或目录。
-perm -perm mode:寻找访问权限与既定规则匹配的文件或目录。
-size -size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-type -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-user -user username:按文件所有者查找。
-depth 引导find程序处理目录前先处理目录里的文件。当指定-delete操作时,该参数选项会自动调用。
-maxdepth -maxdepth level:当执行测试条件行为时,设置find程序陷入目录数的最大级别数。
-mindepth -mindepth level:当执行测试条件行为时,设置find程序陷入目录数的最小级别数。
-mount 引导find不去遍历挂载在其他文件系统上的目录。
-noleaf 指导find程序不要基于“正在搜索类UNIX文件系统”的假设来优化它的搜索。当扫描DOS/Windows文件系统和CD时,会用到该选项。
  • 操作符
选项 说明
-and 与操作。
-or 或操作。该操作符可以简写为-o。
-not 非操作。该操作符可以简写为!。
() 括号运算符,可以对测试条件和操作符进行分组。
  • 预定义操作/自定义操作
选项 说明
-delete 删除匹配文件。
-ls 对匹配文件执行ls操作,以标准格式输出其文件名以及所要求的其他信息。
-print 将匹配到的文件的全路径以标准格式输出。该操作是默认操作
-quit 一旦匹配成功便退出。
-exec 用户自定义操作,区别于预定义操作。

# 常见示例

查找当前用户家目录下的文件及目录:

[root@VM-8-5-centos ~]# find ~
/root
/root/.lesshst
/root/.cshrc
/root/.bashrc
/root/.viminfo
/root/.bash_logout
/root/.cache
/root/.cache/abrt
/root/.cache/abrt/lastnotification
/root/.pip
/root/.pip/pip.conf
/root/.bash_history
/root/.ssh
/root/.ssh/authorized_keys
/root/.pki
/root/.pki/nssdb
/root/.pydistutils.cfg
/root/.config
/root/.config/abrt
/root/.tcshrc
/root/.bash_profile

# 对查找的文件进行计数
[root@VM-8-5-centos ~]# find ~ | wc -l
21

查找当前用户家目录下的目录:

[root@VM-8-5-centos ~]# find ~ -type d
/root
/root/.cache
/root/.cache/abrt
/root/.pip
/root/.ssh
/root/.pki
/root/.pki/nssdb
/root/.config
/root/.config/abrt

查找根目录下文件名称为".jpg"的普通文件:

[root@VM-8-5-centos ~]# find / -type f -name "*.jpg"
/usr/share/backgrounds/day.jpg
/usr/share/backgrounds/morning.jpg
/usr/share/backgrounds/night.jpg
/usr/share/backgrounds/default.jpg

查找访问权限不是0600的文件以及访问权限不是0700的目录:

[root@VM-8-5-centos ~]# find / \( -type f -not -perm 0600 \) -or  \( -type d -not -perm 0700 \);
/
/mnt
/opt
/opt/rh
/opt/mellanox
/opt/mellanox/iproute2
/opt/mellanox/iproute2/etc
/opt/mellanox/iproute2/etc/group
/opt/mellanox/iproute2/etc/bpf_pinning
/opt/mellanox/iproute2/etc/rt_tables
/opt/mellanox/iproute2/etc/nl_protos
/opt/mellanox/iproute2/etc/rt_realms
/opt/mellanox/iproute2/etc/rt_dsfield
/opt/mellanox/iproute2/etc/rt_protos
/opt/mellanox/iproute2/etc/rt_scopes
...

查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

[root@VM-8-5-centos ~]# find . -type f -perm 644 -exec ls -l {} \;
-rw-r--r--. 1 root root 100 Dec 29  2013 ./.cshrc
-rw-r--r--. 1 root root 176 Dec 29  2013 ./.bashrc
-rw-r--r--. 1 root root 18 Dec 29  2013 ./.bash_logout
-rw-r--r-- 1 root root 101 Nov 23  2020 ./.pip/pip.conf
-rw-r--r-- 1 root root 73 Nov 23  2020 ./.pydistutils.cfg
-rw-r--r--. 1 root root 129 Dec 29  2013 ./.tcshrc
-rw-r--r--. 1 root root 176 Dec 29  2013 ./.bash_profile

查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

find / -type f -size 0 -exec ls -l {} \;

找到文件后删除文件:

# 这个例子中,-exec 选项允许你执行一个命令,{} 将会被匹配到的文件名替代,\; 表示命令结束。
find /path/to/search -name "pattern" -exec rm {} \;

# 创建链接-ln

ln(link)是linux中的创建链接指令,链接分两种,分别是硬链接和软链接(符号链接)。

# 基础语法

# 创建硬链接语法
# 硬链接只支持链接文件
ln filename link

# 创建软链接语法
# item可以是文件,也可以是目录
ln -s item link

# 常见示例

下面是一个创建硬链接的示例:

[root@VM-8-5-centos danmu]# cd test
[root@VM-8-5-centos test]# ls
[root@VM-8-5-centos test]# ls
test1
# 这里将test1作为源文件创建了test2
[root@VM-8-5-centos test]# ln test1 test2
[root@VM-8-5-centos test]# ls
test1  test2
# 要想区分硬链接和源文件,只能通过ls -li指令,这里可以看到test1和test2的i节点号相同,
# 都是925154,因此他们是同一个文件,至于哪个是源文件,哪个是硬链接,则没办法区分,也没必要区分。
[root@VM-8-5-centos test]# ls -li
total 8
925154 -rw-r--r-- 2 root root 7 Dec 14 10:14 test1
925154 -rw-r--r-- 2 root root 7 Dec 14 10:14 test2
[root@VM-8-5-centos test]# ls
test1  test2
[root@VM-8-5-centos test]# vim test1
[root@VM-8-5-centos test]# cat test2
123451234512345123451234512345123451234512345123451234512345
[root@VM-8-5-centos test]#

下面是一个创建软链接的示例:

[root@VM-8-5-centos test]# ln -s test1 test3
[root@VM-8-5-centos test]# ls
test1  test2  test3
[root@VM-8-5-centos test]# vim test1
[root@VM-8-5-centos test]# cat test1
abcdef
[root@VM-8-5-centos test]# cat test2
abcdef
[root@VM-8-5-centos test]# cat test3
abcdef
[root@VM-8-5-centos test]# ls -l
total 8
-rw-r--r-- 2 root root 7 Dec 14 10:14 test1
-rw-r--r-- 2 root root 7 Dec 14 10:14 test2
# 这里可以很明显的看到test3是一个软链接,指向的源文件是test1
lrwxrwxrwx 1 root root 5 Dec 14 10:14 test3 -> test1
[root@VM-8-5-centos test]#

# 拆分文件-split

split命令是Linux系统中的一个用于拆分文件的命令。它可以将一个大文件拆分成多个小文件,以便于传输,存储或处理。

# 基础语法

split [选项] [输入文件] [输出文件前缀]

# 常见选项

选项 说明
-b 指定每个输出文件的大小,大小使用后缀(如K,M,G)来表示,默认单位是字节。
-l 指定每个输出文件的行数。
-a 指定输出文件名的后缀长度,默认为2。
-d 使用数字作为输出文件名的后缀,而不是默认的字母。
--verbose 显示拆分过程的详细信息。
--help 显示帮助信息。

# 常见示例

下面是一个split的示例,这个示例里,对package20231205.tar.gz 这个文件做切片处理,每个切片大小是1000M,不使用默认的字母后缀,改为使用数字后缀,指定文件后缀的长度为3,切分后的文件名称为package20231205.tar.gz.000到package20231205.tar.gz.999

-b代表每个切片1000M,-a代表切片文件后缀的数字为3位数字,即000到990,-d
split -b 1000M -d -a 3 package20231205.tar.gz package20231205.tar.gz.

# 用户与用户组相关指令

用户与用户组相关的指令有id,chmod,umask(修改用户创建文件及文件夹时的默认权限,详见linux系统-umask详解 (opens new window)),su,sudo,chown,passwd指令。

# 查看当前用户身份信息-id

通过id指令,我们可以查看用户的属主,属组信息。

# 基础语法

id [OPTION]... [USER]

# 常见选项

选项 说明
-g 仅打印有效的组id。
-G 打印所有的组id。
-n 打印名称(需与-u、-g 或 -G 组合)。
-r 打印真实ID(需与-u、-g 或 -G 组合)。
-u 打印有效的用户ID。

# 常见示例

# 输入id指令不加参数,打印当前用户的uid,gid以及groups
[root@VM-8-5-centos ~]# id
# uid:用户id为0
# gid:用户主属组id为0
# groups=0,当前用户仅有一个用户组
uid=0(root) gid=0(root) groups=0(root)
# 输入id指令加用户名,可以打印指定用户的uid,gid,groups信息。
[root@VM-8-5-centos ~]# id lighthouse
uid=1001(lighthouse) gid=1001(lighthouse) groups=1001(lighthouse)

# 修改文件权限-chmod 常用

chmod(change mode)命令是控制用户对文件的权限的命令。

# 基础语法

chmod [-cfvR] [--help] [--version] mode file...

# 常见选项

选项 说明
-c 若该文件权限确实已经更改,才显示其更改动作。
-f 若该文件权限无法被更改也不要显示错误讯息。
-v 显示权限变更的详细资料。
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)。

# 常见示例

将文件file1.txt设置为所有人可读,可写,可执行:

# 方式1,个人推荐使用这种方式
chmod 777 file1.txt

提示

chmod支持两种修改权限的方式,一种是使用八进制数字的方式,另外一种是使用符号表示法,如下:

# u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
# +代表增加权限,-代表减少权限,=代表重写权限
# r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
[ugoa...][[+-=][rwxX]...][,...]

将文件 file1.txt 设为所有人皆可读取:

# 第一种方式
chmod ugo+r file1.txt
# 第二种方式
chmod a+r file1.txt

将文件file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入:

chmod ug+w,o-w file1.txt file2.txt

将文件file1.txt设置为所有人可读,可写,可执行

# 方式2
chmod a=rwx file1.txt

# 变更为其他用户身份-su 常用

su(英文全拼:switch user)命令用于变更为其他使用者的身份,除root外,需要键入该使用者的密码。

# 基础语法

su [options] [-] [USER [arg]...]

# 常见选项

选项 说明
-m,-p 执行 su 时不改变环境变量。
-,-l 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root。
-c 变更账户为USER的使用者并执行指令(command),然后变回原来的使用者。所以这个参数的意思是仅用特定用户执行单条指令。
-g 指定一个主组。
-G 指定一个辅助组。
-f 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh。
-s 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用。

# 常见示例

变更账户为普通用户lighthouse:

[root@VM-8-5-centos ~]# su lighthouse
[lighthouse@VM-8-5-centos root]$

变更帐号为 lighthouse 并在执行 ls 指令后退出变回原使用者:

[root@VM-8-5-centos home]# cd lighthouse
[root@VM-8-5-centos lighthouse]# ls
[root@VM-8-5-centos lighthouse]# su -c ls lighthouse

# 以系统管理者身份执行指令-sudo 常用

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。修改/etc/sudoer配置文件可以为其他用户赋予root用户的特定权限。

# 基础语法

# 获取帮助
sudo -h | -K | -k | -V
# 查看版本
sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
# 显示出自己被赋予了哪些权限
sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
# 编辑文件而不是运行命令
usudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
# 执行指令
sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]

# 常见选项

选项 说明
-A 使用助手程序进行密码提示。
-e 编辑文件而不是运行命令。
-E 运行命令时保留用户环境。
-h 在主机上运行命令(如果插件支持)。
-b 在后台执行命令。
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )。
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell。
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)。
-l 显示出自己(执行 sudo 的使用者)的权限。
-i 以目标用户身份运行登录shell;一般配合一条指令执行。即使用特定用户的身份执行一条指令。
-- 停止处理命令行参数。

# 常见示例

[lighthouse@VM-8-5-centos etc]$ sudo 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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
syslog:x:996:994::/home/syslog:/bin/false
www:x:1000:1000::/home/www:/sbin/nologin
lighthouse:x:1001:1001::/home/lighthouse:/bin/bash

查看sudo授予了哪些权限:

[root@VM-8-5-centos ~]# sudo -l
Matching Defaults entries for root on VM-8-5-centos:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User root may run the following commands on VM-8-5-centos:
    (ALL) ALL
    (ALL) NOPASSWD: ALL
    (ALL) NOPASSWD: ALL

为其他用户提升权限:

# 可以通过修改/etc/sudoers文件来对其他用户进行提权,修改后立刻生效
[root@VM-8-5-centos ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Refuse to run if unable to disable echo on the tty.
#
Defaults   !visiblepw

#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults    always_set_home
Defaults    match_group_by_gid

# Prior to version 1.8.15, groups listed in sudoers that were not
# found in the system group database were passed to the group
# plugin, if any. Starting with 1.8.15, only groups of the form
# %:group are resolved via the group plugin by default.
# We enable always_query_group_plugin to restore old behavior.
# Disable this option for new behavior.
Defaults    always_query_group_plugin

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
lighthouse ALL=(ALL) NOPASSWD: ALL

# 更改文件所有者和所属群组-chown 常用

chown(change owner)命令用于设置文件所有者和文件关联组的命令。

# 基础语法

chown [-cfhvR] user[:group] file...

# 常见选项

选项 说明
-c 显示更改的部分的信息。
-f 忽略错误信息。
-v 显示详细的处理信息。
-h 修复符号链接。
-R 处理指定目录以及其子目录下的所有文件。

# 常见示例

将文件夹/app/test下所有文件的用户以及用户组都修改为imodule:imodule

chown -R imodule:imodule /app/test
# 也可以将用户与用户组中间的冒号也可以换成.号,但是最好别使用.号
chown -R imodule.imodule /app/test

# 更改用户密码-passwd 常用

passwd命令用来更改使用者的密码。

# 基础语法

passwd [OPTION...] <accountName>

# 常见选项

选项 说明
-d 删除密码(仅root用户可使用)。
-f 强制用户下次登录时必须修改口令。
-w 口令要到期前警告用户的天数(仅root用户可使用)。
-l 停止账号使用(仅root用户可使用)。
-u 启用已被停止的账户(仅root用户可使用)。
-k 保留未过期的身份验证令牌。
-S 报告命名帐户的密码状态(仅限root用户)。
-x 指定口令最长存活期(仅限root用户)。
-n 指定口令最短存活期(仅限root用户)。
-i 密码过期后帐户被禁用的天数(仅限root用户)。

# 常见示例


# 查询结果处理相关指令

与查询结果处理有关的指令有sort,uniq,wc,grep指令。

# 查询结果排序-sort

sort指令一般配合一个指令的执行结果以及管道“ | ”去使用,它可以对前一个指令的执行结果进行排序。

# 基础语法

sort [OPTION]... [FILE]...

# 常见选项

选项 说明
-b 忽略每行前面开始处的空行
-c 检查文件是否已经按照顺序排序
-d 排序时,仅处理英文字母,数字,空格,忽略其他字符。
-f 排序时,将小写字母视为大写字母。
-h 以"人"容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。
-n 依照数值的大小排序。
-o 将排序结果写入文件而不是标准输出(显示器)。
-r 以相反的顺序来排序。

# 常见示例

将ls指令的输出结果排序后写入到less指令的输入。

# 使用这个指令可以在less里查看/bin /usr/bin文件夹下的文件清单。
# 在展示之前会先对文件进行排序,排序规则根据文件名字母顺序升序排列。
[root@VM-8-5-centos ~]#  ls /bin /usr/bin | sort | less

# 报告或忽略重复行-uniq

uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。

# 基础语法

[root@VM-8-5-centos bin]# uniq --help
Usage: uniq [OPTION]... [INPUT [OUTPUT]]
Filter adjacent matching lines from INPUT (or standard input),
writing to OUTPUT (or standard output).

# 常见选项

选项 说明 选项 说明
-c 在输出行前面加上每行在输入文件中出现的次数。 -d 仅显示重复行。
-D 打印所有重复行。 -u 仅显示不重复的行。

# 常见示例

对查询结果进行去重。

ls /bin /usr/bin | sort | uniq | less

提示

需要注意,uniq指令并不是去重指令,它的指令含义是“报告或忽略重复行”,默认情况下,它只会删除相邻的重复行,所以,必须要配合sort排序指令一起使用才能达到去重的效果。

# 查询结果计数-wc 常用

wc(word count)用于统计文件中换行符,单词以及字节的数量。

# 基础语法

wc [OPTION]... [FILE]...

# 常见选项

选项 说明 选项 说明
-c 打印字节数。 -m 打印字符数。
-l 打印行数。 -w 打印单词数。

# 常见示例

显示输出中一共有多少行。

[root@VM-8-5-centos bin]# ls /bin /usr/bin | sort | uniq | wc -l
1124

# 全局正则表达式输出-grep 常用

(global regular expression(RE) print,全局正则表达式输出)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

# 基础语法

[root@VM-8-5-centos bin]# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).

# 常见选项

选项 说明
-a 将 binary 文件以 text 文件的方式搜寻数据。
-c 计算找到 '搜寻字符串' 的次数。
-i 使grep命令在搜索的时候忽略字母大小写(默认区分大小写)。
-n 顺便输出行号。
-v 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行。
--color 可以将找到的关键词部分加上颜色的显示。

# 常见示例

从程序列表中找出名称中包含单词zip的所有文件。

[root@VM-8-5-centos ~]# ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit

通过grep查询某个文件夹中所有文件的文件内容

grep -r "要查询的文本" /path/to/folder/*

# 进程相关指令

与进程相关的指令主要有ps,top,kill指令。

# 查看当前所有进程的运行情况-ps 常用

ps(process status)命令用于打印进程的快照。

# 基础语法

ps [options]

# 常见选项

  • 进程选择
选项 说明
-a 此选项使ps使用终端(tty)列出所有进程(终端进程,就几个),或者在与x选项一起使用时列出所有进程
-A,-e 列出所有进程,与-e选项功能相同。
-a 列出所有进程(排除会话领导者进程以及非终端进程),也可以近似等价于仅显示终端进程。
-d 列出所有进程(排除会话领导者进程)。
-T,-t 选择与此终端关联的所有进程。
-r 仅选择运行中的进程。
-x 显示所有程序,不以终端机来区分。
  • 进程选择(List形式)
选项 说明
-C -C cmdlist:查询指定commandlist集合中的进程。
-G -G grplist:查询指定groupids(组id集合)中的进程。
-p -p pidlist:列出指定id的所有进程,如ps -p "12 2" -p 4,8可以查询进程ID为2,4,8,12的进程。
-pplist -pplist pidlist:根据父idlist列出所有的子进程。
-s -s sesslist:查询指定sessionIds中的进程。
-t -t ttylist:查询指定ttyList中的进程。
U 选择有效用户名或ID在用户列表中的进程。
-U 选择真实用户名或ID在用户列表中的进程。
  • 输出格式化控制
选项 说明
-f 全格式显示。
-j 作业控制格式显示。
-l 长格式显示。
-M 添加安全数据列。
-o 用户自定义格式显示,如-o %MEM显示内存信息。
s 显示信号格式。
u 显示面向用户的格式。
v 显示虚拟内存格式。
X 显示寄存器格式。
  • 输出修饰符
选项 说明
c 显示真实的命令名称。
e 在命令后面显示环境。
-H 显示进程层次结构。
k k spec: 指定排列顺序,如ps jaxkuid,-ppid,+pid,ps axk comm o comm,args,ps kstart_time -ef。
O O order:指定排序顺序。
--cols cols n:设置列宽。
  • 线程显示
选项 说明
H 将线程显示为进程。
-L 显示线程,可能带有LWP和NLWP列。
-m 显示进程后的线程。
-T 显示线程,可能带有SPID列。

# 常见示例

使用系统标准语法查看系统上的每个进程:

[root@VM-8-5-centos ~]# ps -e
PID TTY          TIME CMD
 1 ?        00:03:01 systemd
 2 ?        00:00:00 kthreadd
 4 ?        00:00:00 kworker/0:0H
 6 ?        00:00:24 ksoftirqd/0
 7 ?        00:00:09 migration/0
 8 ?        00:00:00 rcu_bh
 9 ?        00:05:55 rcu_sched
10 ?        00:00:00 lru-add-drain
...

# 这条指令是最常用的查看进程命令
[root@VM-8-5-centos etc]# ps -ef
# UID 用户
# PID 进程ID
# PPID 父进程ID
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2023 ?        00:02:53 /usr/lib/systemd/systemd --switched-root --system --deserialize
root         2     0  0  2023 ?        00:00:00 [kthreadd]
root         4     2  0  2023 ?        00:00:00 [kworker/0:0H]
root         6     2  0  2023 ?        00:00:23 [ksoftirqd/0]
root         7     2  0  2023 ?        00:00:09 [migration/0]
root         8     2  0  2023 ?        00:00:00 [rcu_bh]
root         9     2  0  2023 ?        00:05:44 [rcu_sched]
root        10     2  0  2023 ?        00:00:00 [lru-add-drain]
root        11     2  0  2023 ?        00:00:03 [watchdog/0]
root        12     2  0  2023 ?        00:00:03 [watchdog/1]
root        13     2  0  2023 ?        00:00:09 [migration/1]
root        14     2  0  2023 ?        00:00:20 [ksoftirqd/1]
root        16     2  0  2023 ?        00:00:00 [kworker/1:0H]
root        18     2  0  2023 ?        00:00:00 [kdevtmpfs]
root        19     2  0  2023 ?        00:00:00 [netns]
root        20     2  0  2023 ?        00:00:00 [khungtaskd]
root        21     2  0  2023 ?        00:00:00 [writeback]
root        22     2  0  2023 ?        00:00:00 [kintegrityd]
root        23     2  0  2023 ?        00:00:00 [bioset]
root        24     2  0  2023 ?        00:00:00 [bioset]
root        25     2  0  2023 ?        00:00:00 [bioset]
root        26     2  0  2023 ?        00:00:00 [kblockd]
root        27     2  0  2023 ?        00:00:00 [md]
root        28     2  0  2023 ?        00:00:00 [edac-poller]
root        29     2  0  2023 ?        00:00:00 [watchdogd]
root        36     2  0  2023 ?        00:00:00 [kswapd0]
root        37     2  0  2023 ?        00:00:00 [ksmd]
root        38     2  0  2023 ?        00:00:01 [khugepaged]
root        39     2  0  2023 ?        00:00:00 [crypto]
root        47     2  0  2023 ?        00:00:00 [kthrotld]
root        49     2  0  2023 ?        00:00:00 [kmpath_rdacd]
root        50     2  0  2023 ?        00:00:00 [kaluad]
root        51     2  0  2023 ?        00:00:00 [kpsmoused]
root        52     2  0  2023 ?        00:00:00 [ipv6_addrconf]
root        65     2  0  2023 ?        00:00:00 [deferwq]
root       106     2  0  2023 ?        00:00:35 [kauditd]
root       202     2  0  2023 ?        00:00:00 [iscsi_eh]
root       256     2  0  2023 ?        00:00:00 [ata_sff]
root       263     2  0  2023 ?        00:00:00 [scsi_eh_0]
root       264     2  0  2023 ?        00:00:00 [scsi_tmf_0]
root       265     2  0  2023 ?        00:00:00 [scsi_eh_1]
root       266     2  0  2023 ?        00:00:00 [scsi_tmf_1]
root       268     2  0  2023 ?        00:00:00 [ttm_swap]
root       275     2  0  2023 ?        00:00:03 [kworker/0:1H]
root       291     2  0  2023 ?        00:00:48 [jbd2/vda1-8]
root       292     2  0  2023 ?        00:00:00 [ext4-rsv-conver]
root       298     2  0  2023 ?        00:00:01 [kworker/1:1H]
root       377     1  0  2023 ?        00:03:09 /usr/lib/systemd/systemd-journald
root       407     1  0  2023 ?        00:00:00 /usr/sbin/lvmetad -f
root       409     1  0  2023 ?        00:00:00 /usr/lib/systemd/systemd-udevd
root       606     1  0  2023 ?        00:00:38 /sbin/auditd
dbus       643     1  0  2023 ?        00:01:14 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nop
root       657     1  0  2023 ?        00:00:00 /usr/sbin/acpid
libstor+   661     1  0  2023 ?        00:00:02 /usr/bin/lsmd -d
root       662     1  0  2023 ?        00:00:27 /usr/lib/systemd/systemd-logind
root       737     2  0  2023 ?        00:00:00 [ib-comp-wq]
root       738     2  0  2023 ?        00:00:00 [kworker/u5:0]
root       739     2  0  2023 ?        00:00:00 [ib-comp-unb-wq]
root       740     2  0  2023 ?        00:00:00 [ib_mcast]
root       741     2  0  2023 ?        00:00:00 [ib_nl_sa_wq]
root       744     2  0  2023 ?        00:00:00 [mlx5_ib_sigerr_]
root       793     2  0  2023 ?        00:00:00 [rdma_cm]
root      1128     1  0  2023 ?        00:00:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -p
root      1196     1  0  2023 ?        00:00:00 /sbin/iscsid -f
root      1203     1  0  2023 ?        00:21:24 /usr/bin/containerd
root      1552     1  0  2023 ?        00:01:54 /usr/sbin/rsyslogd -n
root      1555     1  0  2023 ?        00:02:24 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containe
root      1597     1  0  2023 ?        00:00:05 /usr/sbin/crond -n
root      1608     1  0  2023 ?        00:00:00 /usr/sbin/atd -f
root      1609     1  0  2023 ?        00:00:03 /usr/libexec/postfix/master -w
postfix   1623  1609  0  2023 ?        00:00:00 qmgr -l -t unix -u
root      1641     1  0  2023 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
root      1642     1  0  2023 ttyS0    00:00:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
root      1707     1  0  2023 ?        00:00:41 /usr/sbin/sshd -D
ntp       1924     1  0  2023 ?        00:00:01 /usr/sbin/ntpd -u ntp:ntp -g
root      1992     2  0 Jan02 ?        00:00:00 [kworker/u4:2]
root      2229     2  0 19:55 ?        00:00:00 [kworker/1:2]
polkitd   2431     1  0  2023 ?        00:00:19 /usr/lib/polkit-1/polkitd --no-debug
root      2502     1  0  2023 ?        00:01:29 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      2674     1  0  2023 ?        00:00:07 /usr/local/qcloud/stargate/sgagent -d
root      2731     1  0  2023 ?        00:00:11 barad_agent
root      2737  2731  0  2023 ?        00:09:10 barad_agent
root      2738  2731  0  2023 ?        00:48:11 barad_agent
root      2765     1  0  2023 ?        00:02:16 /usr/local/qcloud/tat_agent/tat_agent
root      2896  1707  0 19:58 ?        00:00:00 sshd: root@pts/2
root      2898  1707  0 19:58 ?        00:00:00 sshd: root@notty
root      2900  2896  0 19:58 pts/2    00:00:00 -bash
root      2942  2898  0 19:58 ?        00:00:00 /usr/libexec/openssh/sftp-server
root      3001     2  0 09:05 ?        00:00:03 [kworker/0:1]
root      4264  1555  0  2023 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80
root      4270  1203  0  2023 ?        00:00:28 containerd-shim -namespace moby -workdir /var/lib/containerd/io
root      4288  4270  0  2023 ?        00:00:00 nginx: master process nginx -g daemon off;
101       4321  4288  0  2023 ?        00:00:02 nginx: worker process
101       4322  4288  0  2023 ?        00:00:02 nginx: worker process
root      5325     2  0 20:10 ?        00:00:00 [kworker/1:0]
root      5843     2  0 Jan01 ?        00:00:03 [kworker/u4:1]
root      7218  2900  0 20:20 pts/2    00:00:00 ps -ef
root      8407     1  1  2023 ?        03:14:56 /usr/local/qcloud/YunJing/YDEyes/YDService
root      8432     1  0  2023 ?        00:04:07 /usr/local/qcloud/YunJing/YDLive/YDLive
root      8651  8407  0  2023 ?        00:03:22 /bin/sh -c sleep 100
root     13402     2  0 18:05 ?        00:00:00 [kworker/0:2]
root     14417     2  0 18:10 ?        00:00:00 [kworker/0:0]
postfix  20321  1609  0 18:40 ?        00:00:00 pickup -l -t unix -u
root     25714  1707  0 19:10 ?        00:00:00 sshd: root@pts/1
root     25716  1707  0 19:10 ?        00:00:00 sshd: root@notty
root     25718 25714  0 19:10 pts/1    00:00:00 -bash
root     25757 25716  0 19:10 ?        00:00:00 /usr/libexec/openssh/sftp-server

[root@VM-8-5-centos ~]# ps -eF
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0 31415  3732   1  2023 ?        00:03:01 /usr/lib/systemd/systemd --switched-root --syst
root         2     0  0     0     0   1  2023 ?        00:00:00 [kthreadd]
root         4     2  0     0     0   0  2023 ?        00:00:00 [kworker/0:0H]
root         6     2  0     0     0   0  2023 ?        00:00:24 [ksoftirqd/0]
root         7     2  0     0     0   0  2023 ?        00:00:09 [migration/0]
root         8     2  0     0     0   0  2023 ?        00:00:00 [rcu_bh]
root         9     2  0     0     0   1  2023 ?        00:05:55 [rcu_sched]
root        10     2  0     0     0   0  2023 ?        00:00:00 [lru-add-drain]
...

[root@VM-8-5-centos ~]# ps -ely
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0     1     0  0  80   0  3732 31415 ep_pol ?        00:03:01 systemd
S     0     2     0  0  80   0     0     0 kthrea ?        00:00:00 kthreadd
S     0     4     2  0  60 -20     0     0 worker ?        00:00:00 kworker/0:0H
S     0     6     2  0  80   0     0     0 smpboo ?        00:00:24 ksoftirqd/0
S     0     7     2  0 -40   -     0     0 smpboo ?        00:00:09 migration/0
S     0     8     2  0  80   0     0     0 rcu_gp ?        00:00:00 rcu_bh
S     0     9     2  0  80   0     0     0 rcu_gp ?        00:05:55 rcu_sched
S     0    10     2  0  60 -20     0     0 rescue ?        00:00:00 lru-add-drain
S     0    11     2  0 -40   -     0     0 smpboo ?        00:00:03 watchdog/0
S     0    12     2  0 -40   -     0     0 smpboo ?        00:00:03 watchdog/1
S     0    13     2  0 -40   -     0     0 smpboo ?        00:00:09 migration/1
S     0    14     2  0  80   0     0     0 smpboo ?        00:00:20 ksoftirqd/1
S     0    16     2  0  60 -20     0     0 worker ?        00:00:00 kworker/1:0H
S     0    18     2  0  80   0     0     0 devtmp ?        00:00:00 kdevtmpfs
S     0    19     2  0  60 -20     0     0 rescue ?        00:00:00 netns
S     0    20     2  0  80   0     0     0 watchd ?        00:00:00 khungtaskd
S     0    21     2  0  60 -20     0     0 rescue ?        00:00:00 writeback
S     0    22     2  0  60 -20     0     0 rescue ?        00:00:00 kintegrityd
S     0    23     2  0  60 -20     0     0 rescue ?        00:00:00 bioset
S     0    24     2  0  60 -20     0     0 rescue ?        00:00:00 bioset
S     0    25     2  0  60 -20     0     0 rescue ?        00:00:00 bioset
S     0    26     2  0  60 -20     0     0 rescue ?        00:00:00 kblockd
S     0    27     2  0  60 -20     0     0 rescue ?        00:00:00 md
S     0    28     2  0  60 -20     0     0 rescue ?        00:00:00 edac-poller
S     0    29     2  0  60 -20     0     0 rescue ?        00:00:00 watchdogd
S     0    36     2  0  80   0     0     0 kswapd ?        00:00:00 kswapd0
S     0    37     2  0  85   5     0     0 ksm_sc ?        00:00:00 ksmd
S     0    38     2  0  99  19     0     0 khugep ?        00:00:01 khugepaged
S     0    39     2  0  60 -20     0     0 rescue ?        00:00:00 crypto
...

使用BSD语法查看系统上的每个进程:

[root@VM-8-5-centos ~]# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     3:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    2 ?        S      0:00 [kthreadd]
    4 ?        S<     0:00 [kworker/0:0H]
    6 ?        S      0:24 [ksoftirqd/0]
    7 ?        S      0:09 [migration/0]
    8 ?        S      0:00 [rcu_bh]
    9 ?        S      5:55 [rcu_sched]
   10 ?        S<     0:00 [lru-add-drain]
   11 ?        S      0:03 [watchdog/0]
   12 ?        S      0:03 [watchdog/1]
   13 ?        S      0:09 [migration/1]
   14 ?        S      0:20 [ksoftirqd/1]
   16 ?        S<     0:00 [kworker/1:0H]
   18 ?        S      0:00 [kdevtmpfs]
   19 ?        S<     0:00 [netns]
   20 ?        S      0:00 [khungtaskd]
   21 ?        S<     0:00 [writeback]
   22 ?        S<     0:00 [kintegrityd]
   23 ?        S<     0:00 [bioset]
   24 ?        S<     0:00 [bioset]
   25 ?        S<     0:00 [bioset]
   26 ?        S<     0:00 [kblockd]
   27 ?        S<     0:00 [md]
   28 ?        S<     0:00 [edac-poller]
   29 ?        S<     0:00 [watchdogd]
   36 ?        S      0:00 [kswapd0]
   37 ?        SN     0:00 [ksmd]
   38 ?        SN     0:01 [khugepaged]
   39 ?        S<     0:00 [crypto]
   47 ?        S<     0:00 [kthrotld]
   49 ?        S<     0:00 [kmpath_rdacd]
   50 ?        S<     0:00 [kaluad]
   51 ?        S<     0:00 [kpsmoused]
   52 ?        S<     0:00 [ipv6_addrconf]
   65 ?        S<     0:00 [deferwq]
  106 ?        S      0:36 [kauditd]
  202 ?        S<     0:00 [iscsi_eh]
  256 ?        S<     0:00 [ata_sff]
  263 ?        S      0:00 [scsi_eh_0]
  264 ?        S<     0:00 [scsi_tmf_0]
  265 ?        S      0:00 [scsi_eh_1]
  266 ?        S<     0:00 [scsi_tmf_1]
  268 ?        S<     0:00 [ttm_swap]
  275 ?        S<     0:04 [kworker/0:1H]
  291 ?        S      0:50 [jbd2/vda1-8]
  292 ?        S<     0:00 [ext4-rsv-conver]
  298 ?        S<     0:01 [kworker/1:1H]
  377 ?        Ss     3:16 /usr/lib/systemd/systemd-journald
  407 ?        Ss     0:00 /usr/sbin/lvmetad -f
  409 ?        Ss     0:00 /usr/lib/systemd/systemd-udevd
  606 ?        S<sl   0:40 /sbin/auditd
  643 ?        Ss     1:17 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-acti
  657 ?        Ss     0:00 /usr/sbin/acpid
  661 ?        Ss     0:02 /usr/bin/lsmd -d
  662 ?        Ss     0:28 /usr/lib/systemd/systemd-logind
  737 ?        S<     0:00 [ib-comp-wq]
  738 ?        S<     0:00 [kworker/u5:0]
  739 ?        S<     0:00 [ib-comp-unb-wq]
  740 ?        S<     0:00 [ib_mcast]
  741 ?        S<     0:00 [ib_nl_sa_wq]
  744 ?        S<     0:00 [mlx5_ib_sigerr_]
  749 ?        S      0:00 pickup -l -t unix -u
  793 ?        S<     0:00 [rdma_cm]
 1128 ?        Ss     0:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-e
 1196 ?        S<Ls   0:00 /sbin/iscsid -f
 1203 ?        Ssl   22:25 /usr/bin/containerd
 1552 ?        Ssl    1:59 /usr/sbin/rsyslogd -n
 1555 ?        Ssl    2:29 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 1597 ?        Ss     0:05 /usr/sbin/crond -n
 1608 ?        Ss     0:00 /usr/sbin/atd -f
 1609 ?        Ss     0:03 /usr/libexec/postfix/master -w
 1623 ?        S      0:00 qmgr -l -t unix -u
 1641 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
 1642 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
 1707 ?        Ss     0:43 /usr/sbin/sshd -D
 1924 ?        Ss     0:01 /usr/sbin/ntpd -u ntp:ntp -g
 1992 ?        S      0:00 [kworker/u4:2]
 2431 ?        Ssl    0:20 /usr/lib/polkit-1/polkitd --no-debug
 2502 ?        Ssl    1:33 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
 2674 ?        Sl     0:08 /usr/local/qcloud/stargate/sgagent -d
 2731 ?        S      0:12 barad_agent
 2737 ?        S      9:35 barad_agent
 2738 ?        Sl    50:27 barad_agent
 2765 ?        Sl     2:22 /usr/local/qcloud/tat_agent/tat_agent
 4264 ?        Sl     0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17
 4270 ?        Sl     0:29 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v
 4288 ?        Ss     0:00 nginx: master process nginx -g daemon off;
 4321 ?        S      0:02 nginx: worker process
 4322 ?        S      0:02 nginx: worker process
 5843 ?        S      0:04 [kworker/u4:1]
 6306 ?        S      0:00 [kworker/1:0]
 7062 ?        S      0:00 [kworker/0:0]
 8005 ?        S      0:00 [kworker/0:2]
 8051 pts/1    R+     0:00 ps ax
 8407 ?        Sl   203:42 /usr/local/qcloud/YunJing/YDEyes/YDService
 8432 ?        Sl     4:17 /usr/local/qcloud/YunJing/YDLive/YDLive
 8651 ?        Sl     3:30 /bin/sh -c sleep 100
11990 ?        R      0:00 [kworker/1:1]
21599 ?        S      0:03 [kworker/0:1]
23891 ?        Ss     0:00 sshd: root@pts/0
23893 ?        Ss     0:00 sshd: root@notty
23895 pts/0    Ss     0:00 -bash
23933 ?        Ss     0:00 /usr/libexec/openssh/sftp-server
24001 ?        Ss     0:00 sshd: root@pts/1
24003 ?        Ss     0:00 sshd: root@notty
24005 pts/1    Ss     0:00 -bash
24039 ?        Ss     0:00 /usr/libexec/openssh/sftp-server
32591 pts/0    S+     0:00 man ps
32601 pts/0    S+     0:00 less -s

[root@VM-8-5-centos ~]# ps -aux
# USER 用户
# PID 进程id
# %CPU CPU使用率
# %MEM 内存使用率
# VSZ 占用的虚拟记忆体大小 
# RSS 占用的记忆体大小
# TTY 终端的次要装置号码 (minor device number of tty)
#
# STAT: 该行程的状态:
# D: 无法中断的休眠状态 (通常 IO 的进程)
# R: 正在执行中
# S: 静止状态
# T: 暂停执行
# Z: 不存在但暂时无法消除
# W: 没有足够的记忆体分页可分配
# <: 高优先序的行程
# N: 低优先序的行程
# L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
#
# START 进程开始时间
# TIME 进程执行时间
# COMMAND 执行的具体命令
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 125648  3584 ?        Ss   Dec05   1:18 /usr/lib/systemd/systemd --switched-root --system --deseriali
root         2  0.0  0.0      0     0 ?        S    Dec05   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   Dec05   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    Dec05   0:31 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    Dec05   0:06 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Dec05   0:00 [rcu_bh]

打印进程树信息:

[root@VM-8-5-centos ~]# ps -ejH
PID  PGID   SID TTY          TIME CMD
 2     0     0 ?        00:00:00 kthreadd
 4     0     0 ?        00:00:00   kworker/0:0H
 6     0     0 ?        00:00:24   ksoftirqd/0
 7     0     0 ?        00:00:09   migration/0
 8     0     0 ?        00:00:00   rcu_bh
 9     0     0 ?        00:05:55   rcu_sched
10     0     0 ?        00:00:00   lru-add-drain
...

[root@VM-8-5-centos ~]# ps axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     2     0     0 ?           -1 S        0   0:00 [kthreadd]
    2     4     0     0 ?           -1 S<       0   0:00  \_ [kworker/0:0H]
    2     6     0     0 ?           -1 S        0   0:24  \_ [ksoftirqd/0]
    2     7     0     0 ?           -1 S        0   0:09  \_ [migration/0]
    2     8     0     0 ?           -1 S        0   0:00  \_ [rcu_bh]
    2     9     0     0 ?           -1 S        0   5:55  \_ [rcu_sched]
    2    10     0     0 ?           -1 S<       0   0:00  \_ [lru-add-drain]
    2    11     0     0 ?           -1 S        0   0:03  \_ [watchdog/0]
    2    12     0     0 ?           -1 S        0   0:03  \_ [watchdog/1]
    2    13     0     0 ?           -1 S        0   0:09  \_ [migration/1]
    2    14     0     0 ?           -1 S        0   0:20  \_ [ksoftirqd/1]
    2    16     0     0 ?           -1 S<       0   0:00  \_ [kworker/1:0H]
    2    18     0     0 ?           -1 S        0   0:00  \_ [kdevtmpfs]
    2    19     0     0 ?           -1 S<       0   0:00  \_ [netns]
    2    20     0     0 ?           -1 S        0   0:00  \_ [khungtaskd]
    2    21     0     0 ?           -1 S<       0   0:00  \_ [writeback]
    2    22     0     0 ?           -1 S<       0   0:00  \_ [kintegrityd]
    2    23     0     0 ?           -1 S<       0   0:00  \_ [bioset]
    2    24     0     0 ?           -1 S<       0   0:00  \_ [bioset]
    2    25     0     0 ?           -1 S<       0   0:00  \_ [bioset]
    2    26     0     0 ?           -1 S<       0   0:00  \_ [kblockd]
    2    27     0     0 ?           -1 S<       0   0:00  \_ [md]
    2    28     0     0 ?           -1 S<       0   0:00  \_ [edac-poller]
    2    29     0     0 ?           -1 S<       0   0:00  \_ [watchdogd]
    2    36     0     0 ?           -1 S        0   0:00  \_ [kswapd0]
    2    37     0     0 ?           -1 SN       0   0:00  \_ [ksmd]
    2    38     0     0 ?           -1 SN       0   0:01  \_ [khugepaged]
    2    39     0     0 ?           -1 S<       0   0:00  \_ [crypto]
    2    47     0     0 ?           -1 S<       0   0:00  \_ [kthrotld]
    2    49     0     0 ?           -1 S<       0   0:00  \_ [kmpath_rdacd]
    2    50     0     0 ?           -1 S<       0   0:00  \_ [kaluad]
    2    51     0     0 ?           -1 S<       0   0:00  \_ [kpsmoused]
    2    52     0     0 ?           -1 S<       0   0:00  \_ [ipv6_addrconf]
    2    65     0     0 ?           -1 S<       0   0:00  \_ [deferwq]
    2   106     0     0 ?           -1 S        0   0:36  \_ [kauditd]
    2   202     0     0 ?           -1 S<       0   0:00  \_ [iscsi_eh]
    2   256     0     0 ?           -1 S<       0   0:00  \_ [ata_sff]
    2   263     0     0 ?           -1 S        0   0:00  \_ [scsi_eh_0]
    2   264     0     0 ?           -1 S<       0   0:00  \_ [scsi_tmf_0]
    2   265     0     0 ?           -1 S        0   0:00  \_ [scsi_eh_1]
    2   266     0     0 ?           -1 S<       0   0:00  \_ [scsi_tmf_1]
    2   268     0     0 ?           -1 S<       0   0:00  \_ [ttm_swap]
    2   275     0     0 ?           -1 S<       0   0:04  \_ [kworker/0:1H]
    2   291     0     0 ?           -1 S        0   0:50  \_ [jbd2/vda1-8]
    2   292     0     0 ?           -1 S<       0   0:00  \_ [ext4-rsv-conver]
    2   298     0     0 ?           -1 S<       0   0:01  \_ [kworker/1:1H]
    2   737     0     0 ?           -1 S<       0   0:00  \_ [ib-comp-wq]
    2   738     0     0 ?           -1 S<       0   0:00  \_ [kworker/u5:0]
    2   739     0     0 ?           -1 S<       0   0:00  \_ [ib-comp-unb-wq]
    2   740     0     0 ?           -1 S<       0   0:00  \_ [ib_mcast]
    2   741     0     0 ?           -1 S<       0   0:00  \_ [ib_nl_sa_wq]
    2   744     0     0 ?           -1 S<       0   0:00  \_ [mlx5_ib_sigerr_]
    2   793     0     0 ?           -1 S<       0   0:00  \_ [rdma_cm]
    2  5843     0     0 ?           -1 S        0   0:04  \_ [kworker/u4:1]
    2  1992     0     0 ?           -1 S        0   0:00  \_ [kworker/u4:2]
    2 21599     0     0 ?           -1 S        0   0:03  \_ [kworker/0:1]
    2  7062     0     0 ?           -1 S        0   0:00  \_ [kworker/0:0]
    2  8005     0     0 ?           -1 S        0   0:00  \_ [kworker/0:2]
    2 11990     0     0 ?           -1 S        0   0:00  \_ [kworker/1:1]
    2  6306     0     0 ?           -1 S        0   0:00  \_ [kworker/1:0]
    0     1     1     1 ?           -1 Ss       0   3:01 /usr/lib/systemd/systemd --switched-root --system --de
    1   377   377   377 ?           -1 Ss       0   3:16 /usr/lib/systemd/systemd-journald
    1   407   407   407 ?           -1 Ss       0   0:00 /usr/sbin/lvmetad -f
    1   409   409   409 ?           -1 Ss       0   0:00 /usr/lib/systemd/systemd-udevd
    1   606   606   606 ?           -1 S<sl     0   0:40 /sbin/auditd
    1   643   643   643 ?           -1 Ss      81   1:17 /usr/bin/dbus-daemon --system --address=systemd: --nof
    1   657   657   657 ?           -1 Ss       0   0:00 /usr/sbin/acpid
    1   661   661   661 ?           -1 Ss     998   0:02 /usr/bin/lsmd -d
    1   662   662   662 ?           -1 Ss       0   0:28 /usr/lib/systemd/systemd-logind
    1  1128  1128  1128 ?           -1 Ss       0   0:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0
    1  1196  1196  1196 ?           -1 S<Ls     0   0:00 /sbin/iscsid -f
    1  1203  1203  1203 ?           -1 Ssl      0  22:25 /usr/bin/containerd
 1203  4270  4270  1203 ?           -1 Sl       0   0:29  \_ containerd-shim -namespace moby -workdir /var/lib/
 4270  4288  4288  4288 ?           -1 Ss       0   0:00      \_ nginx: master process nginx -g daemon off;
 4288  4321  4288  4288 ?           -1 S      101   0:02          \_ nginx: worker process
 4288  4322  4288  4288 ?           -1 S      101   0:02          \_ nginx: worker process
...

获取线程信息:

[root@VM-8-5-centos ~]# ps -eLf
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1  2023 ?        00:03:01 /usr/lib/systemd/systemd --switched-root --system --
root         2     0     2  0    1  2023 ?        00:00:00 [kthreadd]
root         4     2     4  0    1  2023 ?        00:00:00 [kworker/0:0H]
root         6     2     6  0    1  2023 ?        00:00:24 [ksoftirqd/0]
root         7     2     7  0    1  2023 ?        00:00:09 [migration/0]
root         8     2     8  0    1  2023 ?        00:00:00 [rcu_bh]
root         9     2     9  0    1  2023 ?        00:05:55 [rcu_sched]
root        10     2    10  0    1  2023 ?        00:00:00 [lru-add-drain]
...

[root@VM-8-5-centos ~]# ps axms
  UID   PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
    0     1 0000000000000000                -                -                - -    ?          3:01 /usr/lib/s
    0     - 0000000000000000 7be3c0fe28014a03 0000000000001000 00000001800004ec Ss   -          3:01 -
    0     2 0000000000000000                -                -                - -    ?          0:00 [kthreadd]
    0     - 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    -          0:00 -
    0     4 0000000000000000                -                -                - -    ?          0:00 [kworker/0
    0     - 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S<   -          0:00 -
    0     6 0000000000000000                -                -                - -    ?          0:24 [ksoftirqd
    0     - 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    -          0:24 -
    0     7 0000000000000000                -                -                - -    ?          0:09 [migration
    0     - 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    -          0:09 -
    0     8 0000000000000000                -                -                - -    ?          0:00 [rcu_bh]
    0     - 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    -          0:00 -
...

获取安全信息:

[root@VM-8-5-centos ~]# ps -eo euser,ruser,suser,fuser,f,comm,label
EUSER    RUSER    SUSER    FUSER    F COMMAND         LABEL
root     root     root     root     4 systemd         -
root     root     root     root     1 kthreadd        -
root     root     root     root     1 kworker/0:0H    -
root     root     root     root     1 ksoftirqd/0     -
root     root     root     root     1 migration/0     -
root     root     root     root     1 rcu_bh          -
root     root     root     root     1 rcu_sched       -
root     root     root     root     1 lru-add-drain   -
...

[root@VM-8-5-centos ~]# ps axZ
LABEL                             PID TTY      STAT   TIME COMMAND
-                                   1 ?        Ss     3:01 /usr/lib/systemd/systemd --switched-root --system --
-                                   2 ?        S      0:00 [kthreadd]
-                                   4 ?        S<     0:00 [kworker/0:0H]
-                                   6 ?        S      0:24 [ksoftirqd/0]
-                                   7 ?        S      0:09 [migration/0]
-                                   8 ?        S      0:00 [rcu_bh]
-                                   9 ?        S      5:55 [rcu_sched]
-                                  10 ?        S<     0:00 [lru-add-drain]
...

[root@VM-8-5-centos ~]# ps -eM
LABEL                             PID TTY          TIME CMD
-                                   1 ?        00:03:01 systemd
-                                   2 ?        00:00:00 kthreadd
-                                   4 ?        00:00:00 kworker/0:0H
-                                   6 ?        00:00:24 ksoftirqd/0
-                                   7 ?        00:00:09 migration/0
-                                   8 ?        00:00:00 rcu_bh
-                                   9 ?        00:05:55 rcu_sched
-                                  10 ?        00:00:00 lru-add-drain
...

以用户格式查看所有以root(real&effective ID)运行的进程:

[root@VM-8-5-centos ~]# ps -U root -u root u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 125660  3732 ?        Ss    2023   3:01 /usr/lib/systemd/systemd --switched-root --sys
root         2  0.0  0.0      0     0 ?        S     2023   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<    2023   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S     2023   0:24 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S     2023   0:09 [migration/0]
root         8  0.0  0.0      0     0 ?        S     2023   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S     2023   5:55 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<    2023   0:00 [lru-add-drain]

使用自定义格式查看进程:

[root@VM-8-5-centos ~]# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
PID   TID CLS RTPRIO  NI PRI PSR %CPU STAT WCHAN          COMMAND
 1     1 TS       -   0  19   1  0.0 Ss   ep_poll        systemd
 2     2 TS       -   0  19   1  0.0 S    kthreadd       kthreadd
 4     4 TS       - -20  39   0  0.0 S<   worker_thread  kworker/0:0H
 6     6 TS       -   0  19   0  0.0 S    smpboot_thread ksoftirqd/0
 7     7 FF      99   - 139   0  0.0 S    smpboot_thread migration/0
 8     8 TS       -   0  19   0  0.0 S    rcu_gp_kthread rcu_bh
 9     9 TS       -   0  19   1  0.0 S    rcu_gp_kthread rcu_sched
10    10 TS       - -20  39   0  0.0 S<   rescuer_thread lru-add-drain
...

[root@VM-8-5-centos ~]# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
STAT  EUID  RUID TT       TPGID  SESS  PGRP  PPID   PID %CPU COMMAND
Ss       0     0 ?           -1     1     1     0     1  0.0 systemd
S        0     0 ?           -1     0     0     0     2  0.0 kthreadd
S<       0     0 ?           -1     0     0     2     4  0.0 kworker/0:0H
S        0     0 ?           -1     0     0     2     6  0.0 ksoftirqd/0
S        0     0 ?           -1     0     0     2     7  0.0 migration/0
S        0     0 ?           -1     0     0     2     8  0.0 rcu_bh
S        0     0 ?           -1     0     0     2     9  0.0 rcu_sched
S<       0     0 ?           -1     0     0     2    10  0.0 lru-add-drain
...

[root@VM-8-5-centos ~]# ps -Ao pid,tt,user,fname,tmout,f,wchan
PID TT       USER     COMMAND  TMOUT F WCHAN
 1 ?        root     systemd      - 4 ep_poll
 2 ?        root     kthreadd     - 1 kthreadd
 4 ?        root     kworker/     - 1 worker_thread
 6 ?        root     ksoftirq     - 1 smpboot_thread_fn
 7 ?        root     migratio     - 1 smpboot_thread_fn
 8 ?        root     rcu_bh       - 1 rcu_gp_kthread
 9 ?        root     rcu_sche     - 1 rcu_gp_kthread
10 ?        root     lru-add-     - 1 rescuer_thread
...

仅打印进程PID为4的进程的进程名:

[root@VM-8-5-centos ~]# ps -q 4 -o comm=
kworker/0:0H

通过子进程的进程号查询一个进程的父进程ID:

[root@VM-8-5-centos etc]# ps -o pid,ppid 1
  PID  PPID
    1     0

# 实时显示当前所有任务的资源占用情况-top 常用

top是一个在Linux系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。

# 基础语法

[root@VM-8-5-centos ~]# top -hv
  procps-ng version 3.3.10
Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

# 常见选项

选项 说明
-hv,-h,-v 查看top指令的使用说明。
-b 以批处理(batch)模式运行,持续将结果输出到控制台上。同时会显示所有进程信息。(如top指令执行一分钟,就可以在控制台上看到六次输出结果。)
-c 显示完整的命令行而不截断。
-H 在进程信息中显示线程详细信息。
-i 不显示闲置(idle)或无用的进程。常用于进程过滤。
-O 显示top指令可能会输出的所有列的列名。
-S 累计显示进程的 CPU 使用时间。
-s 安全模式操作。
-d -d secs: 指定top命令的刷新时间间隔,单位为秒。
-n -n maxs: 指定top命令运行的次数后自动退出。
-u,-U -u username: 仅显示指定用户名的进程信息。
-p -p pid1,pid2,pid3: 仅显示指定进程ID的信息。
-o -o field: 按照某个资源字段进行排序,如top -o %MEM是按照内存使用情况排序。
-w -w nums:指定top指令显示出来的列的宽度,具体效果可以参考下面的常用示例。

# 常见示例

不加任何参数,直接使用top指令:

[root@VM-8-5-centos ~]# top
# top-程序名 17:02:11 当前时间 up:机器正常运行时间(13天) 2 users:2个用户 load average:平均负载(指进程切换时间)
top - 17:02:11 up 13 days,  6:33,  2 users,  load average: 0.00, 0.02, 0.06
# 当前运行的进程和线程数目。                                  僵尸进程
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
# CPU使用率 业务进程使用cpu 系统进程使用cpu 友好进程占用 空闲cpu
%Cpu(s):  0.5 us,  0.7 sy,  0.0 ni, 98.3 id,  0.5 wa,  0.0 hi,  0.0 si,  0.0 st
# 内存
KiB Mem :  2046508 total,   108052 free,   592956 used,  1345500 buff/cache
# 内存交换区
KiB Swap:  1049596 total,  1010172 free,    39424 used.  1256324 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 2828 root      20   0 1035860  77488  11840 S   1.3  3.8 186:18.32 YDService
21111 root      20   0  757320  17548   2684 S   0.7  0.9  82:07.56 barad_agent
 1263 root      20   0  113004   4328   3296 S   0.3  0.2   0:47.53 sshd
 2723 root      20   0 3235832 207288  10092 S   0.3 10.1  12:31.22 java
    1 root      20   0  125648   3584   2344 S   0.0  0.2   1:18.40 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.74 kthreadd
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0.0  0.0   0:31.40 ksoftirqd/0
    7 root      rt   0       0      0      0 S   0.0  0.0   0:06.16 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.65 rcu_bh
    9 root      20   0       0      0      0 S   0.0  0.0   6:30.91 rcu_sched
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain

增加-b参数,使用top指令:

# -b 指令会持续将top的输出结果显示在控制台上。
[root@VM-8-5-centos ~]# top -b
top - 09:25:20 up 12 days, 11:18,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1881864 total,   996988 free,   329248 used,   555628 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1384932 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0  125660   3732   2228 S   0.0  0.2   2:47.48 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.48 kthreadd
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0.0  0.0   0:23.23 ksoftirqd/0
    7 root      rt   0       0      0      0 S   0.0  0.0   0:09.46 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S   0.0  0.0   5:36.04 rcu_sched
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
   11 root      rt   0       0      0      0 S   0.0  0.0   0:03.47 watchdog/0
   12 root      rt   0       0      0      0 S   0.0  0.0   0:03.15 watchdog/1
   13 root      rt   0       0      0      0 S   0.0  0.0   0:09.02 migration/1
   14 root      20   0       0      0      0 S   0.0  0.0   0:19.86 ksoftirqd/1
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
   18 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns
   20 root      20   0       0      0      0 S   0.0  0.0   0:00.27 khungtaskd
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd
   27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md
   28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 edac-poller
   29 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 watchdogd
   36 root      20   0       0      0      0 S   0.0  0.0   0:00.35 kswapd0
   37 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
   38 root      39  19       0      0      0 S   0.0  0.0   0:01.52 khugepaged
   39 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 crypto
   47 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kthrotld
   49 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kmpath_rdacd
   50 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kaluad
   51 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kpsmoused
   52 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ipv6_addrconf
   65 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 deferwq
  106 root      20   0       0      0      0 S   0.0  0.0   0:34.40 kauditd
  202 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 iscsi_eh
  256 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ata_sff
  263 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_0
  264 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_0
  265 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_1
  266 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_1
  268 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ttm_swap
  275 root       0 -20       0      0      0 S   0.0  0.0   0:03.80 kworker/0:1H
  291 root      20   0       0      0      0 S   0.0  0.0   0:47.30 jbd2/vda1-8
  292 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ext4-rsv-conver
  298 root       0 -20       0      0      0 S   0.0  0.0   0:01.12 kworker/1:1H
  377 root      20   0  170016 112728 112400 S   0.0  6.0   3:02.89 systemd-journal
  407 root      20   0  116644   1116    808 S   0.0  0.1   0:00.00 lvmetad
  409 root      20   0   44920   1876   1332 S   0.0  0.1   0:00.04 systemd-udevd
  606 root      16  -4   55532   1052    604 S   0.0  0.1   0:37.23 auditd
  643 dbus      20   0   60332   2588   1860 S   0.0  0.1   1:11.60 dbus-daemon
  657 root      20   0    4388    544    408 S   0.0  0.0   0:00.00 acpid
  661 libstor+  20   0    8580    816    668 S   0.0  0.0   0:02.60 lsmd
  662 root      20   0   26516   1840   1464 S   0.0  0.1   0:26.23 systemd-logind
  737 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib-comp-wq
  738 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/u5:0
  739 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib-comp-unb-wq
  740 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib_mcast
  741 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib_nl_sa_wq
  744 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 mlx5_ib_sigerr_
  793 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 rdma_cm
 1128 root      20   0  102904   2384    308 S   0.0  0.1   0:00.00 dhclient
 1196 root      10 -10   57028   7776   6384 S   0.0  0.4   0:00.00 iscsid
 1203 root      20   0  585956  45304  16144 S   0.0  2.4  20:35.56 containerd
 1552 root      20   0  624612  43184  41476 S   0.0  2.3   1:50.64 rsyslogd
 1555 root      20   0  667724  88548  29308 S   0.0  4.7   2:20.31 dockerd
 1597 root      20   0  126416   1628    980 S   0.0  0.1   0:04.89 crond
 1608 root      20   0   25908    944    740 S   0.0  0.1   0:00.00 atd
 1609 root      20   0   91788   2260   1216 S   0.0  0.1   0:03.46 master
 1623 postfix   20   0   91960   4108   3096 S   0.0  0.2   0:00.61 qmgr
 1641 root      20   0  110208    856    724 S   0.0  0.0   0:00.00 agetty
 1642 root      20   0  110208    852    728 S   0.0  0.0   0:00.00 agetty
 1707 root      20   0  112924   4308   3288 S   0.0  0.2   0:40.09 sshd
 1763 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kworker/0:2
 1779 root      20   0  157120   6112   4644 S   0.0  0.3   0:00.13 sshd
 1786 root      20   0  156788   5844   4512 S   0.0  0.3   0:00.02 sshd
 1790 root      20   0  116204   2768   1688 S   0.0  0.1   0:00.06 bash
 1828 root      20   0   72252   2860   2096 S   0.0  0.2   0:00.00 sftp-server
 1924 ntp       20   0   32044   2180   1548 S   0.0  0.1   0:01.36 ntpd
 1992 root      20   0       0      0      0 S   0.0  0.0   0:00.86 kworker/u4:2
 2431 polkitd   20   0  614332  14200   4712 S   0.0  0.8   0:19.08 polkitd
 2502 root      20   0  574308  17428   6108 S   0.0  0.9   1:26.01 tuned
 2674 root      20   0   97512   1824   1384 S   0.0  0.1   0:07.54 sgagent
 2731 root      20   0  155368   7556   1052 S   0.0  0.4   0:11.57 barad_agent
 2737 root      20   0  158564   9264   1896 S   0.0  0.5   8:49.65 barad_agent
 2738 root      20   0  609236  11608   2372 S   0.0  0.6  46:18.61 barad_agent
 2765 root      20   0   29416   6536   3800 S   0.0  0.3   2:12.00 tat_agent
 2993 root      20   0       0      0      0 S   0.0  0.0   0:00.12 kworker/1:1
 3001 root      20   0       0      0      0 S   0.0  0.0   0:00.13 kworker/0:1
 4264 root      20   0  217040   8876   1564 S   0.0  0.5   0:00.44 docker-proxy
 4270 root      20   0  108712   9160   2924 S   0.0  0.5   0:27.38 containerd-shim
 4288 root      20   0   11360   4508   3276 S   0.0  0.2   0:00.01 nginx
 4321 101       20   0   12252   2872   1004 S   0.0  0.2   0:02.34 nginx
 4322 101       20   0   12252   2800    932 S   0.0  0.1   0:02.26 nginx
 5767 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0
 5843 root      20   0       0      0      0 S   0.0  0.0   0:02.84 kworker/u4:1
 6672 root      20   0       0      0      0 S   0.0  0.0   0:01.94 kworker/0:0
 7671 root      20   0  112924   4244   3220 S   0.0  0.2   0:00.00 sshd
 7672 sshd      20   0  112924   2224   1172 S   0.0  0.1   0:00.00 sshd
 8076 root      20   0  154600   5068   3792 S   0.0  0.3   0:00.00 sshd
 8077 sshd      20   0  112924   2224   1172 S   0.0  0.1   0:00.00 sshd
 8078 root      20   0  112924   4432   3388 S   0.0  0.2   0:00.00 sshd
 8079 sshd      20   0  112924   2228   1172 S   0.0  0.1   0:00.00 sshd
 8081 root      20   0  112924   4424   3380 S   0.0  0.2   0:00.00 sshd
 8082 sshd      20   0  112924   2224   1168 S   0.0  0.1   0:00.00 sshd
 8089 root      20   0  164080   2144   1564 R   0.0  0.1   0:00.00 top
 8407 root      20   0  978364  69056  18192 S   0.0  3.7 187:34.92 YDService
 8432 root      20   0  914840  18760   4356 S   0.0  1.0   3:58.11 YDLive
 8651 root      20   0 1157576  17936   3072 S   0.0  1.0   3:15.48 sh
30385 postfix   20   0   91892   4096   3084 S   0.0  0.2   0:00.00 pickup

top - 09:25:23 up 12 days, 11:18,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 107 total,   2 running, 105 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.5 sy,  0.0 ni, 98.8 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1881864 total,  1000280 free,   325928 used,   555656 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1388256 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8407 root      20   0  978364  69056  18192 S   1.7  3.7 187:34.97 YDService
    9 root      20   0       0      0      0 S   0.3  0.0   5:36.05 rcu_sched
  377 root      20   0  170016 112744 112416 S   0.3  6.0   3:02.90 systemd-journal
 2738 root      20   0  609236  11608   2372 S   0.3  0.6  46:18.62 barad_agent
    1 root      20   0  125660   3732   2228 S   0.0  0.2   2:47.48 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.48 kthreadd
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0.0  0.0   0:23.23 ksoftirqd/0
    7 root      rt   0       0      0      0 S   0.0  0.0   0:09.46 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
   11 root      rt   0       0      0      0 S   0.0  0.0   0:03.47 watchdog/0
   12 root      rt   0       0      0      0 S   0.0  0.0   0:03.15 watchdog/1
   13 root      rt   0       0      0      0 S   0.0  0.0   0:09.02 migration/1
   14 root      20   0       0      0      0 S   0.0  0.0   0:19.86 ksoftirqd/1
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
   18 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns
   20 root      20   0       0      0      0 S   0.0  0.0   0:00.27 khungtaskd
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd
   27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md
   28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 edac-poller
   29 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 watchdogd
   36 root      20   0       0      0      0 S   0.0  0.0   0:00.35 kswapd0
   37 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
   38 root      39  19       0      0      0 S   0.0  0.0   0:01.52 khugepaged
   39 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 crypto
   47 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kthrotld
   49 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kmpath_rdacd
   50 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kaluad
   51 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kpsmoused
   52 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ipv6_addrconf
   65 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 deferwq
  106 root      20   0       0      0      0 S   0.0  0.0   0:34.40 kauditd
  202 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 iscsi_eh
  256 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ata_sff
  263 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_0
  264 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_0
  265 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_1
  266 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_1
  268 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ttm_swap
  275 root       0 -20       0      0      0 S   0.0  0.0   0:03.80 kworker/0:1H
  291 root      20   0       0      0      0 S   0.0  0.0   0:47.30 jbd2/vda1-8
  292 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ext4-rsv-conver
  298 root       0 -20       0      0      0 S   0.0  0.0   0:01.12 kworker/1:1H
  407 root      20   0  116644   1116    808 S   0.0  0.1   0:00.00 lvmetad
  409 root      20   0   44920   1876   1332 S   0.0  0.1   0:00.04 systemd-udevd
  606 root      16  -4   55532   1052    604 S   0.0  0.1   0:37.23 auditd
  643 dbus      20   0   60332   2588   1860 S   0.0  0.1   1:11.60 dbus-daemon
  657 root      20   0    4388    544    408 S   0.0  0.0   0:00.00 acpid
  661 libstor+  20   0    8580    816    668 S   0.0  0.0   0:02.60 lsmd
  662 root      20   0   26516   1840   1464 S   0.0  0.1   0:26.23 systemd-logind
  737 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib-comp-wq
  738 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/u5:0
  739 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib-comp-unb-wq
  740 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib_mcast
  741 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ib_nl_sa_wq
  744 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 mlx5_ib_sigerr_
  793 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 rdma_cm
 1128 root      20   0  102904   2384    308 S   0.0  0.1   0:00.00 dhclient
 1196 root      10 -10   57028   7776   6384 S   0.0  0.4   0:00.00 iscsid
 1203 root      20   0  585956  45304  16144 S   0.0  2.4  20:35.56 containerd
 1552 root      20   0  624612  43204  41496 S   0.0  2.3   1:50.64 rsyslogd
 1555 root      20   0  667724  88548  29308 S   0.0  4.7   2:20.31 dockerd
 1597 root      20   0  126416   1628    980 S   0.0  0.1   0:04.89 crond
 1608 root      20   0   25908    944    740 S   0.0  0.1   0:00.00 atd
 1609 root      20   0   91788   2260   1216 S   0.0  0.1   0:03.46 master
 1623 postfix   20   0   91960   4108   3096 S   0.0  0.2   0:00.61 qmgr
 1641 root      20   0  110208    856    724 S   0.0  0.0   0:00.00 agetty
 1642 root      20   0  110208    852    728 S   0.0  0.0   0:00.00 agetty
 1707 root      20   0  112924   4308   3288 S   0.0  0.2   0:40.09 sshd
 1763 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kworker/0:2
 1779 root      20   0  157120   6112   4644 S   0.0  0.3   0:00.13 sshd
 1786 root      20   0  156788   5844   4512 S   0.0  0.3   0:00.02 sshd
 1790 root      20   0  116204   2768   1688 S   0.0  0.1   0:00.06 bash
 1828 root      20   0   72252   2860   2096 S   0.0  0.2   0:00.00 sftp-server
 1924 ntp       20   0   32044   2180   1548 S   0.0  0.1   0:01.36 ntpd
 1992 root      20   0       0      0      0 S   0.0  0.0   0:00.86 kworker/u4:2
 2431 polkitd   20   0  614332  14200   4712 S   0.0  0.8   0:19.08 polkitd
 2502 root      20   0  574308  17428   6108 S   0.0  0.9   1:26.01 tuned
 2674 root      20   0   97512   1824   1384 S   0.0  0.1   0:07.54 sgagent
 2731 root      20   0  155368   7556   1052 S   0.0  0.4   0:11.57 barad_agent
 2737 root      20   0  158564   9264   1896 S   0.0  0.5   8:49.65 barad_agent
 2765 root      20   0   29416   6536   3800 S   0.0  0.3   2:12.00 tat_agent
 2993 root      20   0       0      0      0 S   0.0  0.0   0:00.12 kworker/1:1
 3001 root      20   0       0      0      0 R   0.0  0.0   0:00.13 kworker/0:1
 4264 root      20   0  217040   8876   1564 S   0.0  0.5   0:00.44 docker-proxy
 4270 root      20   0  108712   9160   2924 S   0.0  0.5   0:27.38 containerd-shim
 4288 root      20   0   11360   4508   3276 S   0.0  0.2   0:00.01 nginx
 4321 101       20   0   12252   2872   1004 S   0.0  0.2   0:02.34 nginx
 4322 101       20   0   12252   2800    932 S   0.0  0.1   0:02.26 nginx
 5767 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0
 5843 root      20   0       0      0      0 S   0.0  0.0   0:02.84 kworker/u4:1
 6672 root      20   0       0      0      0 S   0.0  0.0   0:01.94 kworker/0:0
 7671 root      20   0  112924   4244   3220 S   0.0  0.2   0:00.00 sshd
 7672 sshd      20   0  112924   2224   1172 S   0.0  0.1   0:00.00 sshd
 8089 root      20   0  164084   2196   1580 R   0.0  0.1   0:00.00 top
 8098 root      20   0  154600   5068   3792 S   0.0  0.3   0:00.00 sshd
 8099 sshd      20   0  112924   2224   1172 S   0.0  0.1   0:00.00 sshd
 8432 root      20   0  914840  18760   4356 S   0.0  1.0   3:58.11 YDLive
 8651 root      20   0 1157576  17936   3072 S   0.0  1.0   3:15.48 sh
30385 postfix   20   0   91892   4096   3084 S   0.0  0.2   0:00.00 pickup

增加-c参数,使用top指令:

# 重点关注COMMAND列,这一列会被完整显示出来
[root@VM-8-5-centos ~]# top -c
top - 09:29:45 up 12 days, 11:23,  1 user,  load average: 0.04, 0.04, 0.05
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  3.3 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1881864 total,  1001132 free,   323976 used,   556756 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1390208 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 2738 root      20   0  609236  11608   2372 S   6.7  0.6  46:19.39 barad_agent
 8407 root      20   0  978364  68944  18192 S   6.7  3.7 187:38.10 /usr/local/qcloud/YunJing/YDEyes/YDService
    1 root      20   0  125660   3732   2228 S   0.0  0.2   2:47.53 /usr/lib/systemd/systemd --switched-root +
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.48 [kthreadd]
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/0:0H]
    6 root      20   0       0      0      0 S   0.0  0.0   0:23.24 [ksoftirqd/0]
    7 root      rt   0       0      0      0 S   0.0  0.0   0:09.46 [migration/0]
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [rcu_bh]
    9 root      20   0       0      0      0 S   0.0  0.0   5:36.13 [rcu_sched]
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [lru-add-drain]
   11 root      rt   0       0      0      0 S   0.0  0.0   0:03.48 [watchdog/0]
   12 root      rt   0       0      0      0 S   0.0  0.0   0:03.15 [watchdog/1]
   13 root      rt   0       0      0      0 S   0.0  0.0   0:09.02 [migration/1]
   14 root      20   0       0      0      0 S   0.0  0.0   0:19.86 [ksoftirqd/1]
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/1:0H]
   18 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [kdevtmpfs]
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [netns]
   20 root      20   0       0      0      0 S   0.0  0.0   0:00.27 [khungtaskd]
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [writeback]
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kintegrityd]
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [bioset]
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [bioset]
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [bioset]
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kblockd]
   27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [md]
   28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [edac-poller]

增加-i参数,使用top指令:

[root@VM-8-5-centos ~]# top -i
top - 09:36:29 up 12 days, 11:29,  1 user,  load average: 0.05, 0.04, 0.05
Tasks: 103 total,   1 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1881864 total,   997536 free,   321980 used,   562348 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1392192 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8407 root      20   0  978364  68960  18192 S   1.3  3.7 187:42.82 YDService
 1203 root      20   0  585956  45304  16144 S   0.3  2.4  20:36.39 containerd

增加-O参数,使用top指令:

[root@VM-8-5-centos ~]# top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
SID
PR
NI
nTH
P
%CPU
TIME
TIME+
%MEM
VIRT
SWAP
RES
CODE
DATA
SHR
nMaj
nMin
nDRT
S
COMMAND
WCHAN
Flags
CGROUPS
SUPGIDS
SUPGRPS
TGID
ENVIRON
vMj
vMn
USED
nsIPC
nsMNT
nsNET
nsPID
nsUSER
nsUTS

增加-w参数,使用top指令:

[root@VM-8-5-centos ~]# top -w 50
top - 09:49:21 up 12 days, 11:42,  1 user,  load a
Tasks: 104 total,   1 running, 103 sleeping,   0 s
%Cpu(s):  3.1 us,  3.1 sy,  0.0 ni, 93.8 id,  0.0
KiB Mem :  1881864 total,   994792 free,   322948
KiB Swap:        0 total,        0 free,        0

  PID USER      PR  NI    VIRT    RES    SHR S
 8407 root      20   0  978364  68920  18192 S
    1 root      20   0  125660   3732   2228 S
    2 root      20   0       0      0      0 S
    4 root       0 -20       0      0      0 S
    6 root      20   0       0      0      0 S
    7 root      rt   0       0      0      0 S
    8 root      20   0       0      0      0 S
    9 root      20   0       0      0      0 S
   10 root       0 -20       0      0      0 S
   11 root      rt   0       0      0      0 S
   12 root      rt   0       0      0      0 S
   13 root      rt   0       0      0      0 S
   14 root      20   0       0      0      0 S
   16 root       0 -20       0      0      0 S
   18 root      20   0       0      0      0 S
   19 root       0 -20       0      0      0 S
   20 root      20   0       0      0      0 S
   21 root       0 -20       0      0      0 S
   22 root       0 -20       0      0      0 S
   23 root       0 -20       0      0      0 S
   24 root       0 -20       0      0      0 S
   25 root       0 -20       0      0      0 S
   26 root       0 -20       0      0      0 S
   27 root       0 -20       0      0      0 S
   28 root       0 -20       0      0      0 S
   29 root       0 -20       0      0      0 S

# 结束进程-kill 常用

kill命令用于删除执行中的程序或工作。

# 基础语法

kill [-n 信号量] pid 

# 信号量

信号量 说明
1 (HUP) 重新加载进程。
9 (KILL) 杀死一个进程。
15 (TERM) 正常停止一个进程。kill如果不加任何的信号量参数,默认就用的15,表示优雅退出,退出前进程会做一些准备工作,然后退出。

# 常见示例

直接杀死一个进程:

[root@VM-8-5-centos back]# ps aux | grep java
root      2310  0.0  0.0 112812   972 pts/0    S+   17:35   0:00 grep --color=auto java
root     31097  1.1  7.9 3232616 162408 pts/0  Sl   17:21   0:09 java -jar movie-0.0.1-SNAPSHOT.jar
[root@VM-8-5-centos back]# kill 31097
[root@VM-8-5-centos back]# ps aux | grep java
root      2367  0.0  0.0 112812   972 pts/0    S+   17:36   0:00 grep --color=auto java
[1]+  Exit 143                java -jar movie-0.0.1-SNAPSHOT.jar
[root@VM-8-5-centos back]# ps aux | grep java
[root@VM-8-5-centos back]#

强制杀死一个进程:

[root@VM-8-5-centos back]# ps aux | grep java
root      2585  118  7.8 3232616 161544 pts/0  Sl   17:37   0:08 java -jar movie-0.0.1-SNAPSHOT.jar
root      2684  0.0  0.0 112812   972 pts/0    S+   17:37   0:00 grep --color=auto java
[root@VM-8-5-centos back]# kill -9 2585
[root@VM-8-5-centos back]# ps aux | grep java
root      2730  0.0  0.0 112812   972 pts/0    S+   17:37   0:00 grep --color=auto java

# 网络相关指令

与网络有关的指令有ping,traceroute,telnet,netstat,wget,ssh,scp指令。

# 向网络主机发送特殊数据包-ping

Ping是一种基于Internet控制消息协议(ICMP)的工具,用于测试主机之间的连接。Ping命令向目标主机发送一个ICMP回显请求,目标主机收到请求后会发送回一个ICMP回显应答,从而告诉发起请求的主机连接是通畅的。Ping命令可以用于测试主机是否在线,以及网络是否通畅。

# 基础语法

ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

# 常见选项

选项 说明
-d 使用Socket的SO_DEBUG功能。
-c <完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络接口送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。

# 常见示例

验证某网站是否可以ping通。

[root@VM-8-5-centos ~]# ping www.linuxcommand.org
PING vhost2.sourceforge.net (204.68.111.101) 56(84) bytes of data.
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=1 ttl=42 time=171 ms
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=2 ttl=42 time=171 ms
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=3 ttl=42 time=172 ms
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=4 ttl=42 time=173 ms
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=5 ttl=42 time=171 ms
64 bytes from 204.68.111.101 (204.68.111.101): icmp_seq=6 ttl=42 time=171 ms
防火墙策略禁止ping的访问

有的网络安全机制中,防火墙会禁止ping的访问。它禁止了外部计算机通过ping命令发送ICMP请求到内部网络中的设备。这种安全机制可以帮助保护内部网络免受外部威胁。防火墙会检查所有发送到内部网络的数据包,并根据规则对其进行过滤。禁止ping的规则会拒绝所有ICMP请求包。

  • 优点
    1.防止外部黑客扫描内部网络,从而提升网络的安全性。

  • 缺点
    1.限制了远程诊断的能力,可能会影响网络故障排除。

  • Linux中如何禁止ping访问
    1.使用root登录Linux主机。
    2.编辑etc/sysctl.conf文件。
    3.添加行net.ipv4.icmp_echo_ignore_all =1 ,保存并退出。
    4.使用sysctl -p /etc/sysctl.conf指令重启网络服务。

# 跟踪网络数据包的传输路径-traceroute

traceroute命令用来显示数据包到达目标主机所经过的路径(路由器)情况。

# 基础语法

traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

# 常见选项

选项 说明
-d 使用Socket的SO_DEBUG功能。
-f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g<网关> 设置来源路由网关,最多可设置8个。
-i<网络界面> 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p<通信端口> 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-v 详细显示指令的执行过程。

# 常见示例

[root@VM-8-5-centos ~]# traceroute slashdot.org
traceroute to slashdot.org (104.18.36.64), 30 hops max, 60 byte packets
 1  11.71.74.225 (11.71.74.225)  0.961 ms 11.71.74.193 (11.71.74.193)  0.884 ms 11.71.74.225 (11.71.74.225)  1.113 ms
 2  11.71.119.234 (11.71.119.234)  0.840 ms 11.71.120.224 (11.71.120.224)  0.752 ms *
 3  * * *
 4  10.162.32.237 (10.162.32.237)  0.919 ms  1.409 ms 10.162.32.241 (10.162.32.241)  1.429 ms
 5  10.162.32.149 (10.162.32.149)  1.120 ms 10.196.93.230 (10.196.93.230)  1.332 ms 10.162.32.149 (10.162.32.149)  1.373 ms
 6  * * *
 7  113.96.5.21 (113.96.5.21)  2.441 ms 113.96.5.9 (113.96.5.9)  1.991 ms 113.108.209.149 (113.108.209.149)  12.357 ms
 8  113.96.5.165 (113.96.5.165)  3.034 ms  3.594 ms  2.361 ms
 9  202.97.93.37 (202.97.93.37)  6.500 ms 202.97.82.62 (202.97.82.62)  3.114 ms 202.97.93.49 (202.97.93.49)  6.431 ms
10  202.97.12.5 (202.97.12.5)  4.916 ms 202.97.12.1 (202.97.12.1)  5.709 ms 202.97.65.61 (202.97.65.61)  4.477 ms
11  202.97.46.182 (202.97.46.182)  166.132 ms  166.019 ms  165.560 ms
12  218.30.54.214 (218.30.54.214)  155.987 ms  155.176 ms  157.355 ms
13  172.70.208.2 (172.70.208.2)  170.366 ms  169.997 ms 172.70.212.2 (172.70.212.2)  167.643 ms
# 可以看到一共经过了14个路由器才访问到www.slashdot.org
14  104.18.36.64 (104.18.36.64)  164.025 ms  164.254 ms  161.149 ms

# 远程登录-telnet

telnet命令用于远端登入。

# 基础语法

telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]

# 常见选项

选项 说明
-a 尝试自动登入远端系统。
-c 不读取用户专属目录里的.telnetrc文件。
-K 不自动登入远端主机。
-r 使用类似rlogin指令的用户界面。
-x 假设主机有支持数据加密的功能,就使用它。

# 常见示例

[root@hkdcl025091 ~]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^CConnection closed by foreign host.

# 检查网络设置及相关统计数据-netstat 常用

利用 netstat 指令可让你得知整个Linux系统的网络情况。

# 基础语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

# 常见选项

选项 说明
-a 显示所有连线中的Socket。
-A<网络类型> 列出该网络类型连线中的相关地址。
-c 持续列出网络状态。
-C 显示路由器配置的快取信息。
-e 显示网络其他相关信息。
-F 显示路由缓存。
-g 显示多重广播功能群组组员名单。
-h 在线帮助。
-i 显示网络界面信息表单。
-l 显示监控中的服务器的Socket。
-M 显示伪装的网络连线。
-n 直接使用IP地址,而不通过域名服务器。
-N 显示网络硬件外围设备的符号连接名称。
-o 显示计时器。
-p 显示正在使用Socket的程序识别码和程序名称。
-r 显示Routing Table。
-s 显示网络工作信息统计表。
-t 显示TCP传输协议的连线状况。
-u 显示UDP传输协议的连线状况。
-v 显示指令执行过程。
-w 显示RAW传输协议的连线状况。

# 常见示例

[root@VM-8-5-centos ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.0.8.5:ddi-tcp-1      112.97.59.43:47347      ESTABLISHED
tcp        0      0 10.0.8.5:36152          169.254.0.138:8186      ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance:secure-cfg-svr ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35669.wai:22258 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      118.193.72.187:48912    ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      hyper2.host:18152       ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      internettl.org:43501    ESTABLISHED
tcp        0    100 10.0.8.5:ssh            144.22.156.150:48546    ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35660.waic:4492 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      xor1.host:apc-necmp     ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      185.78.76.40:44520      ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      112.97.59.43:47346      ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      hyper2.host:48962       ESTABLISHED
tcp        0      0 10.0.8.5:ssh            reverse.gdsz.cncn:59029 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35660.waic:4236 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      94.156.64.113:60166     ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      94.156.64.121:25426     ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      185.78.76.40:44546      ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35669.w:gsidcap ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35660.waic:4626 ESTABLISHED
tcp        0     48 10.0.8.5:ssh            reverse.gdsz.cncn:59028 ESTABLISHED
tcp        0      0 10.0.8.5:37264          169.254.0.55:lsi-bobcat ESTABLISHED
tcp        0      0 10.0.8.5:39990          42.157.129.123:https    TIME_WAIT
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35660.wai:g2tag ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      hyper2.host:31936       ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35669.wai:22030 ESTABLISHED
tcp        0      0 10.0.8.5:39896          169.254.0.55:webcache   TIME_WAIT
tcp        0      0 10.0.8.5:ddi-tcp-1      internettl.org:36928    ESTABLISHED
tcp        0      0 10.0.8.5:37266          169.254.0.55:lsi-bobcat ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35669.wai:22310 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35669.wai:21946 ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      internettl.org:40170    ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      185.78.76.40:41246      ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      instance35660.waico:lms ESTABLISHED
tcp        0      0 10.0.8.5:ddi-tcp-1      91.92.240.156:53082     ESTABLISHED

查看80端口是否被什么进程占用。

[root@VM-8-5-centos ~]# netstat -tunlp | grep 80
# 可以看到,80端口被docker-proxy代理在使用,实际上这里是我们这个应用的nginx服务。
tcp6       0      0 :::80                   :::*                    LISTEN      4264/docker-proxy
udp6       0      0 fe80::5054:ff:fe86::123 :::*                                1924/ntpd

查看当前网络的路由表。

[root@VM-8-5-centos ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
10.0.8.0        0.0.0.0         255.255.252.0   U         0 0          0 eth0
link-local      0.0.0.0         255.255.0.0     U         0 0          0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0

# 非交互式网络下载工具-wget 常用

wget命令是一个在Linux和类Unix操作系统中经常使用的网络命令,用途是从指定的URL下载文件。它支持HTTP、HTTPS和FTP协议,支持断点续传,可以下载整个网站。

# 基础语法

wget [OPTION]... [URL]...

# 常用选项

选项 说明
-c 断点续传,即从上次下载中断的地方继续下载。
-O 指定下载的文件名。
-b 后台下载。
-q 静默模式,不输出下载信息。
-t 重试下载次数。
-T 下载超时时间。
-U User-Agent字符串,用于伪装浏览器或其他客户端身份。
-P 下载到指定目录。
-r 递归下载,即下载指定URL中所有链接指向的文件。
-np 不进入上级目录。
-nd 不创建目录结构。
-nc 不覆盖已存在的文件,即遇到同名文件不进行下载。
-i 从文件中读取URL列表进行下载。
-x 建立基于时间戳的目录结构。
-S 显示服务器返回的HTTP头信息。

# 常用示例

[root@VM-8-5-centos data]# wget https://mirrors.aliyun.com/centos/7.6.1810/readme?spm=a2c6h.25603864.0.0.55eb1929jYMul0
--2023-12-28 09:04:41--  https://mirrors.aliyun.com/centos/7.6.1810/readme?spm=a2c6h.25603864.0.0.55eb1929jYMul0
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 124.225.45.219, 124.225.45.226, 124.225.45.221, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|124.225.45.219|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 439 [text/plain]
Saving to: ‘readme?spm=a2c6h.25603864.0.0.55eb1929jYMul0’

100%[=====================================================================>] 439         --.-K/s   in 0s

2023-12-28 09:04:41 (215 MB/s) - ‘readme?spm=a2c6h.25603864.0.0.55eb1929jYMul0’ saved [439/439]

[root@VM-8-5-centos data]# ls
kieoo  readme?spm=a2c6h.25603864.0.0.55eb1929jYMul0

# 安全登录远程主机-ssh 常用

ssh(secure shell)是一个与远程主机通信的协议,它由两部分组成,分别是ssh服务端(监听22端口的请求连接)以及ssh客户端(用来与远程服务器通信)。

# 基础语法

ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option]
[-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]

# 功能参数

选项 说明
-1 强制使用ssh协议版本1。
-2 强制使用ssh协议版本2。
-4 强制使用IPv4地址。
-6 强制使用IPv6地址。
-A 开启认证代理连接转发功能,这个参数在使用跳板机等场景非常有用。
-a 关闭认证代理连接转发功能。
-b 使用本机指定地址作为对应连接的源ip地址。
-C 请求压缩所有数据。
-c 选择加密会话的密码规范。
-F 指定ssh指令的配置文件。
-g 允许远程主机连接主机的转发端口。
-i 指定身份文件。
-l 指定连接远程服务器登录用户名。
-p 指定连接到远端的端口号。
-N 不执行远程指令。
-o 指定配置选项。
-q 静默模式。
-X 开启X11转发功能。
-y 开启信任X11转发功能。
-K 启用基于GSSAPI的身份验证&GSSAPI凭据转发(委派)到服务器。
-k 禁止启用基于GSSAPI的身份验证&GSSAPI凭据转发(委派)到服务器。

# 常见示例

这里以MobaXterm为例对客户端如何通过ssh连接服务端进行演示。使用"ssh -p 22 root@43.139.88.150"指令即可通过ssh访问我的云主机了。

# 安全传输文件-scp

scp指令(secure copy)指令是一个文件传输指令,用于在不同的机器之间传输文件。它基于ssh协议,并提供了对文件传输的安全加密。

# 基础语法

scp [选项] 源文件 目标路径

# 常见选项

选项 说明
-r 递归复制目录和子目录。
-P 指定远程SSH服务器的端口号。
-i 指定用于身份验证的私钥文件。
-p 保留源文件的时间戳,权限和所有者。
-v 显示详细的调试信息。

# 常见示例

下面是一个scp文件传输的示例,这个示例是将当前主机上的package20231205.tar.gz文件传输到127.0.1.1这台主机的/data/my_data路径下(使用的是imodule用户),执行这条指令前需要确保开通了当前主机访问目标主机(127.0.1.1)的22端口的防火墙,以及需要知道imodule用户的密码,部分公司会禁止scp命令,也需要提前识别,总的来说这个指令用到的地方不多。

scp ./package20231205.tar.gz imodule@127.0.1.1:/data/my_data

# 磁盘相关指令

与磁盘相关的指令主要有df,du,fdisk(操作分区)mkfs(创建文件系统)fsck(文件系统检查及修复),mount,umount指令。

# 磁盘可用空间查看-df

df是"disk free"的缩写,用于显示Linux系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。

# 基础用法

df [选项] [目录或文件名]

# 常见选项

选项 说明
-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统。
-h 以"人"容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。
-i 显示i节点信息,而不是磁盘块。
-t 显示各指定类型的文件系统的磁盘空间使用情况。
-x 列出不是某一指定类型文件系统的磁盘空间使用情况。
-T 显示文件系统类型。

# 常见示例

通过df -h指令可以查看磁盘使用情况,如下,可以看到相对df指令(这里不演示df指令效果了,想看效果建议自己敲指令试试),加了-h参数后显示的结果就友好的多。

# Size: 磁盘空间大小
# Used: 使用量
# Avail: 剩余量
# Use% : 使用百分比
# Mounted on: 挂载路径
[root@VM-8-5-centos ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        989M     0  989M   0% /dev
tmpfs          1000M   40K 1000M   1% /dev/shm
tmpfs          1000M  760K  999M   1% /run
tmpfs          1000M     0 1000M   0% /sys/fs/cgroup
/dev/vda1        50G   34G   14G  72% /
tmpfs           200M     0  200M   0% /run/user/0
overlay          50G   34G   14G  72% /var/lib/docker/overlay2/df5c534689ab9ca49f12c509efa7612eb7af421c56510fdffeccd83f301ceec6/merged
overlay          50G   34G   14G  72% /var/lib/docker/overlay2/6695c2277cab058d861620c039e8a52483d7a9805e39eabdb68a2b9691ba3634/merged

# 文件系统挂载-mount

mount命令用于文件系统挂载。

# 基础用法

mount [-lhV]
mount -a [options]
mount [options] [--source] <source> | [--target] <directory>
mount [options] <source> <directory>
mount <operation> <mountpoint> [<target>]

# 常见选项

选项 说明
-h 显示辅助讯息。
-v 显示较讯息,通常和 -f 用来除错。
-a 将 /etc/fstab 中定义的所有档案系统挂上。
-F 这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f 通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n 一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-L 将含有特定标签的硬盘分割挂上。
-t 指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。

如何获取挂载设备的名称

访问/dev路径,查看其中的文件,每一个文件对应一个挂载设备,其中文件名对应挂载设备的名称。

# 常见示例

查看所有挂载信息。

# 查看磁盘挂载
[root@VM-8-5-centos ~]# mount
# 磁盘分区里第一个磁盘,挂载在根路径下
/dev/vda1 on / type ext4 (rw,relatime,data=ordered)

# Linux内核自己从磁盘里拿到的一个空间做挂载,便于在开机过程中读取/dev中的设备
devtmpfs on /dev type devtmpfs (rw,nosuid,size=929412k,nr_inodes=232353,mode=755)
# Linux内核自己从磁盘里拿到的一个空间做挂载,便于操作临时文件系统
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
# Linux内核自己从磁盘里拿到的一个空间做挂载,devpts是Linux系统中的一个虚拟文件系统,用于实现终端设备的动态分配和管理。在Linux系统中,终端设备可以是物理串口、USB串口、虚拟终端、网络终端等,这些设备在系统中都是通过设备文件来表示的。
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
# Linux内核自己从磁盘里拿到的一个空间做挂载,mqueue是用于进程间通信的消息队列。
mqueue on /dev/mqueue type mqueue (rw,relatime)
# Linux内核自己从磁盘里拿到的一个空间做挂载,用于向用户提供一套基于文件系统的巨页使用界面,其下层功能的实现,则依赖于 hugetlb
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)

# sysfs是基于内存的文件系统,用于向用户空间导出内核对象并且能对其进行读写。
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
# 临时文件系统,是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储,而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
# 系统守护进程,cgroup(control group)是一个内核特性,用于限制、统计、隔离一组进程的资源(CPU、内存、磁盘、网络等),首字母不要大写。
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
# Pstore,即Persistent Storage。其实现方式简单来讲就是通过管理一块特殊的内存空间,当发生系统异常的时候,将信息写入到这块内存中。
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
# blkio 是 cgroup v1 中的一个子系统,使用 cgroup v1 blkio 子系统主要是为了减少进程之间共同读写同一块磁盘时相互干扰的问题。
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
# net_cls子系统是用来控制进程使用网络资源的,它并不直接控制网络读写,而是给网络包打上一个标记,具体的网络包控制由tc机制来处理。
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
# 限制进程cpu的使用
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
# 限制进程cpu的使用
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
# hugetlb机制是一种使用大页的方法
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
# 可以挂起或恢复cgroup中的任务
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
# 进程id
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
# 设备驱动模型
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
# event是perf工作的基础,主要有两种:有使用硬件的PMU里的event,也有在内核代码中注册的event。
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
# 内存
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
# 在用户空间配置内核对象
configfs on /sys/kernel/config type configfs (rw,relatime)
# SecurityFS是用于安全内核模块的内存中的虚拟文件系统。
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
# 内核debug
debugfs on /sys/kernel/debug type debugfs (rw,relatime)

# docker挂载的磁盘空间 (overlay覆盖挂载)
overlay on /var/lib/docker/overlay2/1d84ba15ebf6364747fbcfd77cde318d291d35056382d522237b39b7405ad914/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/ZQLUEGUHSS435BEXOG23E7P5LK:/var/lib/docker/overlay2/l/OU7CZMJ5FXJDVUL5P4CXGGRPXA:/var/lib/docker/overlay2/l/55HPWI7RVIGHKIICHXZZ4NSPNE:/var/lib/docker/overlay2/l/E4AW6IOJMJQJ4QBR6MKXXH3N3F:/var/lib/docker/overlay2/l/HOYUOKP6RMEJRHLLRALHTZH46Y:/var/lib/docker/overlay2/l/UPB5FDA5BLSSLLTCG5EAWNT57J:/var/lib/docker/overlay2/l/4NDGR7ULZV3PWAIN22ZHE7J4F3:/var/lib/docker/overlay2/l/CXL4ZHZM566BFMQB3NZYOUAPLE,upperdir=/var/lib/docker/overlay2/1d84ba15ebf6364747fbcfd77cde318d291d35056382d522237b39b7405ad914/diff,workdir=/var/lib/docker/overlay2/1d84ba15ebf6364747fbcfd77cde318d291d35056382d522237b39b7405ad914/work)

# 进程管理
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
proc on /run/docker/netns/8884de06ee04 type proc (rw,nosuid,nodev,noexec,relatime)
# 自动挂载服务
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=10201)
# binfmt_misc是内核中的一个功能,它能将非本机的二进制文件与特定的解析器自动匹配起来,进行二进制解析。
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

# Linux内核自己从磁盘里拿到的一个空间做挂载,用于操作一些运行过程中跟用户和进程有关的数据,属于内核文件
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
# Linux内核自己从磁盘里拿到的一个空间做挂载,编号ID为0的用户(root)在运行中产生的数据
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=188188k,mode=700)

将 /dev/hda1 挂在 /mnt 之下。

mount /dev/hda1 /mnt

将 /dev/hda1 用唯读模式挂在 /mnt 之下。

mount -o ro /dev/hda1 /mnt

# 取消文件系统挂载-umount

umount命令用于取消文件系统挂载。

# 基础用法

umount [-hV]
umount -a [options]
umount [options] <source> | <directory>

# 常见选项

选项 说明
-a 卸除/etc/mtab中记录的所有文件系统。
-n 卸除时不要将信息存入/etc/mtab文件中。
-r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
-t<文件系统类型> 仅卸除选项中所指定的文件系统。
-v 执行时显示详细的信息。

# 常见示例

通过设备名取消挂载

umount -v /dev/sda1 

通过挂载点取消挂载

umount -v /mnt/mymount/

# 软件包相关指令

与软件包有关的指令主要有rpm,yum指令。

# 低级命令-rpm

RPM早期被称为RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为RPM is Package Manager。(rpm是一个低级工具,一般优先使用yum指令。)

# 基础用法

rpm [OPTION...]

# 常见选项

选项 说明
-i 表示安装。
--install 表示安装,同-i选项。
-v,-vv,-vvv 表示详细信息。
-h 以"#"号显示安装进度。
-q 查询指定包名。
-e 卸载指定包名。
-U 升级软件,若未软件尚未安装,则安装软件。
-F 升级软件。
-V 对RPM包进行验证。
--nodeps 忽略依赖关系。
--query 查询指定包名。同-q选项。
--test 仅作测试,不真正执行,可用于测试安装,测试卸载。
--replacepkgs 重新安装。替换原有的安装。
--force 忽略软件包及文件的冲突。
--initdb 新建RPM的数据库。
--rebuilddb 重建RPM的数据库。
--percent 以百分比的形式输出安装的进度。

# 常见示例

rpm软件包的安装/卸载。

# 安装一个包
rpm -ivh packageName
# 升级一个包
rpm -Uvh packageName
# 卸载一个包
rmp -e packageName

rpm软件包的查询。

rpm -q:查询某一个RPM包是否已安装
rpm -qi:查询某一个RPM包的详细信息
rpm -ql:列出某RPM包中所包含的文件。
rpm -qf:查询某文件是哪个RPM包生成的。
rpm -qa:列出当前系统所有已安装的包

# 高级命令-yum

yum的底层实现依然是基于rpm指令,只不过rpm安装,你需要手动解决依赖问题。而使用yum安装,yum会自动解决依赖问题

# 常见选项

选项 说明
-q 静默模式。
-v 详细模式。
-y 自动回答为yes。
-R [minutes] 最多等待时间。
-x [package] 通配要排除的包。
--noplugins 禁用所有插件。
--color=COLOR 带颜色。
--downloadonly 仅下载包,不安装或升级。默认下载在yum的缓存目录中,默认为/var/cache/yum/$basearch/$releasever。
--downloaddir=DLDIR 指定下载目录。

# 常见示例

##列出所有可更新的软件清单命令
yum check-update
##更新所有软件命令
yum update
##仅安装指定的软件命令
yum install <package_name>
##仅更新指定的软件命令
yum update <package_name>

##删除软件包命令
yum remove <package_name>
##查找软件包 命令
yum search <keyword>
##清除缓存命令:
yum clean packages 				##清除缓存目录下的软件包
yum clean headers 				##清除缓存目录下的 headers
yum clean oldheaders 			##清除缓存目录下旧的 headers

##列出所有可安裝的软件清单命令
yum list
# 查看某软件包的所有可用软件版本
yum list <packageName> --showduplicates

# 安装软件包的特定版本
#使用yum downgrade命令可以在当前系统中安装指定版本软件,并自动降级已安装的较新版本软件。命令结构为yum downgrade <软件包名>-<版本号>。
yum downgrade <软件包名>-<版本号>

# 重新安装软件包
yum reinstall <packageName>
# 查看可用包
[lighthouse@VM-12-7-centos ~]$ yum list docker-ce --showduplicates | sort -r
Repository epel is listed more than once in the configuration
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
              : subscription-manager
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos,
Installed Packages
# 包名                      # 包的版本号                        # 镜像源
docker-ce.x86_64            3:24.0.6-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.5-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.5-1.el7                     @docker-ce-stable
docker-ce.x86_64            3:24.0.4-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.1-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.0-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.6-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.5-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.4-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.1-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.0-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:20.10.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.24-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.23-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.22-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.21-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.20-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.19-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.18-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.17-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.16-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.15-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.14-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.13-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.12-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.11-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.10-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.15-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.14-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.13-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.12-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.11-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.10-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.3.ce-1.el7                   docker-ce-stable 
docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable 
Determining fastest mirrors
Available Packages

# 重新下载包,这里使用reinstall指令,一直报错,百思不得其解,后来才知道,install和reinstall默认都是安装最高版本的软件包,并不支持指定低版本,这里指定了低版本,因此报错
[root@VM-8-5-centos ~]# yum reinstall --downloadonly docker-ce-24.0.5-1.el7
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos
No Match for argument: docker-ce-24.0.5-1.el7
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Error: Nothing to do

# 正确的安装特定版本软件包指令是yum downgrade 可以看到这里成功下载到了特定版本的软件包
[root@VM-8-5-centos ~]# yum -y downgrade docker-ce-24.0.6-1.el7 --downloadonly
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 3:24.0.6-1.el7 will be a downgrade
---> Package docker-ce.x86_64 3:24.0.7-1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================
 Package                Arch                Version                        Repository                     Size
===============================================================================================================
Downgrading:
 docker-ce              x86_64              3:24.0.6-1.el7                 docker-ce-stable               24 M

Transaction Summary
===============================================================================================================
Downgrade  1 Package

Total size: 24 M
Background downloading packages, then exiting:
exiting because "Download Only" specified
参考资料

Linux软件安装中RPM与YUM 区别和联系 (opens new window)
Linux 软件包安装(源代码、RPM包、Yum安装) (opens new window)
yum安装指定版本软件 (opens new window)
80%人都要懂的Yum精讲工具,绝对是B站讲的最好的,无废话纯干货! (opens new window)

# 系统指令

与系统有关的指令有sysctl指令。

# sysctl指令 常用

使用sysctl用于在内核运行时动态地修改内核的运行参数,修改仅在当前生效,重启系统后参数丢失。如需参数永久生效可以修改配置文件“/etc/sysctl.conf”,同时使用sysctl -p /etc/sysctl.conf加载配置。

# 基础语法

sysctl [options] [variable[=value] ...]

# 常见选项

选项 说明
-a 列出所有的属性。
-e 忽略未知关键字错误,需配合-a使用,即使用-ae指令。
-n 打印值时不打印关键字,需配合-a使用,即使用-an指令。
-N 仅打印名称,需配合-a使用,即使用-aN指令。
-w 当改变sysctl设置时使用此项。“sysctl -w key=value”形式调用,参见常见示例。
-p 从配置文件“/etc/sysctl.conf”加载内核参数设置。

# 常见示例

列出所有的属性。

[root@VM-8-5-centos ~]# sysctl -a
vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 30
vm.dirty_writeback_centisecs = 500
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.hugepages_treat_as_movable = 0
vm.hugetlb_shm_group = 0
vm.laptop_mode = 0
vm.legacy_va_layout = 0

仅显示属性的key值,不显示value。

[root@VM-8-5-centos ~]# sysctl -N
vm.admin_reserve_kbytes
vm.block_dump
vm.dirty_background_bytes
vm.dirty_background_ratio
vm.dirty_bytes
vm.dirty_expire_centisecs
vm.dirty_ratio
vm.dirty_writeback_centisecs
vm.drop_caches
vm.extfrag_threshold
vm.hugepages_treat_as_movable
vm.hugetlb_shm_group
vm.laptop_mode
vm.legacy_va_layout
vm.lowmem_reserve_ratio
vm.max_map_count
vm.memory_failure_early_kill
vm.memory_failure_recovery

临时添加/修改一个属性值。

# 这里没有具体执行,猜测这个指令不会修改/etc/sysctl.conf文件,因此重启操作系统后属性会失效
# 查到的资料也说-w只会临时改变某个指定参数的值
[root@VM-8-5-centos ~]# sysctl -w key=value

永久添加/修改一个属性值。

# 在执行这个指令之前,需要提前修改/etc/sysctl.conf文件
[root@VM-8-5-centos ~]# sysctl -p /etc/sysctl.conf

# 其他指令

其他常用指令有clear,history,exit,date,file,less,type,which,help,man,alias,tee,echo,printenv,export,shutdown,md5sum,tar,free等。

# 清屏-clear 常用

使用clear指令可以清理屏幕。

# 常见示例

以下动图是clear指令的使用效果。可以看到在敲击完clear指令后,屏幕会滚动到最顶端,整个屏幕的数据看起来都像是被“清理”了。

# 执行历史记录-history 常用

history指令可以显示最近执行的1000条指令的详细信息。

# 常见示例

[root@VM-8-5-centos ~]# history
1  2023-12-15 19:01:48
2  2023-08-03 15:28:48 curl -sSO http://download.bt.cn/install/plugin/
tencent/template/centos7.sh && bash centos7.sh && rm -rf centos7.sh
3  2023-08-03 15:44:09 ll
4  2023-12-05 13:53:39 cd /
5  2023-12-05 13:53:42 mkdir /app
6  2023-12-05 13:53:43 ls
7  2023-12-05 13:53:48 cd /app
8  2023-12-05 13:53:48 ls
9  2023-12-05 13:53:53 mkdir java
10  2023-12-05 13:53:53 ls
11  2023-12-05 13:53:58 mkdir back
12  2023-12-05 13:53:59 ls
13  2023-12-05 13:54:53 cd java
14  2023-12-05 13:54:54 ls
15  2023-12-05 13:55:05 tar -zxvf jdk-17_linux-x64_bin.tar.gz
16  2023-12-05 13:56:19 vim /etc/profile
17  2023-12-05 13:57:53 java -version
18  2023-12-05 13:57:56 java -v
19  2023-12-05 13:58:07 source ~/.bashrc
20  2023-12-05 13:58:12 java -version
21  2023-12-05 13:58:44 source /etc/profile
用于操作命令历史记录的组合键
组合键 操作
Ctrl+P 移动到上一条历史记录,等同于↑方向键。
Ctrl+N 移动到上一条历史记录,等同于↓方向键。
Alt+< 移动到历史记录列表开头。
Alt+> 移动到历史记录列表结尾。
Ctrl+R 从当前命令行开始向上搜索历史记录列表。
Alt+P 与上一条指令一样,也是搜索历史记录的快捷键。
!! 重复上一条命令。与↑方向键+Enter键等价。
!number 重复命令历史列表中第number条指令。

# 退出会话-exit

exit命令是用于退出当前的shell会话或终止正在运行的脚本。当你在Linux系统中使用命令行界面时,可以通过exit命令来结束当前的会话。

# 基础语法

exit [n]
Exits the shell with a status of N.  If N is omitted, the exit status is that of the last command executed.

# 常见示例

结束终端会话:

[root@VM-8-5-centos ~]# exit

# 日期-date指令

date指令可以查看与日期相关的信息。

# 基础语法

date [选项] [参数]

# 常见选项

选项 说明
-d -d datestr,显示datestr中所设定的时间(非系统时间)
-s -s datestr,将系统时间设为datestr中所设定的时间
-u 显示目前的格林威治时间

# 常见日期格式

日期格式 说明 日期格式 说明
%y 显示年份最后两位,如00-99 %Y 显示年份,如1984
%m 显示月份如01到12 %d 显示一月中的一天,如01到31
%M 显示分钟 %H 显示小时
%S 显示秒数 %F 显示完整日期,等价于"%+4Y-%m-%d"

# 常见示例

显示默认日期:

# 通过默认的date指令可以查看当前日期
[root@VM-8-5-centos ~]# date
Mon Dec 11 21:45:47 CST 2023

显示年月日格式日期:

#通过+%F参数或+%Y-%m-%d参数可以以yyyy-MM-dd格式显示日期
[root@VM-8-5-centos ~]# date +%F
2023-12-11
[root@VM-8-5-centos ~]# date +%Y-%m-%d
2023-12-11

显示年月日时分秒格式日期:

#通过"+%Y-%m-%d %H:%M:%S"参数可以以yyyy-MM-dd HH:mm:ss格式显示日期
[root@VM-8-5-centos ~]# date "+%Y-%m-%d %H:%M:%S"
2023-12-11 22:07:40

# 文件类型识别-file

通过file指令,我们可以查看文件的类型。

# 基础语法

file [OPTION...] [FILE...]

# 常见选项

选项 说明
-b 列出文件显示结果时,不显示文件名称。
-i 显示文件的MIME类型
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。

# 常见示例

确定某个.jpg后缀的文件的文件类型:

[root@VM-8-5-centos backgrounds]# cd /usr/share/backgrounds/
[root@VM-8-5-centos backgrounds]# ls
7lines-bottom.png  7lines-top.png  day.jpg  default.jpg  default.png  default.xml  morning.jpg  night.jpg
[root@VM-8-5-centos backgrounds]# file day.jpg
# day.jpg 文件名称
# JPEG image data 影像格式
# JFIF standard 1.01 图像文件格式标准 1.01
day.jpg: JPEG image data, JFIF standard 1.01

查看某个文件的MIME类型:

[root@VM-8-5-centos charmaps]# cd /usr/share/backgrounds/
[root@VM-8-5-centos backgrounds]# file -i day.jpg
# 文件的mime格式为image/jpeg
day.jpg: image/jpeg; charset=binary

尝试去解读压缩文件的内容:

[root@VM-8-5-centos charmaps]# pwd
/usr/share/i18n/charmaps
# 不加任何参数查看gz压缩文件,返回的文件类型是gzip
[root@VM-8-5-centos charmaps]# file IBM277.gz
IBM277.gz: gzip compressed data, from Unix, max compression
# 可以看到,增加了-z参数后,解析出来的文件类型是ASCII text,即文本格式
# 如果下载该压缩包并解压缩,可以看到内部是一个文本文件
[root@VM-8-5-centos charmaps]# file -z IBM277.gz
IBM277.gz: ASCII text (gzip compressed data, from Unix, max compression)

# 查看文件内容-less 常用

less命令是Linux系统中的一个用于查看文件内容的命令。它可以显示文件的全部内容,并且可以进行搜索、滚动、翻页等操作,比cat命令更加强大和灵活。

# 基础语法

less [选项] 文件

# 常见选项

选项 说明 选项 说明
-N 显示行号。 -n 不显示行号。(默认)
-i 忽略大小写。 -F 一次性显示整个文件,不进行分页。
-f 强制显示文件名。 -q 静默模式,不显示任何提示信息。
/ 搜索指定字符串。 Q 按Q键可退出less指令
b 后翻一页。 空格键 前翻一页。
上方向键 向后一行。 下方向键 向前一行。
G 移动到文本文件末尾。 1G或g 移动到文本文件开头。

# 常见示例

查看文件内容:

使用"/"指令搜索指定字符串:

# 显示命令类型-type

type命令属于Shell内建命令,它能够显示指令的命令属于哪种类型。

# 基本语法

# 选项默认可不加
type [-afptP] name [name ...]

# 常见选项

选项 说明
-a -a name:显示包含名为name的可执行文件的所有位置(包括别名、内置项和函数)。
-f 抑制shell函数查找。
-P 强制对每个NAME进行PATH搜索,即使它是别名、内置项或函数,并返回要执行的磁盘文件的名称。
-t 输出指令类型(alias,keyword,function,builtin,file)。
-p 返回将要执行的磁盘文件的名称。

# 常见示例

下面的示例使用type命令查看了一些其他常用命令的类型。

[root@VM-8-5-centos ~]# type type
type is a shell builtin
[root@VM-8-5-centos ~]# type ls
ls is aliased to `ls --color=auto'
[root@VM-8-5-centos ~]# type cp
cp is aliased to `cp -i'
[root@VM-8-5-centos ~]# type clear
clear is hashed (/usr/bin/clear)

# 显示可执行文件位置-which

有时候,系统中安装的程序不止一个版本。为了确认某个程序的确切位置,可以使用which命令查看。

# 基本语法

/usr/bin/which [options] [--] COMMAND [...]

# 常见选项

选项 说明
--skip-dot 跳过以.号(点号)开头的PATH。
--skip-tilde 跳过以~号(波浪号)开头的PATH。
--show-dot 不要在输出中将点扩展到当前目录。
--show-tilde 为非根目录输出HOME目录的波浪号。
--tty-only 如果不在tty上,则停止处理右侧的选项。
-a,--all 在PATH中打印所有匹配项,而不仅仅是第一个。
-i,--read-alias 从stdin标准输入读取别名列表。
--read-functions 从stdin标准输入读取函数。

# 常见示例

下面是一些which指令的常见示例。

[root@VM-8-5-centos ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@VM-8-5-centos ~]# which cd
/usr/bin/cd
[root@VM-8-5-centos ~]# which clear
/usr/bin/clear
# which指令没有办法查看Shell内建命令的路径
[root@VM-8-5-centos ~]# which type
/usr/bin/which: no type in (/app/java/jdk-17.0.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

# 获取Shell内建命令的帮助文档-help 常用

通过help指令可以查看Shell内建命令的使用说明。

# 基础语法

help [-dms] [pattern ...]

# 常见选项

选项 说明
-d 输出每个主题的简短描述。
-m 以伪手册页格式显示用法。
-s 只为每个匹配PATTERN的主题输出一个简短的使用摘要。

# 常见示例

下面是一些help指令的常见示例。

# 查看cd指令的用法
[root@VM-8-5-centos playground]# help cd
cd: cd [-L|[-P [-e]]] [dir]
    Change the shell working directory.

# 查看help指令的用法
[root@VM-8-5-centos playground]# help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.

# 显示命令的手册页-man 常用

通过man指令可以查看指令的手册页文档。man指令底层基于less指令实现,所以使用方式与less一致。

# 基础语法

# SECTION 章节号,数字选项
man [OPTION...] [SECTION] PAGE...

# 常见示例

下面是使用man指令的示例。

[root@VM-8-5-centos ~]# man ls


# 创建自己的命令-alias

使用alias指令,我们可以创建自己的命令。

# 基础语法

[root@VM-8-5-centos ~]# help alias
alias: alias [-p] [name[=value] ... ]
    Define or display aliases.

# 常用示例

# 打印系统中所有的alias别名指令
[root@VM-8-5-centos ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

# 我们通过alias 创建了一个名为foo的指令
[root@VM-8-5-centos ~]# alias foo='cd /usr; ls; cd -;'
# 执行foo指令,可以看到执行的结果
[root@VM-8-5-centos ~]# foo
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
/root
使用unalias命令取消已经创建的alias命令
unalias: unalias [-a] name [name ...]
    Remove each NAME from the list of defined aliases.

    Options:
      -a        remove all alias definitions.

    Return success unless a NAME is not an existing alias.

# 将结果同时输出到标准输出以及文件-tee

为了和管道的比喻保持一致,Linux还提供了一个名为tee(单词意思是高尔夫球台)的命令,可以在管道上安装一个“T”字龙头。tee命令从标准输入读取内容,然后将其复制到标准输出(允许数据沿着管道继续向下流动)和其他文件中。捕获管道处理过程中的某个中间阶段的数据有时候会很有用。

# 基础语法

tee [OPTION]... [FILE]...

# 常见选项

选项 说明
-a 防止 tee 命令覆盖现有文件,而是追加数据。
-i 忽略中断信号。(不建议使用这个参数)

# 常见示例

# 在两个管道中间插入了一段tee指令,将ls的查询结果存入ls.txt文件中。
[root@VM-8-5-centos ~]# ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
[root@VM-8-5-centos ~]# cat ls.txt
[
a2p
abrt-action-analyze-backtrace
abrt-action-analyze-c
abrt-action-analyze-ccpp-local
abrt-action-analyze-core
abrt-action-analyze-oops
abrt-action-analyze-python
abrt-action-analyze-vmcore
abrt-action-analyze-vulnerability
...

将输出结果同时打印到屏幕和文件里:

$ ls -l | tee -a lsls.log

将输出结果(包含错误)输出同时打印到屏幕和文件里:

$ ls -l not_find_runoob 2>&1 | tee -a lsls.log

# 扩展指令-echo 常用

echo指令的描述很简单,只有一句话,那就是将参数写入到标准输出。然而实际上这个指令的功能却十分强大。如每次我们输入命令并按Enter键的时候,在执行命令之前,Bash会执行一些文本替换操作。这一过程就称为扩展。经过扩展,我们输入的内容在被Shell执行之前会被扩展成其他内容。

# 基础语法

[root@VM-8-5-centos bin]# help echo
echo: echo [-neE] [arg ...]
# 将参数写入标准输出中
Write arguments to the standard output.

# 常见选项

选项 说明
-n 不输出最后的\n。
-e 解释转义字符。
-E 不解释转义字符。

# 常见示例

将文本参数输出到标准输出:

[root@VM-8-5-centos ~]# cd /data
[root@VM-8-5-centos data]# ls
kieoo
[root@VM-8-5-centos data]# echo hello world
hello world
[root@VM-8-5-centos data]# echo *
kieoo

使用echo进行算数扩展:

## 算数扩展表达式为$((expression))
[root@VM-8-5-centos data]# echo $((2+2))
4

使用echo进行"{}"花括号扩展:

# 输出3个文件名
[root@VM-8-5-centos data]# echo Front-{A,B,C}-back
Front-A-back Front-B-back Front-C-back
# 输出5个文件名
[root@VM-8-5-centos data]# echo Number-{1..5}
Number-1 Number-2 Number-3 Number-4 Number-5
# 输出01到15
[root@VM-8-5-centos data]# echo Number-{01..15}
Number-01 Number-02 Number-03 Number-04 Number-05 Number-06 Number-07 Number-08 Number-09 Number-10 Number-11 Number-12 Number-13 Number-14 Number-15
# 输出001到015
[root@VM-8-5-centos data]# echo Number-{001..015}
Number-001 Number-002 Number-003 Number-004 Number-005 Number-006 Number-007 Number-008 Number-009 Number-010 Number-011 Number-012 Number-013 Number-014 Number-015
# 输出Z到A
[root@VM-8-5-centos data]# echo Number-{Z..A}
Number-Z Number-Y Number-X Number-W Number-V Number-U Number-T Number-S Number-R Number-Q Number-P Number-O Number-N Number-M Number-L Number-K Number-J Number-I Number-H Number-G Number-F Number-E Number-D Number-C Number-B Number-A
# 花括号嵌套扩展输出
[root@VM-8-5-centos data]# echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b

利用花括号扩展创建文件或目录结构:

[root@VM-8-5-centos ~]# mkdir photos
[root@VM-8-5-centos ~]# ls
photos
[root@VM-8-5-centos ~]# cd photos/
[root@VM-8-5-centos photos]# ls
[root@VM-8-5-centos photos]# mkdir {2007..2009}-{01..12}
[root@VM-8-5-centos photos]# ls
2007-01  2007-04  2007-07  2007-10  2008-01  2008-04  2008-07  2008-10  2009-01  2009-04  2009-07  2009-10
2007-02  2007-05  2007-08  2007-11  2008-02  2008-05  2008-08  2008-11  2009-02  2009-05  2009-08  2009-11
2007-03  2007-06  2007-09  2007-12  2008-03  2008-06  2008-09  2008-12  2009-03  2009-06  2009-09  2009-12

使用echo对参数进行扩展:

# 对user参数进行扩展,没有内容输出,仅输出空串
[root@VM-8-5-centos photos]# echo $user

#对$USER进行扩展,输出当前用户
[root@VM-8-5-centos photos]# echo $USER
root

使用echo将命令的输出结果作为扩展结果:

# 显示ls的内容
[root@VM-8-5-centos app]# echo $(ls)
back java
# 显示文件
[root@VM-8-5-centos ~]# file $(ls -d /usr/bin/* | grep zip)
/usr/bin/bunzip2:      symbolic link to `bzip2'
/usr/bin/bzip2:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=9587d04997b37141a2dbdbdb9562ca151913a6f4, stripped
/usr/bin/bzip2recover: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b79d9a281baf0b8f43196bfe406a6d945e792ccb, stripped
/usr/bin/funzip:       ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1b690c0ae9b7dd68fb0ea37d2b61ff570584bb7c, stripped
/usr/bin/gpg-zip:      POSIX shell script, ASCII text executable
/usr/bin/gunzip:       POSIX shell script, ASCII text executable
/usr/bin/gzip:         ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1e3737e7ab69f095660de41c05b524cc47bed843, stripped
/usr/bin/unzip:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7caed042c3abd103e42da36816459cbf51c7eb27, stripped
/usr/bin/unzipsfx:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=eb392fb951a70024e619ace78d755dddc7f73640, stripped
/usr/bin/zip:          ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7c01940c97abdf45a093c697e63ef214ea14adcf, stripped
/usr/bin/zipcloak:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e0f7de70feffd0124f6350e449b8d6c7513502da, stripped
/usr/bin/zipgrep:      POSIX shell script, ASCII text executable
/usr/bin/zipinfo:      ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7caed042c3abd103e42da36816459cbf51c7eb27, stripped
/usr/bin/zipnote:      ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=750c11ada0bec740fa2885383e678e7be5206cdd, stripped
/usr/bin/zipsplit:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e259ffcdb17baf5b9599c87ad924eb51b4df53b4, stripped

双引号会导致echo扩展中所有的特殊字符丧失含义($符号,\反斜线除外):

[root@VM-8-5-centos ~]# echo "$USER $((2+2)) $(cal)"
root 4     December 2023
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
# 多余的空格会被去掉
[root@VM-8-5-centos ~]# echo this is a                test
this is a test
# 字符会原样输出
[root@VM-8-5-centos ~]# echo "this is a               test"
this is a               test

单引号会禁止echo的所有扩展:

[root@VM-8-5-centos ~]# echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
[root@VM-8-5-centos ~]# echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 root
[root@VM-8-5-centos ~]# echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /root/*.txt a b foo 4 root
补充说明

1.$a与${a}等价,如需要输出${a}b的情况下,需要增加{}。
2.${parameter:-word}:如果parameter未设置或为空,则使用word作为扩展结果。
3.${parameter:=word}:如果parameter未设置或为空,则使用word作为扩展结果,同时还会将word赋值给parameter。
4.${parameter:?word}:如果parameter未设置或为空,则报错退出,word为报错的提示语。
5.${parameter:+word}:如果parameter未设置或为空,则扩展结果为空。如果parameter不为空,则使用word作为扩展结果。(并不会将word赋值给parameter)。
6.${#parameter}:扩展结果为parameter所包含的字符串的长度。
7.${parameter:offset:length}:提取parameter所包含的字符串的一部分。
8.${parameter#pattern},${parameter##pattern}:从parameter所包含的字符串的首部开始,删除符合模式pattern的部分。
9.${parameter/pattern/string}:对parameter所包含的字符串执行“搜索-替换”操作。
10.${parameter,,pattern},${parameter,pattern},${parameter^^pattern},${parameter^pattern}:对parameter字符串进行大小写的转换。

# 打印环境变量信息-printenv

使用printenv指令可以打印环境变量信息。

# 基础语法

printenv [OPTION]... [VARIABLE]...

# 常见示例

查看所有的环境变量。

[root@VM-8-5-centos ~]# printenv
XDG_SESSION_ID=28036
HOSTNAME=VM-8-5-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=58.251.79.242 56770 22
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
NSS_STRICT_NOFORK=DISABLED
MAIL=/var/spool/mail/root
PATH=/app/java/jdk-17.0.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
JAVA_HOME=/app/java/jdk-17.0.8
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=58.251.79.242 56770 10.0.8.5 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/0
HISTTIMEFORMAT=%F %T
_=/usr/bin/printenv

查看HOME环境变量。

[root@VM-8-5-centos ~]# printenv HOME
/root

查看PATH环境变量。

[root@VM-8-5-centos ~]# printenv PATH
/app/java/jdk-17.0.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 在当前Shell实例环境中修改环境变量-export 常用

Linux export命令用于设置或显示环境变量。
在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。重启会导致该指令设置的参数失效。

# 基础语法

export [-fnp][变量名称]=[变量设置值]

# 常见选项

选项 说明
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。

# 常见示例

查看环境变量。

[root@VM-8-5-centos ~]# export -p
declare -x HISTSIZE="3000"
declare -x HISTTIMEFORMAT="%F %T "
declare -x HOME="/root"
declare -x HOSTNAME="VM-8-5-centos"
declare -x JAVA_HOME="/app/java/jdk-17.0.8"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"

定义环境变量。

[root@VM-8-5-centos ~]# export TEST1=123
[root@VM-8-5-centos ~]# export -p
declare -x TEST1="123"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="28036"

删除环境变量。

[root@VM-8-5-centos ~]#  export -n TEST1
[root@VM-8-5-centos ~]# export -p
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="28036"

永久修改环境变量

如何永久修改环境变量

# 在当前Shell实例环境中执行指定的shell脚本-source

source命令会在当前Shell实例环境中执行特定的shell脚本。

# 基础语法

source filename

# 常见示例

[root@VM-8-5-centos ~]# source /usr/profile
Linux中如何设置JDK的环境变量PATH

计算机开机后,Linux的Bash会读取一些shell脚本文件,如(/usr/profile),如果在这些脚本文件执行过程中解析到了export指令,就会执行export指令,设置环境变量。下面我们解释说明jdk的环境变量设置的步骤流程。

  • 修改/usr/profile文件
vim /usr/profile
# export指令设置JAVA_HOME变量
exprot JAVA_HOME=/usr/local/jdk1.8.0_111
# export指令设置CLASSPATH变量
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# export指令设置PATH变量
exprot PATH=$JAVA_HOME/bin:$PATH
  • source指令执行脚本
source /usr/profile

source指令执行shell脚本,执行脚本过程中就会执行export指令设置环境变量,环境变量就会立刻在当前Shell实例环境生效。 如果下次重启,Bash就会自动执行这个文件,因此,这个环境变量的配置就是永久有效的。
ps:理论上修改该文件后直接重启机器就可以达到永久修改环境变量的效果。
ps:理论上修改该文件后把export的几行直接在shell中多执行一次也可以达到永久修改环境变量的效果。

# 关机以及重开机命令-shutdown

shutdown命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown也可以用来重开机。

# 基础语法

shutdown [-t seconds] [-rkhncfF] time [message]

# 常见选项

选项 说明
-t seconds 设定在几秒钟之后进行关机程序。
-k 并不会真的关机,只是将警告讯息传送给所有使用者。
-r 关机后重新开机。
-h 关机后停机。
-n 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
-c 取消目前已经进行中的关机动作。
-f 关机时,不做 fsck 动作(检查 Linux 档系统)。
-F 关机时,强迫进行 fsck 动作。
time 设定关机的时间。
message 传送给所有使用者的警告讯息。

# 常见示例

立即关机。

# shutdown -h now

指定 10 分钟后关机。

# shutdown -h 10

重新启动计算机。

# shutdown -r now

# 文件一致性校验-md5sum

使用md5sum指令,我们可以对文件的一致性进行校验。

# 常见示例

# 对docker_nginx_start.txt 这个文件进行md5校验
[root@VM-8-5-centos nginx]# md5sum docker_nginx_start.txt
# 输出md5值以及文件名
55d362dc3cea595d6b316c6efcd56b06  docker_nginx_start.txt

# 磁带归档工具-tar

tar指令是Linux系统上的压缩打包指令,可以将多个文件合并为一个文件(默认情况不会对文件进行压缩),打包后的文件后缀亦为“tar”。这个指令最初的设计目的是将文件备份到磁带上(tape archive 磁带归档),因而得名tar。

# 基础语法

tar [OPTION...] [FILE]...

# 功能参数

选项 说明
-c create,创建一个新的tar文件,对应的功能是打包功能。
-x 也可以使用--extract,--get参数,对应解压缩功能。
-t 也可以使用--list参数,对应查看一个tar包里面的文件。
-r 也可以使用--append参数,附加新的文件到tar文件中。
-u update,对应更新一个tar包。
-A concatenate,将tar文件作为一个整体追加到另一个tar文件中。
-d diff,将文件系统里的文件和tar文件里的文件进行比较。

# 常用选项

选项 说明
-v 列出每一步处理涉及的文件信息,仅列出文件名。
-vv 列出每一步处理涉及的文件信息,列出权限、所有者、大小、时间、文件名等信息。
-k 不覆盖系统上已有的文件。
-f 也可以使用--file参数,指定要处理的文件名。
-P 使用绝对路径。
-z 也可以使用--gzip,--gunzip,--ungzip参数,调用gzip执行压缩或解压缩。

# 常用打包(压缩包)示例

下面是一个打包的示例,使用参数-z代表使用gzip格式进行,-c代表打包,-v代表显示打包过程的文件,-f代表指定文件路径。这一整个指令的意思是将/app/test文件打包成test.tar.gz包,test.tar.gz包生成到当前路径。

tar -zcvf test.tar.gz /app/test

# 常见解压缩示例

下面是一个解压缩的示例,使用参数-z代表使用gzip格式进行,-x代表解压缩,-v代表显示解压缩过程的文件,-f代表指定文件路径。这一整个指令的意思是将test.tar.gz包解压缩到/app/test文件夹。

tar -zxvf test.tar.gz /app/test

提示

1.可以从tar归档包中仅提取部分内容
2.tar可以配合find指令一起执行,将find找到的文件进行归档。
3.可以利用tar结合find创建目录树或整个系统的增量备份。

# 查看系统内存的使用情况-free

使用free指令可以查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。

# 基础语法

free [参数]

# 常见选项

选项 说明
-h 以"人"容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。
-s 根据提供的观测间隔时间持续观察内存使用情况。

# 常见示例

查看内存使用情况。

# total: 总内存2G
# used: 使用内存691MB
# availabled: 剩余内存1.1G
[root@VM-8-5-centos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        691M         96M        464K        1.2G        1.1G
Swap:          1.0G        439M        585M

每隔两秒查看一次内存使用情况。

[root@VM-8-5-centos ~]# free -hs 2
              total        used        free      shared  buff/cache   available
Mem:           2.0G        690M         97M        464K        1.2G        1.1G
Swap:          1.0G        439M        585M

              total        used        free      shared  buff/cache   available
Mem:           2.0G        690M         98M        464K        1.2G        1.1G
Swap:          1.0G        439M        585M
内存相关参数如何查看

我们以下面的内存参数为例来分析内存相关参数如何查看:

[root@VM-8-5-centos ~]# free
# 这里不考虑交换区,且交换区数据已提前重置
# total:总的物理内存,约2g
# used:已使用内存
# free:剩余的可用物理内存
# shared:应用间共享内存(我自己的理解是两个应用使用了同一块内存分区),一般不关注这个参数
# buff/cache:缓存区内存
# available:可以被应用程序使用的内存

## 参数解读-total:很好理解,总的物理内存
## 参数解读-used:也很好理解,已经使用的内存
## 参数解读-free:也很好理解,剩余没被使用的内存,但是这里就要注意了,total可不等于used+free,而是total=used+free+buff/cache
## 参数解读-shared:应用间共享内存(我自己的理解是两个应用使用了同一块内存分区),一般不关注这个参数
## 参数解读-buff/cache:缓存区内存
## 参数解读-available:可用内存,操作系统算出来的,需要知道,free+buff/cache>available
              total        used        free      shared  buff/cache   available
Mem:        1881864      320564      906700         628      654600     1393284
Swap:             0           0           0

根据上面的数据,可以看到,当前内存使用率为used/total=17.03%,与云服务器监控数据一致。

其他内存使用率公式

大部分计算内存使用率的公式都是采用(total-available)/total来计算内存使用率。我个人也比较支持用这个公式去算使用率。