Linux常用命令

Linux 命令行

一、查看 Linux 命令帮助信息

关键词:help, whatis, info, which, whereis, man

1. 查看 Linux 命令帮助信息的要点

  • 查看 Shell 内部命令的帮助信息 - 使用 help
  • 查看命令的简要说明 - 使用 whatis
  • 查看命令的详细说明 - 使用 info
  • 查看命令的位置 - 使用 which
  • 定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径 - 使用 whereis
  • 查看命令的帮助手册(包含说明、用法等信息) - 使用 man
  • 只记得部分命令关键字 - 使用 man -k keywords

2. 命令常见用法

2.1. help

help 命令用于查看 Shell 内部命令的帮助信息。而对于外部命令的帮助信息只能使用 man 或者 info 命令查看。

示例:

root@linux-pc:~# help if
if: if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
    根据条件执行命令。
    
    `if COMMANDS'列表被执行。如果退出状态为零,则执行`then COMMANDS' 
    列表。否则按顺序执行每个 `elif COMMANDS'列表,并且如果它的退出状态为
    零,则执行对应的 `then COMMANDS' 列表并且 if 命令终止。否则如果存在的
    情况下,执行 `else COMMANDS'列表。整个结构的退出状态是最后一个执行
    的命令的状态,或者如果没有条件测试为真的话,为零。
    
    退出状态:
    返回最后一个执行的命令的状态。

2.2. whatis

whatis 用于查询一个命令执行什么功能。

示例:

# 查看 man 命令的简要说明
root@linux-pc:~# whatis man
man (1)              - an interface to the system reference manuals
man (7)              - macros to format man pages


# 查看以 loca 开拓的命令的简要说明
root@linux-pc:~# whatis -w "loca*"
localc (1)           - LibreOffice office suite
locale (1)           - get locale-specific information
locale (5)           - describes a locale definition file
locale (7)           - description of multilanguage support
locale-gen (8)       - generates localisation files from templates
locale.conf (5)      - Configuration file for locale settings
locale.gen (5)       - Configuration file for locale-gen
Locale::gettext (3pm) - message handling functions
localeconv (3)       - get numeric formatting information
localectl (1)        - Control the system locale and keyboard layout settings
localedef (1)        - compile locale definition files
localtime (3)        - transform date and time to broken-down time or ASCII
localtime (5)        - Local timezone configuration file
localtime_r (3)      - transform date and time to broken-down time or ASCII

2.3. info

info 是 Linux 下 info 格式的帮助指令。

示例:

# 查看 man 命令的详细说明
root@linux-pc:~# info man
【展开一个“man”使用手册】

2.4. which

which 命令用于查找并显示给定命令的绝对路径,环境变量 PATH 中保存了查找命令时需要遍历的目录。which 指令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

示例:

# 查找命令的路径
root@linux-pc:~# which pwd
/usr/bin/pwd

说明:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!

[root@localhost ~]# which cd

cd 命令找不到是因为 cd 是 bash 内建的命令,但是 which 默认是找 PATH 内所规范的目录。

2.5. whereis

whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man 说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

示例:

# 将相关的文件都查找出来
root@linux-pc:~# whereis git
git: /usr/bin/git /usr/share/man/man1/git.1.gz

2.6. man

man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。

示例:

root@linux-pc:~# man date  #查看 date 命令的帮助手册 
root@linux-pc:~# man 3 printf  # 查看 printf 命令的帮助手册中的第 3 类
root@linux-pc:~# man -k key # 根据命令中部分关键字来查询命令
Compose (5)          - X client mappings for multi-key input sequences
add_key (2)          - add a key to the kernel's key management facility
apt-key (8)          - APT key management utility
authorized_keys (5)  - OpenSSH daemon
ckbcomp (1)          - compile a XKB keyboard description to a keymap suitable for loadkeys or kbdcontrol
dsa (1ssl)           - DSA key processing
dumpkeys (1)         - dump keyboard translation tables
ec (1ssl)            - EC key processing
Ed25519 (7ssl)       - EVP_PKEY Ed25519 and Ed448 support
Ed448 (7ssl)         - EVP_PKEY Ed25519 and Ed448 support
ftok (3)             - convert a pathname and a project identifier to a System V IPC key
gendsa (1ssl)        - generate a DSA private key from a set of parameters
genpkey (1ssl)       - generate a private key
genrsa (1ssl)        - generate an RSA private key
getkeycodes (8)      - print kernel scancode-to-keycode mapping table
Glib::KeyFile (3pm)  - Parser for .ini-like files
gnome-keyring (1)    - The gnome-keyring commandline tool
gnome-keyring-3 (1)  - The gnome-keyring commandline tool
gnome-keyring-daemon (1) - The gnome-keyring daemon
gpg-agent (1)        - Secret key management for GnuPG
(省略)

man 的帮助手册中,将帮助文档分为了 9 个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看;(一般我们查询 bash 命令,归类在 1 类中)。

man 页面的分类(常用的是分类 1 和分类 3):

  1. 可执行程序或 shell 命令
  2. 系统调用(内核提供的函数)
  3. 库调用(程序库中的函数)
  4. 特殊文件(通常位于 /dev)
  5. 文件格式和规范,如 /etc/passwd
  6. 游戏
  7. 杂项(包括宏包和规范,如 man(7),groff(7))
  8. 系统管理命令(通常只针对 root 用户)
  9. 内核例程 [非标准]

前面说到使用 whatis 会显示命令所在的具体的文档类别,我们学习如何使用它

root@linux-pc:~# whatis printf
printf (1)           - format and print data
printf (3)           - formatted output conversion
root@linux-pc:~# man 1 printf
(printf说明文档)

二、Linux 文件目录管理

关键词:cd, ls, pwd, mkdir, rmdir, tree, touch, ln, rename, stat, file, chmod, chown, locate, find, cp, scp, mv, rm

1. Linux 文件目录工作机制

1.1. Linux 目录结构

linux 目录结构是树形结构,其根目录是 /

1.2. Linux 文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:

root@linux-pc:~# ls -l
总用量 3692
-rw-r--r-- 1 root root     67 726 17:01 001.c
-rw-r--r-- 1 root root    382 726 16:58 1.txt
drwxr-xr-x 2 root root   4096 69 19:46 公共的
drwxr-xr-x 2 root root   4096 69 19:46 模板
drwxr-xr-x 2 root root   4096 69 19:46 视频
drwxr-xr-x 2 root root   4096 69 19:46 图片
drwxr-xr-x 2 root root   4096 69 19:46 文档
drwxr-xr-x 2 root root   4096 69 19:46 下载
drwxr-xr-x 2 root root   4096 69 19:46 音乐
drwxr-xr-x 2 root root   4096 612 20:19 桌面
-rwxr-xr-x 1 root root  16696 726 17:01 a.out

实例中,下载文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为rwx的三个参数的组合。其中,r 代表可读(read)、w 代表可写(write)、x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
文件属性

从左至右用 0-9 这些数字来表示。

  • 第 0 位确定文件类型
  • 第 1-3 位确定属主(该文件的拥有者)拥有该文件的权限。
  • 第 4-6 位确定属组(拥有者的同组用户)拥有该文件的权限。
  • 第 7-9 位确定其他用户拥有该文件的权限。
  • 第 1、4、7 位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限。
  • 第 2、5、8 位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限。
  • 第 3、6、9 位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
1.2.1. Linux 文件属主和属组
root@linux-pc:~# ls -l
总用量 3692
-rw-r--r-- 1 root root     67 726 17:01 001.c
-rw-r--r-- 1 root root    382 726 16:58 1.txt
drwxr-xr-x 2 root root   4096 69 19:46 公共的
drwxr-xr-x 2 root root   4096 69 19:46 模板
drwxr-xr-x 2 root root   4096 69 19:46 视频
drwxr-xr-x 2 root root   4096 69 19:46 图片
drwxr-xr-x 2 root root   4096 69 19:46 文档
drwxr-xr-x 2 root root   4096 69 19:46 下载
drwxr-xr-x 2 root root   4096 69 19:46 音乐
drwxr-xr-x 2 root root   4096 612 20:19 桌面
-rwxr-xr-x 1 root root  16696 726 17:01 a.out
  • 对于文件来说,它都有一个特定的拥有者,也就是对该文件具有所有权的用户。
  • 同时,在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。
  • 文件拥有者以外的用户又可以分为文件拥有者的同组用户和其他用户。
  • 因此,Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。
  • 在以上实例中,下载文件是一个目录文件,属主和属组都为 root,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。

2. Linux 文件目录管理要点

2.1. 目录管理

  • 切换目录 - 使用 cd
  • 查看目录信息 - 使用 ls
  • 显示当前目录的绝对路径 - 使用 pwd
  • 树状显示目录的内容 - 使用 tree
  • 创建目录 - 使用 mkdir
  • 删除目录 - 使用 rmdir

2.2. 文件管理

  • 创建空文件 - 使用 touch
  • 为文件创建连接 - 使用 ln
  • 批量重命名 - 使用 rename
  • 显示文件的详细信息 - 使用 stat
  • 探测文件类型 - 使用 file
  • 设置文件或目录的权限 - 使用 chmod
  • 设置文件或目录的拥有者或所属群组 - 使用 chown
  • 查找文件或目录 - 使用 locate
  • 在指定目录下查找文件 - 使用 find
  • 查找命令的绝对路径 - 使用 which
  • 查找命令的程序、源代码等相关文件 - 使用 whereis

2.3. 文件和目录通用管理

  • 复制文件或目录 - 使用 cp
  • 复制文件或目录到远程服务器 - 使用 scp
  • 移动文件或目录 - 使用 mv
  • 删除文件或目录 - 使用 rm

3. 命令常见用法

3.1. cd

cd 命令用来切换工作目录。

示例:

root@linux-pc:~/test/test1/test2# cd # 切换到用户主目录
root@linux-pc:~# cd test/ 
root@linux-pc:~/test# cd test1/
root@linux-pc:~/test/test1# cd test2/
root@linux-pc:~/test/test1/test2# cd .. # 切换到上级目录
root@linux-pc:~/test/test1# cd test2/ 
root@linux-pc:~/test/test1/test2# cd ../.. # 切换到上两级目录
root@linux-pc:~/test# cd ~ # 切换到用户主目录
root@linux-pc:~# cd - # 切换到上一个工作目录
/root/test

3.2. ls

ls 命令用来显示目录信息。

示例:

# 列出当前目录可见文件
root@linux-pc:~/test# ls
a  test1
# 列出当前目录可见文件详细信息
root@linux-pc:~/test# ls -l
总用量 4
-rw-r--r-- 1 root root    0 812 14:38 a
drwxr-xr-x 3 root root 4096 812 14:39 test1
# 列出所有文件(包括隐藏)的详细信息
root@linux-pc:~/test# ls -la
总用量 12
drwxr-xr-x  3 root root 4096 812 14:39 .
drwx------ 22 root root 4096 812 15:15 ..
-rw-r--r--  1 root root    0 812 14:38 a
drwxr-xr-x  3 root root 4096 812 14:39 test1
# 列出详细信息并以可读大小显示文件大小
root@linux-pc:~/test# ls -lh
总用量 4.0K
-rw-r--r-- 1 root root    0 812 14:38 a
drwxr-xr-x 3 root root 4.0K 812 14:39 test1
# 按时间列出文件和文件夹详细信息
root@linux-pc:~/test# ls -lt
总用量 4
drwxr-xr-x 3 root root 4096 812 14:39 test1
-rw-r--r-- 1 root root    0 812 14:38 a
# 按修改时间列出文件和文件夹详细信息
root@linux-pc:~/test# ls -ltr
总用量 4
-rw-r--r-- 1 root root    0 812 14:38 a
drwxr-xr-x 3 root root 4096 812 14:39 test1
# 列出文件并标记颜色分类
root@linux-pc:~/test# ls --color=auto
a  test1

3.3. pwd

pwd 命令用来显示当前目录的绝对路径。

示例:

root@linux-pc:~/test# pwd
/root/test

3.4. mkdir

mkdir 命令用来创建目录。

示例:

root@linux-pc:~/test# ls
a  test1
# 在当前目录中创建 zp 和 zp 的子目录 test
root@linux-pc:~/test# mkdir -p zp/test
root@linux-pc:~/test# tree
.
├── a
├── test1
│   └── test2
└── zp
    └── test

4 directories, 1 file

# 在当前目录中创建 zp 和 zp 的子目录 test;权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
root@linux-pc:~/test# mkdir -p -m 750 zp1/test
root@linux-pc:~/test# tree
.
├── a
├── test1
│   └── test2
├── zp
│   └── test
└── zp1
    └── test
6 directories, 1 file
root@linux-pc:~/test# cd zp1
root@linux-pc:~/test/zp1# ls -l
总用量 4
drwxr-x--- 2 root root 4096 812 15:26 test
root@linux-pc:~/test/zp1# 

3.5. rmdir

rmdir 命令用来删除空目录。

示例:

# 删除子目录 test 和其父目录 zp
root@linux-pc:~/test# rmdir -p zp/test
root@linux-pc:~/test# rmdir -p zp1/test/
root@linux-pc:~/test# ls
a  test1

3.6. tree

tree 命令以树状显示目录。

示例:

#列出当前目录结构
root@linux-pc:~/test# tree
.
├── a
├── test1
│   └── test2
├── zp
│   └── test
└── zp1
    └── test
6 directories, 1 file
# 列出目录第一级文件名
root@linux-pc:~/test# tree -L 1
.
├── a
├── test1
├── zp
└── zp1
3 directories, 1 file

3.7. touch

touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建空文件。

示例:

root@linux-pc:~/test# ls -l
总用量 12
-rw-r--r-- 1 root root    0 812 14:38 a
drwxr-xr-x 3 root root 4096 812 14:39 test1
drwxr-xr-x 3 root root 4096 812 15:31 zp
drwxr-xr-x 3 root root 4096 812 15:31 zp1
root@linux-pc:~/test# touch a
root@linux-pc:~/test# ls -l
总用量 12
-rw-r--r-- 1 root root    0 812 16:06 a
drwxr-xr-x 3 root root 4096 812 14:39 test1
drwxr-xr-x 3 root root 4096 812 15:31 zp
drwxr-xr-x 3 root root 4096 812 15:31 zp1

3.8. ln

ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。

注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。

示例:

# 将目录 /usr/mengqc/mub1 下的文件 m2.c 链接到目录 /usr/liu 下的文件. a2.c
root@linux-pc:~/test# ln ./zp/a.c ./zp1/b.c

# 在建立一个符号链接文件c,使它指向b.c
root@linux-pc:~/test/zp1# ls
b.c  test
root@linux-pc:~/test/zp1# ln -s b.c c
root@linux-pc:~/test/zp1# ls
b.c  c  test
root@linux-pc:~/test/zp1# 

3.9. rename

rename 命令用字符串替换的方式批量重命名。

示例:

root@linux-pc:~/test/zp1# ls
b.h  b.txt  c  test#
#重命名b.h为b.c
root@linux-pc:~/test/zp1# rename 's/b.h/b.c/' b.c
root@linux-pc:~/test/zp1# ls
b.h  b.txt  c  test
# 把 .txt 后缀的改成 .html 后缀
root@linux-pc:~/test/zp1# rename 's/.txt/.html/' *
root@linux-pc:~/test/zp1# ls
b.h  b.html  c  test

3.10. stat

stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。

示例:

root@linux-pc:~/test/zp1# stat b.h
  文件:b.h
  大小:90        	块:8          IO 块:4096   普通文件
设备:805h/2053d	Inode:2494629     硬链接:2
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2023-08-12 16:15:54.476480766 +0800
最近更改:2023-08-12 16:15:32.300180970 +0800
最近改动:2023-08-12 16:32:41.629300420 +0800
创建时间:-
root@linux-pc:~/test/zp1# stat c
  文件:c -> b.c
  大小:3         	块:0          IO 块:4096   符号链接
设备:805h/2053d	Inode:2491063     硬链接:1
权限:(0777/lrwxrwxrwx)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2023-08-12 16:17:30.321776731 +0800
最近更改:2023-08-12 16:17:27.181734265 +0800
最近改动:2023-08-12 16:17:27.181734265 +0800
创建时间:-
root@linux-pc:~/test/zp1# 

3.11. file

file 命令用来探测给定文件的类型。file 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。

示例:

# 显示文件类型
root@linux-pc:~/test/zp1# file b.c
b.c: C source, ASCII text
# 不显示文件名称
root@linux-pc:~/test/zp1# file -b b.c
C source, ASCII text
# 显示 MIME 类型
root@linux-pc:~/test/zp1# file -i b.c
b.c: text/x-c; charset=us-ascii
# 显示符号链接的文件类型
root@linux-pc:~/test/zp1# file -L c
c: C source, ASCII text

3.12. chmod

chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 chmod 指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

知识扩展:

Linux 用 户分为:拥有者、组群(Group)、其他(other),Linux 系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及 root 的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!

linux 文件的用户权限的分析图

  -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆  ┆  ╰┈ 0 其他人
# ┆ ┆  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈  g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件

例:rwx   rw-  r–

r=读取属性  //值= 4
w=写入属性  //值= 2
x=执行属性  //值= 1

示例:

chmod u+x,g+w f01  # 为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01      # 对文件f01的u,g,o都设置可执行属性


chmod -R  755 /home/wwwroot/*
# 为文件b.c设置自己可以读写执行,组员可读写,所有人可读的权限
root@linux-pc:~/test/zp1# chmod u=rwx,g=rw,o=r b.c
root@linux-pc:~/test/zp1# ls -l
总用量 8
-rwxrw-r-- 2 root root   90 812 16:15 b.c
-rw-r--r-- 1 root root    0 812 16:28 b.html
lrwxrwxrwx 1 root root    3 812 16:17 c -> b.c
drwxr-xr-x 2 root root 4096 812 15:31 test
# 对文件b.c的u,g,o都设置可执行属性
root@linux-pc:~/test/zp1# chmod a+x b.c
root@linux-pc:~/test/zp1# ls -l
总用量 8
-rwxrwxr-x 2 root root   90 812 16:15 b.c
-rw-r--r-- 1 root root    0 812 16:28 b.html
lrwxrwxrwx 1 root root    3 812 16:17 c -> b.c
drwxr-xr-x 2 root root 4096 812 15:31 test
# 将目录下所有文件和文件夹设置为777权限
root@linux-pc:~/test/zp1# chmod -R 777 ./*
root@linux-pc:~/test/zp1# ls -l
总用量 8
-rwxrwxrwx 2 root root   90 812 16:15 b.c
-rwxrwxrwx 1 root root    0 812 16:28 b.html
lrwxrwxrwx 1 root root    3 812 16:17 c -> b.c
drwxrwxrwx 2 root root 4096 812 15:31 test

3.13. chown

chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D,用户组可以是组名或组 id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件拥有者和超级用户才可以便用该命令。

示例:

# 将b.c文件主改成user
oot@linux-pc:~/test/zp1# chown -R user b.c
root@linux-pc:~/test/zp1# ls -l
总用量 8
-rwxrwxrwx 2 user root   90 812 16:15 b.c
-rwxrwxrwx 1 root root    0 812 16:28 b.html
lrwxrwxrwx 1 root root    3 812 16:17 c -> b.c
drwxrwxrwx 2 root root 4096 812 15:31 test

3.14. locate

locate 命令和 slocate 命令都用来查找文件或目录。

locate 命令其实是 find -name 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。

示例:

# 查找和 pwd 相关的所有文件
locate pwd
/etc/.pwd.lock
/opt/Qt/5.15.2/Src/qtbase/tests/auto/tools/qmake/testdata/include_pwd
...

# 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
/snap/core20/1891/etc/shadow
/snap/core20/1891/etc/shells
/snap/core20/1974/etc/shadow
/snap/core20/1974/etc/shells
/snap/core22/817/etc/shadow
/snap/core22/817/etc/shells
/snap/core22/858/etc/shadow
/snap/core22/858/etc/shells

3.15. find

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "*.cpp"

# 列出当前目录及子目录下所有文件和文件夹
find .

# 在 /home 目录下查找以 .txt 结尾的文件名
find /home -name "*.txt"
# 同上,但忽略大小写
find /home -iname "*.txt"

# 当前目录及子目录下查找所有以 .txt 和 .pdf 结尾的文件
find . -name "*.txt" -o -name "*.pdf"

# 匹配文件路径或者文件
find /usr/ -path "*local*"

# 基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
# 同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"

# 找出 /home 下不是以 .txt 结尾的文件
find /home ! -name "*.txt"

3.16. cp

cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

示例:

3.16.1. 参数
  • 源文件:制定源文件列表。默认情况下,cp 命令不能复制目录,如果要复制目录,则必须使用-R选项;
  • 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。

示例:

# 将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1
cp file /usr/men/tmp/file1

# 将目录 /usr/men下的所有文件及其子目录复制到目录 /usr/zh 中
cp -r /usr/men /usr/zh

# 强行将 /usr/men下的所有文件复制到目录 /usr/zh 中,无论是否有文件重复
cp -rf /usr/men/* /usr/zh

# 将目录 /usr/men 中的以 m 打头的所有 .c 文件复制到目录 /usr/zh 中
cp -i /usr/men m*.c /usr/zh

3.17. scp

scp 命令用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有 cp,不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外,scp 还非常不占资源,不会提高多少系统负荷,在这一点上,rsync 就远远不及它了。虽然 rsync 比 scp 会快一点,但当小文件众多的情况下,rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。

示例:

# 拷贝文件到远程服务器的指定目录
scp a.out root@172.20.145.120:/root
root@172.20.145.120 password: 
a.out                                                                           100%   16KB   1.1MB/s   00:00    

# 拷贝目录到远程服务器的指定目录
scp -r test root@172.20.145.120:/root
root@172.20.145.120 password: 
a.c                                                                             100%   90    13.0KB/s   00:00    
a                                                                               100%    0     0.0KB/s   00:00    
c                                                                               100%   90    17.0KB/s   00:00    
b.c                                                                             100%   90    15.2KB/s   00:00    
b.html                                                                          100%    0     0.0KB/s   00:00    

3.18. mv

mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source 表示源文件或目录,target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

示例:

mv file1.txt /home/office/                      # 移动单个文件
mv file2.txt file3.txt file4.txt /home/office/  # 移动多个文件
mv *.txt /home/office/                          # 移动所有 txt 文件
mv dir1/ /home/office/                          # 移动目录
mv /usr/men/* .                                 # 将指定目录中的所有文件移到当前目录中

mv file1.txt file2.txt          # 重命名文件
mv dir1/ dir2/                  # 重命名目录
mv -v *.txt /home/office        # 打印移动信息
mv -i file1.txt /home/office    # 提示是否覆盖文件

mv -uv *.txt /home/office       # 源文件比目标文件新时才执行更新
mv -vn *.txt /home/office       # 不要覆盖任何已存在的文件
mv -f *.txt /home/office        # 无条件覆盖已经存在的文件
mv -bv *.txt /home/office       # 复制时创建备份

3.19. rm

rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

rm test.txt               # 删除文件
rm -i test.txt test2.txt  # 交互式删除文件
rm -r *                   # 删除当前目录下的所有文件和目录
rm -r testdir             # 删除目录下的所有文件和目录
rm -rf testdir            # 强制删除目录下的所有文件和目录
rm -v testdir             # 显示当前删除操作的详情

3.20. 相互免秘钥登录

(1)生产密钥对

先进入A服务器的root目录,使用cd ~命令即可进入root目录,在root目录下找到.ssh目录,.ssh目录是隐藏的,使用ls -a就可以看到,然后使用ssh-keygen -t rsa命令生成密钥对。

(2)授权

授权的过程其实就是将A服务器的公钥分别给自己、B、C都拷贝一份。使用命令"ssh-copy-id ip地址",期间需要输入密码。

ssh-keygen -t rsa #生产密钥对
ssh-copy-id 172.20.145.120 #发送秘钥
ssh 172.20.145.120 #登录远程主机

三、 Linux 文件内容查看编辑

关键词:cat, head, tail, more, less, sed, vi, grep

1. Linux 文件内容查看编辑要点

  • 连接文件并打印到标准输出设备 - 使用 cat
  • 显示指定文件的开头若干行 - 使用 head
  • 显示指定文件的末尾若干行,常用于实时打印日志文件内容 - 使用 tail
  • 显示文件内容,每次显示一屏 - 使用 more
  • 显示文件内容,每次显示一屏 - 使用 less
  • 自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等 - 使用 sed
  • 文本编辑器 - 使用 vi
  • 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用 grep

2. 命令常见用法

2.1. cat

cat 命令用于连接文件并打印到标准输出设备上。

示例:

# 在屏幕上显示文件 a.c 的内容
root@linux-pc:~/test/zp# cat a.c 
#include<stdio.h>
int main(){
	printf("Hello world!\n");
	printf("Hello!");
	return 0;
}

#同时显示文件 b.c 和 b.html 的内容
root@linux-pc:~/test/zp1# cat b.c b.html 
#include<stdio.h>
int main(){
	printf("Hello world!\n");
	printf("Hello!");
	return 0;
}

hello ! this is b.html

# 将文件 b.c 和 b.html合并后放入文件 bb.txt 中
root@linux-pc:~/test/zp1# cat b.c b.html > bb.txt
root@linux-pc:~/test/zp1# cat bb.txt 
#include<stdio.h>
int main(){
	printf("Hello world!\n");
	printf("Hello!");
	return 0;
}

hello ! this is b.html

2.2. head

head 命令用于显示文件的开头内容。在默认情况下,head 命令显示文件的头部 10 行内容。

head b.c

2.3. tail

tail 命令用于显示文件的尾部内容。在默认情况下,tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。

示例:

tail file           # 显示文件file的最后10行
tail -n +20 file    # 显示文件file的内容,从第20行至文件末尾
tail -c 10 file     # 显示文件file的最后10个字符

2.4. more

more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:

  • 按 Space 键:显示文本的下一屏内容。
  • 按 Enier 键:只显示文本的下一行内容。
  • 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • 按 H 键:显示帮助屏,该屏上有相关的帮助信息。
  • 按 B 键:显示上一屏内容。
  • 按 Q 键:退出 rnore 命令。

示例:

# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc b.c

# 显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。
more -c -10 b.c

2.5. less

less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。

示例:

less b.c

2.6. sed

sed 是一种流编辑器,它是文本处理工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

示例:

# 替换文本中的字符串
sed 's/book/books/' b.c

# -n 选项 和 p 命令 一起使用表示只打印那些发生替换的行
sed -n 's/test/TEST/p' b.c

# 直接编辑文件选项 -i ,会匹配 file 文件中每一行的第一个 book 替换为 books
sed -i 's/book/books/g' b.c

# 使用后缀 /g 标记会替换每一行中的所有匹配
sed 's/book/books/g' b.c

# 删除空白行
sed '/^$/d' b.c

# 删除文件的第2行
sed '2d' b.c

# 删除文件的第2行到末尾所有行
sed '2,$d' b.c

# 删除文件最后一行
sed '$d' b.c

# 删除文件中所有开头是test的行
sed '/^test/'d b.c

2.7. vi

vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim,它是 vi 的增强版(vi Improved),与 vi 编辑器完全兼容,而且实现了很多增强功能。

vim b.c

2.8. grep

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

示例:

# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
$ grep "class" . -R -n

# 忽略匹配样式中的字符大小写
$ echo "hello world" | grep -i "HELLO"

# 匹配多个模式:
$ grep -e "class" -e "vitural" b.c

# 只在目录中所有的.php和.html文件中递归搜索字符"main()"
$ grep "main()" . -r --include *.{php,html}

# 在搜索结果中排除所有README文件
$ grep "main()" . -r --exclude "README"

# 在搜索结果中排除filelist文件列表里的文件
$ grep "main()" . -r --exclude-from filelist

四、Linux 文件压缩和解压

关键词:tar, gzip, zip, unzip

1. Linux 文件压缩和解压要点

  • 压缩和解压 tar 文件 - 使用 tar
  • 压缩和解压 gz 文件 - 使用 gzip
  • 压缩和解压 zip 文件 - 分别使用 zipunzip

2. 命令常见用法

2.1. tar

tar 命令可以为 linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
参数讲解:
-c表示产生新的包
-r表示增加文件的意思
-u表示更新文件
-t列出包中的文件
-x解开包的意思
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
上边的参数根据压缩和解压档案时进行选择
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 这个参数是必须要存在的。

示例:

tar -cvf a.tar ./            # 仅打包,不压缩
tar -zcvf a.tar.gz ./        # 打包后,以 gzip 压缩
tar -jcvf a.tar.bz2 ./       # 打包后,以 bzip2 压缩

tar -ztvf a.tar.gz           # 查阅上述 tar 包内有哪些文件
tar -zxvf a.tar.gz           # 将 tar 包解压缩
tar -zxvf a.tar.gz a         # 只将 tar 内的部分文件解压出来

2.2. gzip

gzip 命令用来压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出“.gz”扩展名。

gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip 不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和 tar 命令一起构成 Linux 操作系统中比较流行的压缩文件格式。据统计,gzip 命令对文本文件有 60%~ 70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
-a或——ascii:使用ASCII文字模式;
-d或–decompress或----uncompress:解开压缩文件;
-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h或——help:在线帮助;
-l或——list:列出压缩文件的相关信息;
-L或——license:显示版本与版权信息;
-n或–no-name:压缩文件时,不保存原来的文件名称及时间戳记;
-N或——name:压缩文件时,保存原来的文件名称及时间戳记;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩文件是否正确无误;
-v或——verbose:显示指令执行过程;
-V或——version:显示版本信息;
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
–best:此参数的效果和指定“-9”参数相同;
–fast:此参数的效果和指定“-1”参数相同。
-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6。

示例:

gzip * # 将所有文件压缩成 .gz 文件
gzip -l * # 详细显示压缩文件的信息,并不解压
gzip -dv * # 解压上例中的所有压缩文件,并列出详细的信息
gzip -r log.tar     # 压缩一个 tar 备份文件,此时压缩文件的扩展名为.tar.gz
gzip -rv test/      # 递归的压缩目录
gzip -dr test/      # 递归地解压目录

2.3. zip

zip 命令可以用来解压缩文件,或者对文件进行打包操作。zip 是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。
-v :可视化操作,显示压缩的执行过程,默认就是可视化
-q : 静默操作,不显示指令执行过程
-r :表示递归打包包含子目录的全部内容
-d :从压缩文件内删除指定的文件
-n :n为一个数字,压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好
-e :加密压缩文件
-u :追加文件到zip压缩包中

示例:

# 将 /home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r test.zip test

2.4. unzip

unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。
-l:显示压缩文件内所包含的文件;
-t:检查压缩文件是否正确;
-o:不必先询问用户,unzip执行后覆盖原有的文件;
-n:解压缩时不要覆盖原有的文件;
-q:执行时不显示任何信息;
-d<目录>:指定文件解压缩后所要存储的目录;
例:将test.zip文件解压到www目录下,覆盖原有文件且不显示信息

示例:

unzip test.zip              # 解压 zip 文件
unzip -n test.zip -d /tmp  # 在指定目录下解压缩
unzip -o test.zip -d /tmp  # 在指定目录下解压缩,如果有相同文件存在则覆盖
unzip -v test.zip           # 查看压缩文件目录,但不解压

五、Linux 用户管理

关键词:groupadd, groupdel, groupmod, useradd, userdel, usermod, passwd, su, sudo

1. Linux 用户管理要点

  • 创建用户组 - 使用 groupadd
  • 删除用户组 - 使用 groupdel
  • 修改用户组信息 - 使用 groupmod
  • 创建用户 - 使用 useradd
  • 删除用户 - 使用 userdel
  • 修改用户信息 - 使用 usermod
  • 设置用户认证信息 - 使用 passwd
  • 切换用户 - 使用 su
  • 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 sudo

2. 命令常见用法

2.1. groupadd

groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。

示例:

# 建立一个新组,并设置组 ID 加入系统
$ groupadd -g 344 jsdigname

2.2. groupdel

groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括 /ect/group/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

示例:

$ groupadd damon  # 创建damon用户组
$ groupdel damon  # 删除这个用户组

2.3. groupmod

groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称。

2.4. useradd

useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

示例:

# 新建用户加入组
$ useradd –g admin –G users    # -g:加入主要组、-G:加入次要组

# 建立一个新用户账户,并设置 ID
$ useradd dz -u 501

可以使用adduser来快速添加新用户

2.5. userdel

userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

示例:

现在有个用户 linuxde,其 home 目录位于/var目录中,删除这个用户:

userdel linuxde       # 删除用户linuxde,但不删除其家目录及文件;
userdel -r linuxde    # 删除用户linuxde,其 home 目录及文件一并删除;

2.6. usermod

usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。

示例:

# 将 newuser2 添加到组 staff 中
$ usermod -G staff newuser2

# 修改 newuser 的用户名为 newuser1
$ usermod -l newuser1 newuser

# 锁定账号 newuser1
$ usermod -L newuser1

# 解除对 newuser1 的锁定
$ usermod -U newuser1

2.7. passwd

passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

示例:

# 如果是普通用户执行 passwd 只能修改自己的密码。
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
$ passwd linuxde    # 更改或创建linuxde用户的密码;
Changing password for user linuxde.
New UNIX password:          # 请输入新密码;
Retype new UNIX password:   # 再输入一次;
passwd: all authentication tokens updated successfully. # 成功;

# 普通用户如果想更改自己的密码,直接运行 passwd 即可,比如当前操作的用户是 linuxde。
$ passwd
Changing password for user linuxde. # 更改linuxde用户的密码;
(current) UNIX password:   # 请输入当前密码;
New UNIX password:         # 请输入新密码;
Retype new UNIX password:  # 确认新密码;
passwd: all authentication tokens updated successfully. # 更改成功;

# 比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
$ passwd -l linuxde    # 锁定用户linuxde不能更改密码;
Locking password for user linuxde.
passwd: Success           # 锁定成功;

$ su linuxde   # 通过su切换到linuxde用户;
$ passwd      # linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password:          # 输入linuxde的当前密码;
passwd: Authentication token manipulation error     # 失败,不能更改密码;

$ passwd -d linuxde  # 清除linuxde用户密码;
Removing password for user linuxde.
passwd: Success                         # 清除成功;

$ passwd -S linuxde    # 查询linuxde用户密码状态;
Empty password.                         # 空密码,也就是没有密码;

2.8. su

su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

示例:

# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
$ su -c ls root

# 变更帐号为 root 并传入`-f`选项给新执行的 shell:
$ su root -f

# 变更帐号为 test 并改变工作目录至 test 的家目录:
$ su -test

2.9. sudo

sudo 命令用来以其他身份来执行命令,预设的身份为 root。在 /etc/sudoers 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo,则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。

示例:

# 指定用户执行命令
$ sudo -u user ls -l
# 列出目前的权限
$ sudo -l
# 显示sudo设置
$ sudo -L
2.9.1. 给普通用户授权 sudo

假设要给普通用户 mary 配置 sudo 权限:

  1. /etc/sudoers 文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers
  2. 在该文件中添加 mary ALL=(ALL) ALL ,保存并退出,让 mary 具有 sudo 的所有权限
  3. 再将 /etc/sudoers 的权限恢复到默认状态:chmod u-w /etc/sudoers
2.9.2. 免密码授权 sudo

与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL


六、Linux 系统管理

关键词:lsb_release, reboot, exit, shutdown, date, ps, kill, systemctl, service, crontab

1. Linux 系统管理要点

  • 查看 Linux 系统发行版本
    • 使用 lsb_release此命令适用于所有的 Linux 发行版本)
    • 使用 cat /etc/redhat-release(此方法只适合 Redhat 系的 Linux)
  • 查看 CPU 信息 - 使用 cat /proc/cpuinfo
  • 重新启动 Linux 操作系统 - 使用reboot
  • 退出 shell,并返回给定值 - 使用 exit
  • 关闭系统 - 使用 shutdown
  • 查看或设置系统时间与日期 - 使用date
  • 挂载文件系统 - 使用 mount
  • 取消挂载文件系统 - 使用umount
  • 查看系统当前进程状态 - 使用 ps
  • 删除当前正在运行的进程 - 使用kill
  • 启动、停止、重启、关闭、显示系统服务(Centos7),使用systemctl
  • 启动、停止、重启、关闭、显示系统服务(Centos7 以前),使用service
  • 管理需要周期性执行的任务,使用crontab

2. 命令常见用法

2.1. lsb_release

lsb_release 不是 bash 默认命令,如果要使用,需要先安装。

安装方法:

  1. 执行 apt-get install lsb-core -y
  2. 安装完成,执行lsb_release

2.2. reboot

reboot 命令用来重新启动正在运行的 Linux 操作系统。

示例:

reboot        # 重开机。
reboot -w     # 做个重开机的模拟(只有纪录并不会真的重开机)。

2.3. exit

exit 命令同于退出 shell,并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。

示例:

# 退出当前 shell
[root@localhost ~]# exit
logout

# 在脚本中,进入脚本所在目录,否则退出
cd $(dirname $0) || exit 1

# 在脚本中,判断参数数量,不匹配就打印使用方式,退出
if [ "$#" -ne "2" ]; then
    echo "usage: $0 <area> <hours>"
    exit 2
fi

# 在脚本中,退出时删除临时文件
trap "rm -f tmpfile; echo Bye." EXIT

# 检查上一命令的退出码
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
    echo "O.K"
fi

2.4. shutdown

shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。

示例:

# 指定现在立即关机
shutdown -h now

# 指定 5 分钟后关机,同时送出警告信息给登入用户
shutdown +5 "System will shutdown after 5 minutes"

2.5. date

date 命令是显示或设置系统时间与日期。

示例:

# 格式化输出
date +"%Y-%m-%d"
2009-12-07

# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19

# 2 秒后输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31

# 普通转格式
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00

# 格式转换后时间游走
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37

# 加减操作
date +%Y%m%d                   # 显示前天年月日
date -d "+1 day" +%Y%m%d       # 显示前一天的日期
date -d "-1 day" +%Y%m%d       # 显示后一天的日期
date -d "-1 month" +%Y%m%d     # 显示上一月的日期
date -d "+1 month" +%Y%m%d     # 显示下一月的日期
date -d "-1 year" +%Y%m%d      # 显示前一年的日期
date -d "+1 year" +%Y%m%d      # 显示下一年的日期

# 设定时间
date -s                        # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523               # 设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01               # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23"  # 这样可以设置全部时间
date -s "01:01:01 20120523"    # 这样可以设置全部时间
date -s "2012-05-23 01:01:01"  # 这样可以设置全部时间
date -s "20120523 01:01:01"    # 这样可以设置全部时间

# 有时需要检查一组命令花费的时间
#!/bin/bash

start=$(date +%s)
nmap man.linuxde.net &> /dev/null

end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.

2.6. ps

ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

示例:

# 按内存资源的使用量对进程进行排序
ps aux | sort -rnk 4

# 按 CPU 资源的使用量对进程进行排序
ps aux | sort -nk 3

常用pstree显示进程树

2.7. kill

kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。

示例:

# 列出所有信号名称
 kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
#常用的信号
HUP     1    终端挂断
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
KILL    9    强制终止
TERM   15    终止
CONT   18    继续(与STOP相反,fg/bg命令)
STOP   19    暂停(同 Ctrl + Z)
# 先用 ps 查找进程,然后用 kill 杀掉
ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

kill 14617

常用pkill,通过进程名杀死进程

-o:仅向找到的最小(起始)进程号发送信号;
-n:仅向找到的最大(结束)进程号发送信号;
-P:指定父进程号发送信号;
-g:指定进程组;
-t:指定开启进程的终端。

示例:

pkill firefox

2.8. systemctl

systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。

示例:

# 1.启动 nfs 服务
systemctl start nfs-server.service

# 2.设置开机自启动
systemctl enable nfs-server.service

# 3.停止开机自启动
systemctl disable nfs-server.service

# 4.查看服务当前状态
systemctl status nfs-server.service

# 5.重新启动某服务
systemctl restart nfs-server.service

# 6.查看所有已启动的服务
systemctl list -units --type=service

# 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept

# 8. 彻底关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

七、Linux 网络管理

关键词:curl, wget, telnet, ip, hostname, ifconfig, route, ssh, ssh-keygen, firewalld, iptables, host, nslookup, nc/netcat, ping, traceroute, netstat

1. Linux 网络应用要点

  • 下载文件 - 使用 curlwget
  • telnet 方式登录远程主机,对远程主机进行管理 - 使用 telnet
  • 查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道 - 使用 ip
  • 查看和设置系统的主机名 - 使用 hostname
  • 查看和配置 Linux 内核中网络接口的网络参数 - 使用 ifconfig
  • 查看和设置 Linux 内核中的网络路由表 - 使用 route
  • ssh 方式连接远程主机 - 使用 ssh
  • 为 ssh 生成、管理和转换认证密钥 - 使用 ssh-keygen
  • 查看、设置防火墙(Centos7),使用 firewalld
  • 查看、设置防火墙(Centos7 以前),使用 iptables
  • 查看域名信息 - 使用 host, nslookup
  • 设置路由 - 使用 nc/netcat
  • 测试主机之间网络是否连通 - 使用 ping
  • 追踪数据在网络上的传输时的全部路径 - 使用 traceroute
  • 查看当前工作的端口信息 - 使用 netstat

2. 命令常见用法

2.1. curl

curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具,curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

示例:

# 下载文件
$ curl http://man.linuxde.net/text.iso --silent

# 下载文件,指定下载路径,并查看进度
$ curl http://man.linuxde.net/test.iso -o filename.iso --progress
########################################## 100.0%

2.2. wget

wget 命令用来从指定的 URL 下载文件。

示例:

# 使用 wget 下载单个文件
$ wget http://www.linuxde.net/testfile.zip

2.3. telnet

telnet 命令用于登录远程主机,对远程主机进行管理。

示例:

telnet 192.168.2.10
Trying 192.168.2.10...
Connected to 192.168.2.10 (192.168.2.10).
Escape character is '^]'.

    localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)

login: root
Password:
Login incorrect

2.4. ip

ip 命令用来查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道,是 Linux 下较新的功能强大的网络配置工具。

示例:

ip link show                     # 查看网络接口信息
ip link set eth0 upi             # 开启网卡
ip link set eth0 down            # 关闭网卡
ip link set eth0 promisc on      # 开启网卡的混合模式
ip link set eth0 promisc offi    # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400        # 设置网卡最大传输单元
ip addr show     # 查看网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址

ip route show # 查看系统路由
ip route add default via 192.168.1.254   # 设置系统默认路由
ip route list                 # 查看路由信息
ip route add 192.168.4.0/24  via  192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
ip route del default          # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由

2.5. hostname

hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改 /etc/hosts/etc/sysconfig/network 的相关内容。

示例:

$ hostname
linux-pc

2.6. ifconfig

ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

示例:

# 查看网络设备信息(激活状态的)
ifconfig 
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.141.60  netmask 255.255.255.0  broadcast 172.20.141.255
        inet6 fe80::ed95:ade:a90d:8fe6  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:73:02:a2  txqueuelen 1000  (以太网)
        RX packets 4048  bytes 1626631 (1.6 MB)
        RX errors 0  dropped 17  overruns 0  frame 0
        TX packets 704  bytes 96483 (96.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 197  bytes 18133 (18.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 197  bytes 18133 (18.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.7. route

route 命令用来查看和设置 Linux 内核中的网络路由表,route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。

示例:

# 查看当前路由
route
内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
default         _gateway        0.0.0.0         UG    100    0        0 enp0s3
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
172.20.141.0    0.0.0.0         255.255.255.0   U     100    0        0 enp0s3


route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0    # 添加网关/设置网关
route add -net 224.0.0.0 netmask 240.0.0.0 reject      # 屏蔽一条路由
route del -net 224.0.0.0 netmask 240.0.0.0             # 删除路由记录
route add default gw 192.168.120.240                   # 添加默认网关
route del default gw 192.168.120.240                   # 删除默认网关

2.8. ssh

ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。

示例:

# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170

2.9. ssh-keygen

ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。

2.10. firewalld

firewalld 命令是 Linux 上的防火墙软件(Centos7 默认防火墙)。

2.10.1. firewalld 的基本使用
  • 启动 - systemctl start firewalld
  • 关闭 - systemctl stop firewalld
  • 查看状态 - systemctl status firewalld
  • 开机禁用 - systemctl disable firewalld
  • 开机启用 - systemctl enable firewalld
2.10.2. 使用 systemctl 管理 firewalld 服务

systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。

  • 启动一个服务 - systemctl start firewalld.service
  • 关闭一个服务 - systemctl stop firewalld.service
  • 重启一个服务 - systemctl restart firewalld.service
  • 显示一个服务的状态 - systemctl status firewalld.service
  • 在开机时启用一个服务 - systemctl enable firewalld.service
  • 在开机时禁用一个服务 - systemctl disable firewalld.service
  • 查看服务是否开机启动 - systemctl is-enabled firewalld.service
  • 查看已启动的服务列表 - systemctl list-unit-files|grep enabled
  • 查看启动失败的服务列表 - systemctl --failed
2.10.3. 配置 firewalld-cmd
  • 查看版本 - firewall-cmd --version
  • 查看帮助 - firewall-cmd --help
  • 显示状态 - firewall-cmd --state
  • 查看所有打开的端口 - firewall-cmd --zone=public --list-ports
  • 更新防火墙规则 - firewall-cmd --reload
  • 查看区域信息: firewall-cmd --get-active-zones
  • 查看指定接口所属区域 - firewall-cmd --get-zone-of-interface=eth0
  • 拒绝所有包:firewall-cmd --panic-on
  • 取消拒绝状态 - firewall-cmd --panic-off
  • 查看是否拒绝 - firewall-cmd --query-panic
2.10.4. 在防火墙中开放一个端口
  • 添加(–permanent 永久生效,没有此参数重启后失效) - firewall-cmd --zone=public --add-port=80/tcp --permanent
  • 重新载入 - firewall-cmd --reload
  • 查看 - firewall-cmd --zone= public --query-port=80/tcp
  • 删除 - firewall-cmd --zone= public --remove-port=80/tcp --permanent

2.11. iptables

iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

示例:

# 开放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

# 屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

# 查看已添加的iptables规则
iptables -L -n -v
内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
default         _gateway        0.0.0.0         UG    100    0        0 enp0s3
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
172.20.141.0    0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
root@linux-pc:~# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

2.12. host

host 命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。

-a:显示详细的DNS信息;
-c<类型>:指定查询类型,默认值为“IN“;
-C:查询指定主机的完整的SOA记录;
-r:在查询域名时,不使用递归的查询方式;
-t<类型>:指定查询的域名信息类型;
-v:显示指令执行的详细信息;
-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4:使用IPv4;
-6:使用IPv6.

示例:

host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 39.156.66.18
www.a.shifen.com has address 39.156.66.14

host -a www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39037
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.			IN	ANY

;; ANSWER SECTION:
www.baidu.com.		67	IN	CNAME	www.a.shifen.com.

Received 58 bytes from 127.0.0.53#53 in 3 ms

2.13. nslookup

nslookup 命令是常用域名查询工具,就是查 DNS 信息用的命令。

示例:

nslookup www.baidu.com
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 180.101.50.188
Name:	www.a.shifen.com
Address: 180.101.50.242

2.14. nc/netcat

nc 命令是 netcat 命令的简称,都是用来设置路由器。

示例:

# TCP 端口扫描
nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open

# UDP 端口扫描
[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000  # 扫描192.168.0.3 的端口 范围是 1-1000

2.15. ping

ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

示例:

ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=51 时间=20.2 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=51 时间=19.7 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=51 时间=23.5 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=4 ttl=51 时间=20.1 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=5 ttl=51 时间=18.2 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=6 ttl=51 时间=19.4 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=7 ttl=51 时间=20.1 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=8 ttl=51 时间=18.2 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=9 ttl=51 时间=22.8 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=10 ttl=51 时间=17.9 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=11 ttl=51 时间=20.6 毫秒
64 字节,来自 39.156.66.14 (39.156.66.14): icmp_seq=12 ttl=51 时间=20.0 毫秒
^C
--- www.a.shifen.com ping 统计 ---
已发送 12 个包, 已接收 12 个包, 0% 包丢失, 耗时 11038 毫秒
rtt min/avg/max/mdev = 17.869/20.053/23.472/1.626 ms

2.16. traceroute

traceroute 命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是 40 字节。

示例:

 1  _gateway (172.20.141.254)  3.592 ms  5.938 ms  8.291 ms
 2  * * *
 3  * * *
 4  112.226.0.1 (112.226.0.1)  9.786 ms  9.749 ms  9.713 ms
 5  27.223.58.137 (27.223.58.137)  13.335 ms 124.129.152.29 (124.129.152.29)  17.443 ms 27.223.58.21 (27.223.58.21)  16.846 ms
 6  119.167.87.181 (119.167.87.181)  14.272 ms 119.167.86.125 (119.167.86.125)  21.000 ms 119.167.86.157 (119.167.86.157)  7.882 ms
 7  * 119.167.86.65 (119.167.86.65)  6.627 ms *
 8  219.158.113.246 (219.158.113.246)  14.268 ms * *
 9  dns18.online.tj.cn (117.8.222.18)  16.702 ms no-data (125.39.198.210)  21.370 ms no-data (125.39.198.18)  14.921 ms
10  * no-data (125.39.198.18)  16.678 ms no-data (125.39.198.210)  15.824 ms

2.17. netstat

netstat 命令用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。

示例:

# 列出所有端口 (包括监听和未监听的)
netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口

# 列出所有处于监听状态的 Sockets
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

# 显示每个协议的统计信息
netstat -s   显示所有端口的统计信息
netstat -st   显示TCP端口的统计信息
netstat -su   显示UDP端口的统计信息

八、Linux 硬件管理

关键词:df, du, top, free, iotop

1. Linux 硬件管理要点

  • 查看磁盘空间 - 使用 df
  • 查看文件或目录的磁盘空间 - 使用du
  • 实时查看系统整体运行状态(如:CPU、内存) - 使用 top
  • 查看已使用和未使用的内存 - 使用free
  • 查看磁盘 I/O 使用状况 - 使用iotop

2. 命令常见用法

2.1. df

df 命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

示例:

# 查看系统磁盘设备,默认是 KB 为单位
df
文件系统           1K-块     已用      可用 已用% 挂载点
udev             1962088        0   1962088    0% /dev
tmpfs             400548     1456    399092    1% /run
/dev/sda5       61092684 34033812  23923128   59% /
tmpfs            2002720        0   2002720    0% /dev/shm
tmpfs               5120        4      5116    1% /run/lock
tmpfs            2002720        0   2002720    0% /sys/fs/cgroup
/dev/loop0           128      128         0  100% /snap/bare/5
/dev/loop2         65024    65024         0  100% /snap/core20/1974
/dev/loop4         75648    75648         0  100% /snap/core22/858
/dev/loop5        358144   358144         0  100% /snap/gnome-3-38-2004/143
/dev/loop3         75648    75648         0  100% /snap/core22/817
/dev/loop1         65024    65024         0  100% /snap/core20/1891
/dev/loop7         93952    93952         0  100% /snap/gtk-common-themes/1535
/dev/loop10        54656    54656         0  100% /snap/snapd/19457
/dev/loop8         47104    47104         0  100% /snap/snap-store/638
/dev/loop6        497280   497280         0  100% /snap/gnome-42-2204/120
/dev/loop11        12672    12672         0  100% /snap/snap-store/959
/dev/loop9         54656    54656         0  100% /snap/snapd/19361
/dev/loop12       358144   358144         0  100% /snap/gnome-3-38-2004/140
/dev/loop13       497280   497280         0  100% /snap/gnome-42-2204/126
/dev/sda1         523248        4    523244    1% /boot/efi
share          669156348 94098276 575058072   15% /media/sf_share
tmpfs             400544       28    400516    1% /run/user/0


# 使用 -h 选项以 KB 以上的单位来显示,可读性高
df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            1.9G     0  1.9G    0% /dev
tmpfs           392M  1.5M  390M    1% /run
/dev/sda5        59G   33G   23G   59% /
tmpfs           2.0G     0  2.0G    0% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/loop0      128K  128K     0  100% /snap/bare/5
/dev/loop2       64M   64M     0  100% /snap/core20/1974
/dev/loop4       74M   74M     0  100% /snap/core22/858
/dev/loop5      350M  350M     0  100% /snap/gnome-3-38-2004/143
/dev/loop3       74M   74M     0  100% /snap/core22/817
/dev/loop1       64M   64M     0  100% /snap/core20/1891
/dev/loop7       92M   92M     0  100% /snap/gtk-common-themes/1535
/dev/loop10      54M   54M     0  100% /snap/snapd/19457
/dev/loop8       46M   46M     0  100% /snap/snap-store/638
/dev/loop6      486M  486M     0  100% /snap/gnome-42-2204/120
/dev/loop11      13M   13M     0  100% /snap/snap-store/959
/dev/loop9       54M   54M     0  100% /snap/snapd/19361
/dev/loop12     350M  350M     0  100% /snap/gnome-3-38-2004/140
/dev/loop13     486M  486M     0  100% /snap/gnome-42-2204/126
/dev/sda1       511M  4.0K  511M    1% /boot/efi
share           639G   90G  549G   15% /media/sf_share
tmpfs           392M   28K  392M    1% /run/user/0


# 查看全部文件系统
df -a

2.2. du

du 命令也是查看使用空间的,但是与 df 命令不同的是:du 命令是对文件和目录磁盘使用的空间的查看,还是和 df 命令有一些区别的。

示例:

du # 显示目录或者文件所占空间
du log2012.log # 显示指定文件所占空间
du scf # 查看指定目录的所占空间
du log30.tar.gz log31.tar.gz # 显示多个文件所占空间
du -s # 只显示总和的大小
du -s scf # 显示目录的大小

2.3. top

top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。

2.4. free

free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

示例:

free
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:     4005444     1221928     1179224       38736     1604292     2501460
交换:     2097148           0     2097148

free -t    # 以总和的形式显示内存的使用信息
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:     4005444     1222124     1178984       38736     1604336     2501272
交换:     2097148           0     2097148
总量:     6102592     1222124     3276132

free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令

# 显示内存使用情况
free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:        3911        1194        1150          37        1566        2442
交换:        2047           0        2047

2.5. iotop

iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息。Linux 下的 IO 统计工具如 iostat,nmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。

示例:

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND        
      1 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  init splash
      2 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [kthreadd]
      3 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [rcu_gp]
      4 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [rcu_par_gp]
      5 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [slub_flushwq]
      6 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [netns]
      8 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [kworker/0:0H]
     10 be/0 root        0.00 B/s    0.00 B/s  ?unavailable?  [mm_percpu_wq]
     11 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [rcu_tasks_rude_]
     12 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [rcu_tasks_trace]
     13 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [ksoftirqd/0]
     14 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [rcu_sched]
     15 rt/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [migration/0]
     16 rt/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [idle_inject/0]
     18 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [cpuhp/0]
     19 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [cpuhp/1]
     20 rt/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [idle_inject/1]
     21 rt/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [migration/1]

九、Linux 软件管理

关键词: yum, apt-getdpkg

1. yum

yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

示例:

部分常用的命令包括:

  • 自动搜索最快镜像插件:yum install yum-fastestmirror
  • 安装 yum 图形窗口插件:yum install yumex
  • 查看可能批量安装的列表:yum grouplist

安装

yum install              #全部安装
yum install package1     #安装指定的安装包package1
yum groupinsall group1   #安装程序组group1

更新和升级

yum update               #全部更新
yum update package1      #更新指定程序包package1
yum check-update         #检查可更新的程序
yum upgrade package1     #升级指定程序包package1
yum groupupdate group1   #升级程序组group1

查找和显示

yum info package1      #显示安装包信息package1
yum list               #显示所有已经安装和可以安装的程序包
yum list package1      #显示指定程序包安装情况package1
yum groupinfo group1   #显示程序组group1信息yum search string 根据关键字string查找安装包
yum search <keyword>   #查找软件包

删除程序

yum remove <package_name>          #删除程序包package_name
yum groupremove group1             #删除程序组group1
yum deplist package1               #查看程序package1依赖情况

清除缓存

yum clean packages       #清除缓存目录下的软件包
yum clean headers        #清除缓存目录下的 headers
yum clean oldheaders     #清除缓存目录下旧的 headers

1.1. yum 源

yum 的默认源是国外的,下载速度比较慢,所以最好替换为一个国内的 yum 源。

推荐 yum 国内源源地址
http://mirrors.163.com/Centos6:http://mirrors.aliyun.com/repo/Centos-6.repo
Centos7:http://mirrors.aliyun.com/repo/Centos-7.repo
http://mirrors.aliyun.com/Centos6:http://mirrors.163.com/.help/CentOS6-Base-163.repo
Centos7:http://mirrors.163.com/.help/CentOS7-Base-163.repo

注意:Cento5 已废弃,只能使用 http://vault.centos.org/ 替换,但由于是国外镜像,速度较慢。

替换方法,以 aliyun CentOS7 为例:

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

2. apt-get

apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起,大体就如同 Windows 上的安装文件。

示例:

使用 apt-get 命令的第一步就是引入必需的软件库,Debian 的软件库也就是所有 Debian 软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get 就能搜索到我们想要的软件。/etc/apt/sources.list 是存放这些地址列表的配置文件,其格式如下:

deb [web 或 ftp 地址][发行版名字] [main/contrib/non-free]
我们常用的 Ubuntu 就是一个基于 Debian 的发行,我们使用 apt-get 命令获取这个列表,以下是我整理的常用命令:

在修改 /etc/apt/sources.list 或者 /etc/apt/preferences 之后运行该命令。

# 更新 apt-get
apt-get update

# 安装一个软件包
apt-get install packagename

# 卸载一个已安装的软件包(保留配置文件)
apt-get remove packagename

# 卸载一个已安装的软件包(删除配置文件)
apt-get –purge remove packagename

# 如果需要空间的话,可以让这个命令来删除你已经删掉的软件
apt-get autoclean apt

# 把安装的软件的备份也删除,不过这样不会影响软件的使用的
apt-get clean

# 更新所有已安装的软件包
apt-get upgrade

# 将系统升级到新版本
apt-get dist-upgrade

3. dpkg

dpkg命令 是Debian Linux系统用来安装、创建和管理软件包的实用工具。
-i:安装软件包;
-r:删除软件包;
-P:删除软件包的同时删除其配置文件;
-L:显示于软件包关联的文件;
-l:显示已安装软件包列表;
–unpack:解开软件包;
-c:显示软件包内文件列表;
–confiugre:配置软件包。

示例:

dpkg -i package.deb     # 安装包
dpkg -r package         # 删除包
dpkg -P package         # 删除包(包括配置文件)
dpkg -L package         # 列出与该包关联的文件
dpkg -l package         # 显示该包的版本
dpkg --unpack package.deb  # 解开deb包的内容
dpkg -S keyword            # 搜索所属的包内容
dpkg -l                    # 列出当前已安装的包
dpkg -c package.deb        # 列出deb包的内容
dpkg --configure package   # 配置包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Du_zhe_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值