LV02-01-Linux-04-常用命令

本文主要是Linux——常用命令相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、man命令

man是manual的简称,中文称之为手册。man手册是linux系统提供的一种帮助手册,通过这个命令我们可以得到一些帮助信息, 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是,不仅可以查看Linux中命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等帮助信息。man手册页文件存放在/usr/share/man目录下。

1. man手册安装

通常来说,系统只会默认安装第 1 册的 man 手册,也就是查找 shell 命令的 man手册,若是发现自己的man手册有缺失,我们可以通过以下命令安装:

1
2
3
4
sudo apt-get install manpages
sudo apt-get install manpages-dev
sudo apt-get install manpages-posix
sudo apt-get install manpages-posix-dev

2. man命令

2.1使用格式

使用 man 命令可以找到特定的联机帮助页,并提供简短的命令说明。联机帮助页提供了指定命令 command_name 的相关信息,包括:名称、函数、语法以及可选参数描述等。无论帮助有多长,都遵循这个格式显示。在页面很多的情况下使用 PageUp 和 PageDown 键翻页。最后,使用 :q 退出帮助页面。一般使用格式为:

1
man [option] <name>

【参数说明】

  • option :man 命令的一些选项,是可选的。
点击查看常见 option 选项
option说明
-a在所有的man帮助手册中搜索
-f显示给定关键字的简短描述信息
-p指定内容时使用分页程序
-M指定man手册搜索的路径
-w显示文件所在位置
  • name :要查询的命令名称或者要查询的函数名等。

2.2使用实例

2.2.1查询命令的帮助文档

我们在终端执行以下命令:

1
man ls

然后我们就会进入man手册,我们会得到以下信息:

image-20221018174753735

2.2.2查询有哪些页有帮助信息

我们在终端执行以下命令:

1
man -f read

然后我们回的到以下信息:

1
2
hk@vm:~$ man -f read
read (2) - read from a file descriptor

3.帮助信息的分类

我们在终端执行以下命令:

1
man man

我们会得到man命令的班助手册,man命令帮助我们查找需要的信息,这些信息可以分为以下几类:

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

可以看到其实man手册一共有 9 个章节,这 9 个章节帮助文档分别管理不同的帮助信息。我们可以使用前边的编号来直接查询相应册中的帮助信息,比如:

1
2
man read   # 将会得到 read 命令的帮助手册
man 2 read # 将会得到 read() 函数的帮助手册

默认将按预定的顺序查找所有可用的章节 (默认是“ 1 n l 8 3 2 3posix 3pm 3perl 5 4 9 6 7 ”,除非被 /etc/manpath.config 中的 SECTION 指令覆盖),并只显示找到的第一个 页,即使多个章节中都有这个 页面。额,写笔记的时候忘记在哪看到的了,现在也看不太懂,不过我们知道man是按预定顺序来查找的就行,这不是重点。

4.具体帮助页

一个手册页面包含若干个小节。小节名称通常包括 NAME,概述(SYNOPSIS),配置(CONFIGURATION),描述(DESCRIPTION),选项(OPTIONS),退出状态(EXIT STATUS),返回值(RETURN VALUE),错误(ERRORS),环境(ENVIRONMENT),文件(FILES),版本(VERSIONS),符合标准(CONFORMING TO),注(NOTES),缺陷(BUGS),示例(EXAMPLE),作者(AUTHORS),和 亦见(SEE ALSO)。常见的几个如下:

名称 含义
NAME 命令的名称
SYNOPSIS 命令的语法格式
DESCRIPTION 命令的一般描述以及用途
OPTIONS 描述命令所有的参数或选项
SEE ALSO 列出联机帮助页中与该命令直接相关或功 能相近的其他命令
BUGS 解释命令或其输出中存在的任何已知的问题或缺陷
EXAMPLES 普通的用法示例
AUTHORS 联机帮助页以及命令的作者

二、用户管理

1.基础知识

  • 用户的属性:用户名、口令、用户 ID ( UID )、用户主目录( HOME )和用户 shell 。

  • /etc/passwd 文件: /etc/passwd 文件是系统能够识别的用户清单。用户登陆时,系统查询这个文件,确定用户的 UID 并验证用户口令。包括:登陆名、经过加密的口令、 UID 、默认的 GID 、个人信息、主目录、登陆 shell 等

  • /etc/group 文件:包含了 UNIX 组的名称和每个组中成员列表每一行代表一个组,包括4个字段:组名、加密的口令、 GID 号、成员列表( , 隔开)。

2.查看当前用户:whoami

2.1使用格式

whoami 命令用于显示自身用户名称,一般不用带参数。一般格式如下:

1
whoami

2.2使用实例

1
2
hk@vm:~$ whoami
hk

3.查看登录用户:who

3.1使用格式

who 命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID 、使用的终端机、从哪边连上来的、上线时间、呆滞时间、 CPU 使用量、动作等等。一般格式如下:

1
who [option]

【参数说明】

  • option :命令的选项,是可选的。
点击查看 option
option说明
-H 显示各栏位的标题信息列
--heading
-i 显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
-u
--idle
-m 此参数的效果和指定"am i"字符串相同;
-q 或--count:只显示登入系统的帐号名称和总人数;
-s 此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
-w 显示用户的信息状态栏;
-T
--mesg
--message
--writable
--help 在线帮助;
--version 显示版本信息。

3.2使用实例

3.2.1显示当前登录系统的用户

1
2
hk@vm:~$ who
hk tty7 2022-10-13 09:42 (:0)

3.2.1显示信息带标题栏

1
2
3
4
k@vm:~$ who -H
名称 线路 时间 备注
hk tty7 2022-10-13 09:42 (:0)

3.2.1显示终端属性和标题栏

1
2
3
hk@vm:~$ who -TH
名称 线路 时间 备注
hk + tty7 2022-10-13 09:42 (:0)

4.退出登录账户:exit

4.1使用格式

exit 命令用于退出目前的 shell 或者退出当前用户(root用户下常用)。

1
exit [状态值]

【参数说明】

  • 状态值 :就是退出的时候一个反馈给系统的值,是可选的。一般在终端使用的时候是用于退出 root 用户,一般不写状态值。

4.2使用实例

1
2
3
4
hk@vm:~$ su
密码:
root@vm:/home/hk# exit
exit

5.添加用户账号:useradd、adduser

5.1两个命令区别

useradd 和 adduser 命令都可以用于添加用户账号,参数基本上是一模一样,但是在 Ubuntu 中,两者都不使用参数时是有区别的:

  • useradd 在使用该命令创建用户是不会在 /home 下自动创建与用户名同名的用户目录,而且不会自动选择 shell 版本,也没有设置密码,那么这个用户是不能登录的,需要使用 passwd 命令修改密码。
  • adduser 在使用该命令创建用户是会在 /home 下自动创建与用户名同名的用户目录,自动选择系统 shell 版本,会在创建时会提示输入密码,更加友好,一般推荐使用这个命令来创建用户。

5.2使用格式

useradd 命令的一般格式如下:

1
useradd [option] [user_name]

【参数说明】

  • option :选项。
点击查看 [option]
option说明
-c [备注]加上备注文字。备注文字会保存在passwd的备注栏位中
-d [登入目录]指定用户登入时的起始目录
-D变更预设值
-e [有效期限]指定帐号的有效期限
-f [缓冲天数]指定在密码过期后多少天即关闭该帐号
-g [群组]指定用户所属的群组
-G [群组]指定用户所属的附加群组
-m自动建立用户的登入目录
-M不要自动建立用户的登入目录
-n取消建立以用户名称为名的群组.
-r建立系统帐号
-s [shell]指定用户登入后所使用的shell
-u [userid]指定用户ID
  • user_name :要创建的用户的用户名。

【注意】

(1)使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

(2)使用的时候可能会需要添加 sudo,否则可能会提示 ” useradd: Permission denied “ 。

adduser 一般格式如下:

1
adduser [option] [user_name]

【参数说明】

  • option :选项。
点击查看 [option]
option说明
-c [备注]加上备注文字。备注文字会保存在passwd的备注栏位中
-d [登入目录]指定用户登入时的起始目录
-D变更预设值
-e [有效期限]指定帐号的有效期限
-f [缓冲天数]指定在密码过期后多少天即关闭该帐号
-g [群组]指定用户所属的群组
-G [群组]指定用户所属的附加群组
-m自动建立用户的登入目录
-M不要自动建立用户的登入目录
-n取消建立以用户名称为名的群组.
-r建立系统帐号
-s [shell]指定用户登入后所使用的shell
-u [userid]指定用户ID
  • user_name :要创建的用户的用户名。

【注意】

(1)使用 adduser 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

(2)使用的时候可能会需要添加 sudo,否则可能会提示 ” useradd: Permission denied “ 。

5.3使用实例

5.3.1 useradd 实例

  • 直接创建用户
1
2
3
4
5
6
7
8
9
hk@vm:~$ useradd aaa
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。

hk@vm:~$ sudo useradd aaa
[sudo] hk 的密码:

hk@vm:~$ ls /home/
hk

我们看一下 /etc/passwd 文件中的我们新创建的用户 aaa:

1
2
hk@vm:~$ cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:

从这里可以看出,我们直接创建用户的话,在 /home 目录下并没有自动生成新建用户的目录,但是指定了登录用户的时候的默认目录,并且我们创建用户还需要加上 sudo 。

  • 创建用户的时候指定家目录
1
2
3
4
5
6
7
8
hk@vm:~$ useradd -d /home/hk2 aaa
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。

hk@vm:~$ sudo useradd -d /home/hk2 aaa

hk@vm:~$ ls /home/
hk

我们看一下 /etc/passwd 文件中的我们新创建的用户 aaa :

1
2
hk@vm:~$ cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/hk2:

可以看到家目录已经不再是默认的 aaa 了,改为了我们指定的目录。

5.3.2 adduser 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
hk@vm:~$ adduser bbb
adduser:只有 root 才能将用户或组添加到系统。

hk@vm:~$ sudo adduser bbb
正在添加用户"bbb"...
正在添加新组"bbb" (1002)...
正在添加新用户"bbb" (1002) 到组"bbb"...
创建主目录"/home/bbb"...
正在从"/etc/skel"复制文件...
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
正在改变 bbb 的用户信息
请输入新值,或直接敲回车键以使用默认值
全名 []:
房间号码 []:
工作电话 []:
家庭电话 []:
其它 []:
这些信息是否正确? [Y/n]

hk@vm:~$ ls /home/
bbb hk

我们来看一下 /etc/passwd 文件中的我们新创建的用户 bbb:

1
2
hk@vm:~$ cat /etc/passwd | grep bbb
bbb:x:1002:1002:,,,:/home/bbb:/bin/bash

会发现,该命令同时为我们指定了shell。

6.修改用户密码:passwd

6.1使用格式

出于系统安全考虑, Linux 系统中的每一个帐号都必须同时具备用户名和密码, passwd 就是用来更改使用者的密码。需要说明的是,超级用户 root 可以修改所有其他用户的口令,而普通用户只能修改自己的用户口令,如果确要修改超级用户或其他用户口令的话,需要具有超级用户的权限。一般格式如下

1
passwd [option] <user_name>

【参数说明】

  • option : 选项。
点击查看 [option]
option说明
-d 删除密码。
-f 强迫用户下次登录时必须修改口令。
-k 更新只能发送在过期之后。
-g 修改群组密码。
-S 查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用。
-l 暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用。
-u 解锁用户,和 -l 选项相对应,也是只能 root 用户使用。
-n 天数 设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段。
-x 天数 设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段。
-w 天数 设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段。
-i 日期 设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
--stdin 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用。
  • user_name :需要修改密码的用户名。

【注意】

(1)使用的时候要注意加上 sudo。

6.2使用实例

1
2
3
4
5
6
7
hk@vm:~$ passwd bbb
passwd:您不能查看或更改 bbb 的密码信息。

hk@vm:~$ sudo passwd bbb
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码

7.删除用户:userdel、deluser

7.1两个命令区别

userdel 和 deluser 命令都用于删除用户,将一个用户从一个组中删除(即退出用户组)。 deluser 的选项要比 userdel 丰富,功能要更强大,其他的区别嘛,就不是很清楚了,后边要是发现有重大的区别的话再补充。

userdel 一般格式如下:

1
userdel [option] <user_name>

【参数说明】

  • option : 选项。
点击查看 [option]
option说明
-r 删除用户登入目录以及目录中所有文件
  • user_name :需要删除的用户的用户名。

deluser 一般格式如下:

1
deluser [option] <username>

【参数说明】

  • option : 选项。
点击查看 [option]
option说明
--quiet | -q 不将进程信息发给 stdout。
--help | -h 帮助信息。
--version | -v 版本号和版权。
--conf | -c file 以制定文件作为配置文件。
--remove-home 删除用户的主目录和邮箱。
--remove-all-files 删除用户拥有的所有文件。
--backup 删除前将文件备份。
--backup-to 备份的目标目录,默认是当前目录。
--system 只有当该用户是系统用户时才删除。
--only-if-empty 只有当该用户组中无成员时才删除
  • user_name :需要删除的用户的用户名。

7.3使用实例

7.3.1 userdel 实例

1
2
3
4
5
6
7
8
9
hk@vm:~$ cat /etc/passwd | grep bbb
bbb:x:1002:1002:,,,:/home/bbb:/bin/bash

hk@vm:~$ ls /home/
bbb hk

hk@vm:~$ sudo userdel bbb
hk@vm:~$ ls /home/
bbb hk

我们来看一下 /etc/passwd 文件中的我们新创建的用户 bbb:

1
hk@vm:~$ cat /etc/passwd | grep bbb

会发现用户已经删除了,但是用户目录没有删除,所以其实删除的时候可以加上 -r 选项。

7.3.2 deluser 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
hk@vm:~$ cat /etc/passwd | grep bbb
bbb:x:1002:1002:,,,:/home/bbb:/bin/bash
hk@vm:~$ ls /home/
bbb hk

hk@vm:~$ deluser --remove-home bbb
/usr/sbin/deluser:只有 root 才能从系统中删除用户或组。

hk@vm:~$ sudo deluser --remove-home bbb
正在寻找要备份或删除的文件...
正在删除文件...
正在删除用户 'bbb'...
警告:组"bbb"没有其他成员了。
userdel: user bbb is currently used by process 80839
/usr/sbin/deluser:"/usr/sbin/userdel bbb"返回错误代码 8,退出。

hk@vm:~$ ls /home/
hk

我们来看一下 /etc/passwd 文件中的我们新创建的用户 bbb:

1
hk@vm:~$ cat /etc/passwd | grep bbb

会发现用户已经删除了。

8.切换用户:su

8.1使用格式

su 命令用于临时改变用户身份,具有其他用户的权限。普通用户可以使用 su 命令临时具有超级用户的权限;超级用户也可以使用普通用户身份完成一些操作,除 root 外,需要键入该使用者的密码。。当需要放弃当前用户身份,可以使用 exit 命令切换回来。 su 命令的一般语法格式为:

1
su [option] [USER [ARG]]

【参数说明】

  • option :选项。
点击查看 [option]
option说明
-当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
-f 或 --fast不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment执行 su 时不改变当前的工作环境(不使用切换用户的配置文件)。
-c command 或 --command=command变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell 或 --shell=shell指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help显示说明文件
--version显示版本资讯
-l 或 --login同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号(默认是root)。
  • USER :欲变更的使用者帐号。
  • ARG :传入新的 shell 参数。

【注意】

使用 su 命令时,有 - 和没有 - 是完全不同的, - 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。

例如,普通用户 hk 通过 su 命令切换成 root 用户,但没有使用 - 选项,这样情况下,虽然看似是 root 用户,但系统中的 $PATH 环境变量依然是 hk 的(而不是 root 的),因此当前工作环境中,并不包含 /sbin 、 /usr/sbin 等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用。不仅如此,当 root 用户接受邮件时,会发现收到的是 hk 用户的邮件,因为环境变量 $MAIL 也没有切换。

8.2使用实例

1
2
3
hk@vm:~$ su bbb
密码:
bbb@vm:/home/hk$

9.查看有哪些用户组

要想查看当前系统中有哪些用户组,有下边几种方式。

1
2
3
getent group   # 方法一
cat /etc/group # 方法二
compgen -g # 方法三,只会显示用户名

10.查看用户在哪些组:groups

10.1使用格式

group 命令用于查询用户所在的组。

1
groups [option] <user_name>

【参数说明】

  • option :选项。
点击查看 [option]
option说明
--help 显示帮助信息
--version 显示版本信息
  • user_name :要查询的用户名。

10.2使用实例

1
2
hk@vm:~$ groups hk
hk : hk adm cdrom sudo dip plugdev lpadmin sambashare

11.修改用户属性:usermod

11.1使用格式

usermod 命令用来修改用户帐号的各项设定。

1
usermod [option1] [option2] <user_name>

【参数说明】

  • option1 :选项1。
点击查看 [option1]
option1 -c<备注> 修改用户帐号的备注文字。
-d<登入目录> 修改用户登入时的目录。
-m 修改用户的家目录通常和-d选项一起使用
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组,仅与-a选项一起使用。
-a 把用户追加到某些组中,仅与-G选项一起使用。
-l<帐号名称> 修改用户帐号名称。
-s 修改用户登入后所使用的shell。
-u 修改用户ID,该uid必须唯一 。
  • option2 :选项2。
点击查看 [option2]
option2 -L 锁定用户密码,使密码无效。
-U 解除密码锁定。
  • user_name :要修改属性的用户名。

11.2使用实例

1
usermod –d /home/newname –m –l newname oldname  # 用户oldname改名为newname,注意要同时更改家目录

12.修改文件权限:chmod

12.1文件权限说明

Linux/Unix 的文件调用权限分为三级 : 文件所有者( Owner )、用户组( Group )、其它用户( Other Users )。只有文件所有者和超级用户可以修改文件或目录的权限。

file type - 代表文件
d 代表目录
Owner
Group
Other Users
r read(可读)
w write(可写)
x execute(可执行)
- 无权限

例如:

image-20221020094556991

我们可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。

12.2使用格式

chmod 命令用于修改文件权限。

1
chmod [option] <mode> <file_name>

【参数说明】

  • option :选项。
点击查看 [option]
[-cfvR] -c 若该文件权限确实已经更改,才显示其更改动作
-f 若该文件权限无法被更改也不要显示错误讯息
-v 显示权限变更的详细资料
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
  • mode :权限设定字串(有两种模式:八进制数字模式和符号模式)。
点击查看 mode

要注意这里是三个八进制数,依次代表 Owner 、 Group 和 Other Users 。

1
2
# 三个 Octal_number 数字
Octal_number
点击查看详细参数说明
Octal_number 7 111 rwx 读 + 写 + 执行权限
6 110 rw- 读 + 写权限
5 101 r-x 读 + 执行权限
4 100 r-- 只有可读权限
3 011 -wx 写 + 执行 权限
2 010 -w- 只有可写权限
1 001 --x 只有可执行权限
0 000 --- 无权限
1
who operator permission
点击查看参数详细说明
who u user:文件所有者(Owner)
g group:文件所有者所在组(Group)
o others:所有其他用户(Other Users)
a all:所用用户, 相当于 ugo
operator + 为指定的用户类型增加权限
- 去除指定用户类型的权限
= 设置指定用户权限的设置,即将用户类型的所有权限重新设置
permission r 读,设置为可读权限
w 写,设置为可写权限
x 执行权限,设置为可执行权限
X 特殊执行权限,只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s setuid/gid:当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t 粘贴位,设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
  • file_name :要修改权限的文件名或者目录名。

【注意】有的文件修改权限时可能会需要管理员权限再能修改,此时可以加上 sudo 。

12.3使用实例

1
2
3
4
5
6
chmod ugo+r file.sh # 将文件 file.sh 设为所有人皆可读取
chmod a+r file.sh # 将文件 file.sh 设为所有人皆可读取
chmod ug+w,o-w file1.sh file2.sh # 将文件 file1.sh 与 file2.sh 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod -R a+r * # 当前目录下的所有文件与子目录皆设为任何人可读取

chmod 664 file.sh # 对file.sh的所有者和用户组设置读写权限, 为其其他用户设置读权限

三、进程管理

程序的一次执行就是一个进程 ( process ) ,进程相关信息都可以在 /proc/ 目录下找到。

1.显示进程的动态:ps

1.1使用格式

在 linux 中,使用 man ps 命令就可以看到详细的帮助手册,我们会发现,这个命令不仅选项多,而且为了适应不同的类 UNIX 系统,可用格式也有好几种,很难记忆,下边只列举几个常用的。

1
ps [option]

【参数说明】

  • option :选项。
点击查看 [option]

该命令选项很多,这里只列举常用的几个参数说明。

option说明
-A显示所有进程
a显示一个终端的所有进程,除会话引线外
u显示进程的归属用户及内存的使用情况
x显示没有控制终端的进程
-e显示所有进程
-l长格式显示更加详细的信息
-H显示树状结构
-T开启线程查看

1.2使用实例

1.2.1查询指定进程情况

我们可以使用管道来只显示特定名称的进程运行情况,一般格式如下:

1
ps [option] | grep <process_name>

例如,

1
ps -elf | grep a.out

此命令后边较为常用,可能会多次用到,它将显示名称为 a.out 的所有进程的信息。

1.2.2查看指定用户的进程

1
ps -u <user_name>

1.2.3查看指定进程的线程

1
2
ps -L <PID>
ps -eLf |grep a.out # 查看指定名称为 a.out 的进程及其创建的所有线程。

1.2.4 ps -aux

1
ps -aux

我是使用的 ubuntu ,在它里边加 - 或者不加好像都一样,使用 au 或者 aux 选项后,窗口会列出各进程的很多项信息,输出格式如下:

1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
点击查看显示进程信息参数说明
USER进程拥有者
PIDpid
%CPU占用的 CPU 使用率
%MEM占用的记忆体使用率
VSZ占用的虚拟记忆体大小
RSS占用的记忆体大小
TTY终端的次要装置号码 (minor device number of tty)
STAT该进程的状态
D不可被唤醒的睡眠状态,通常用于 I/O 情况。
R该进程正在运行。
S该进程处于睡眠状态,可被唤醒。
T停止状态,可能是在后台暂停或进程处于除错状态。
Z僵尸进程。进程已经中止,但是部分程序还在内存当中。
W没有足够的记忆体分页可分配
<高优先级(该状态在 BSD 格式中出现)。
N低优先级(该状态在 BSD 格式中出现)。
L被锁入内存(该状态在 BSD 格式中出现)。
s包含子进程(该状态在 BSD 格式中出现)。
l多线程(该状态在 BSD 格式中出现,小写L)。
+位于后台(该状态在 BSD 格式中出现)。
START进程开始时间
TIME执行的时间
COMMAND所执行的指令

1.2.5 ps -le

该命令可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级,使用该命令后,显示格式如下:

1
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
点击查看显示进程信息参数说明
F 进程标志,说明进程的权限,常见的标志有两个:
1:进程可以被复制,但是不能被执行
4:进程使用超级用户权限
S 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致
UID 运行此进程的用户的 ID
PID 进程的 ID
PPID父进程的 ID
C 该进程的 CPU 使用率,单位是百分比
PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行
NI 进程的优先级,数值越小,该进程越早被执行
ADDR该进程在内存的哪个位置
SZ 该进程占用多大内存
WCHAN该进程是否运行。"-"代表正在运行
TTY 该进程由哪个终端产生
TIME该进程占用 CPU 的运算时间,注意不是系统时间
CMD 产生此进程的命令名

1.2.6 ps -axjf

以树的形式列出终端的所有进程,可以与管道连用,查看一个进程的各个子进程的情况。

1.2.7 ps -eT

显示所有进程,并显示其子进程。使用命令后,显示信息格式如下:

1
PID    SPID TTY          TIME CMD

其中 SPID 就表示线程号。该命令也可以有如下用法:

1
2
3
ps -eT -p <pid>     # 显示指定的PID进程的所有线程
ps -eT | grep a.out # 显示进程 a.out 的所有线程
ps -T # 显示进程及其创建的线程的信息

2.实时显示进程:top

2.1使用格式

该命令用于监视进程,通常会全屏显示,而且会随着进程状态的变化不断更新。整个系统的信息也会显示,为查找问题提供了便利。它可以显示系统总共有多少CPU和内存资源以及负载平衡等信息。

1
top [option]

【参数说明】

  • option :选项
点击查看 [option]
option说明
-d改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
-q没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-c切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
-S累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
-s安全模式,将交谈式指令取消, 避免潜在的危机
-i不显示任何闲置 (idle) 或无用 (zombie) 的进程
-n更新的次数,完成后将会退出 top
-b批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
-p <PID>显示指定PID的进程

2.2显示信息详解

2.2.1 显示信息总览

1
2
3
4
5
6
7
8
top - 16:28:51 up  8:30,  1 user,  load average: 0.08, 0.02, 0.00
任务: 296 total, 1 running, 295 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3894.5 total, 1245.9 free, 1554.8 used, 1093.8 buff/cache
MiB Swap: 1162.4 total, 1162.4 free, 0.0 used. 2037.2 avail Mem

进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
1 root 20 0 165788 12284 7804 S 0.0 0.3 0:03.59 systemd

2.2.2 系统状态

1
top - 16:28:51 up  8:30,  1 user,  load average: 0.08, 0.02, 0.00
top - 16:28:51系统当前时间
up 8:30系统到目前为止已运行的时间
1 user当前登录系统的用户数量
load average: 0.08, 0.02, 0.00系统负载(任务队列的平均长度),3个数值分别为1分钟、5分钟、15分钟前到现在的平均值

2.2.3 进程状态信息

1
任务: 296 total,   1 running, 295 sleeping,   0 stopped,   0 zombie
任务: 296 total所有启动的进程数
1 running正在运行的进程数
295 sleeping挂起的进程数
0 stopped停止的进程数
0 zombie僵尸进程数

2.2.4 CPU占用情况

1
%Cpu(s):  0.5 us,  0.3 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
0.5 us用户空间占用CPU百分比
0.3 sy内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.2 id空闲CPU百分比
0.0 wa等待输入输入的CPU百分比
0.0 hi硬中断占用CPU百分比
0.0 si软中断CPU百分比
0.0 st虚拟CPU等待实际CPU的时间的百分比

2.2.5 Mem 内存信息(物理内存)

1
MiB Mem :   3894.5 total,   1245.9 free,   1554.8 used,   1093.8 buff/cache
3894.5 total物理内存总量
1245.9 free空闲物理内存
1554.8 used已经使用的物理内存
1093.8 buff/cache内核缓存内存量

2.2.6 Swap 交换内存(虚拟内存)

1
MiB Swap:   1162.4 total,   1162.4 free,      0.0 used.   2037.2 avail Mem 
1162.4 total交换区总量
1162.4 free空闲交换区总量
0.0 used已使用交互区总量
2037.2 avail Mem缓冲的交换区总量

2.2.7 进程信息

1
进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
PID进程ID
USER进程所有者
PR优先级
NInice值,负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES
RES进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA
SHR共享内存大小,单位kb
%CPU上传更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND命令名/命令行

2.3使用实例

1
top -p <PID>  # 实时查看某个进程。

3.以树状图显示进程:pstree  

3.1使用格式

1
pstree [option] [PID或user_name]

【参数说明】

  • option :选项。
点击查看 [option]
option说明
-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-c不使用精简法显示进程信息,即显示的进程中包含子进程和父进程
-n根据进程 PID 号来排序输出,默认是以程序名排序输出的
-p显示进程的 PID
-u显示进程对应的用户名称
  • PID或user_name :要查看的进程的PID或者进程名。

3.2使用实例

我们可以使用管道来只显示特定名称的进程运行情况:

1
2
3
4
pstree [option] | grep <process_name>

# 例如
pstree -p |grep a.out

4.终止进程:kill

4.1使用格式

1
kill -[signal] <PID>

kill 命令向指定的进程发出一个信号 signal ,在默认的情况下, kill 命令向指定进程发出信号 15 ,正常情况下,将杀死那些不捕捉或不忽略这个信号的进程。

【参数说明】

  • signal :要发送的信号编号。
点击查看 [signal]
signal编号signal说明
0EXIT程序退出时收到该信息
1HUP进程重启,挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3QUIT退出
9KILL杀死进程,即强制结束进程
11SEGV段错误
15TERM正常结束进程,是 kill 命令的默认信号

还有很多其他的,后边慢慢会接触到,特别是学习进程通信方式——信号的时候。

  • PID :发送的信号的目标进程的进程ID。

4.2使用实例

1
kill -9 8903 # 杀掉PID为8903的整个进程

5.查看进程堆栈:pstack

5.1使用格式

1
sudo pstack <pid> # 一般是需要加上sudo的

【说明】 pstack 的工作原理其实就是一个 shell 脚本,在脚本里面调用 gdb 来实现对应用进程各个线程堆栈的打印。

5.2安装与问题解决

该命令可以查看指定 PID 进程的堆栈情况,不过一般来说 Linux 中似乎不自带这个命令,需要自己安装,当我们直接输入 pstack 的时候可能会收到如下提示:

1
2
Command 'pstack' not found, but can be installed with:
sudo apt install pstack

按照提示,我们在终端输入以下命令进行安装:

1
sudo apt install pstack
点击查看使用问题及解决方法

我们直接输入一个进程号,使用 pstack 命令,例如在终端执行:

1
pstack 14071 # 当时运行死锁一节笔记的测试例程时得到的进程号

然后很不幸,我们会得到如下报错:

1
2
Could not attach to target 14071: Operation not permitted.
detach: No such process

可能是没有权限,我们加上 sudo :

1
pstack 14071

很不幸,不出意外的话,我们可能会收到如下提示:

1
2
3
14071: ./a.out
pstack: Input/output error
failed to read target.

这是怎么回事呢?不清楚啊,网上找了很久,似乎是因为这个命令 pstack 是一个脚本工具,它通过 apt 安装出来的程序好像是乱码,然后就不能运行了,我没有深究,按照解决办法,至少可以用了,后边研究明白了再补充吧。

  • 新建一个 pstack 文件
1
vim pstack
  • 添加以下内容并保存文件
点击查看脚本内容
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/sh
if test $# -ne 1; then
echo "Usage: basename $0 .sh <process-id>" 1>&2
exit 1
fi

if test ! -r /proc/$1; then
echo "Process $1 not found." 1>&2
exit 1
fi

# GDB doesn't allow "thread apply all bt" when the process isn't
# threaded; need to peek at the process to determine if that or the
# simpler "bt" should be used.

backtrace="bt"
if test -d /proc/$1/task ; then
# Newer kernel; has a task/ directory.
if test /bin/ls /proc/$1/task | /usr/bin/wc -l -gt 1 2>/dev/null ; then
backtrace="thread apply all bt"
fi
elif test -f /proc/$1/maps ; then
# Older kernel; go by it loading libpthread.
if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then
backtrace="thread apply all bt"
fi
fi

GDB=${GDB:-/usr/bin/gdb}

if $GDB -nx --quiet --batch --readnever > /dev/null 2>&1; then
readnever=--readnever
else
readnever=
fi

# Run GDB, strip out unwanted noise.
$GDB --quiet $readnever -nx /proc/$1/exe $1 <<EOF 2>&1 |
set width 0
set height 0
set pagination no
$backtrace
EOF
/bin/sed -n \
-e 's/^\((gdb) \)*//' \
-e '/^#/p' \
-e '/^Thread/p'

  • pstack 配置到系统
1
sudo cp pstack /usr/bin

5.3使用实例

1
sudo pstack <pid>

之前做测试的时候一个打印出来的效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Thread 3 (LWP 14824 "a.out"):
#0 0x00007f2f4eb6dff0 in __lll_lock_wait () from /lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007f2f4eb66733 in pthread_mutex_lock () from /lib/x86_64-linux-gnu/libpthread.so.0
#2 0x00007ffd15297cde in ?? ()
#3 0x00005592ec341040 in ?? ()
#4 0x0000000000000000 in ?? ()
Thread 2 (LWP 14823 "a.out"):
#0 0x00007f2f4eb6dff0 in __lll_lock_wait () from /lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007f2f4eb66733 in pthread_mutex_lock () from /lib/x86_64-linux-gnu/libpthread.so.0
#2 0x00007ffd15297cde in ?? ()
#3 0x00005592ec341080 in ?? ()
#4 0x0000000000000000 in ?? ()
Thread 1 (LWP 14822 "a.out"):
#0 0x00007f2f4ea475df in clock_nanosleep () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x0000000000008000 in ?? ()
#2 0x0000000000000000 in ?? ()

6.进程线程调度和优先级:chrt

6.1使用格式

1
chrt [options] -p [priority] pid # 一般是需要加上sudo的

【说明】 这里我就不详细说明了,具体的使用可以查看 man 手册。

6.2使用实例

1
2
3
4
5
6
7
hk@ubuntu-22-04:~$ chrt -m
SCHED_OTHER 最小/最大优先级 : 0/0
SCHED_FIFO 最小/最大优先级 : 1/99
SCHED_RR 最小/最大优先级 : 1/99
SCHED_BATCH 最小/最大优先级 : 0/0
SCHED_IDLE 最小/最大优先级 : 0/0
SCHED_DEADLINE 最小/最大优先级 : 0/0

四、文件管理

1.查看文件信息:ls

1.1使用格式

ls 是英文单词 list 的简写,其功能为列出目录的内容。一般格式如下:

1
ls [option]

【参数说明】

  • option :选项。
点击查看 [option]
option说明
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小
-t 将文件依建立时间之先后次序列出
-R 同时列出所有子目录层

【注意】

(1)-h 参数要与 -l 参数一起使用。

(2)多个参数可以合并到一起书写,没有先后顺序。如 -lh 与 -hl 一样。

(3)ls 命令还可与通配符搭配使用

通配符 说明
* 代表文件名中所有字符
? 代表文件名中任意一个字符
[] “[”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
[abc]:匹配a、b、c中的任意一个
[a-f]:匹配从a到f范围内的的任意一个字符
\ 如果要使通配符作为普通字符使用,可以在其前面加上转义字符。“?”和“*”处于方括号内时不用使用转义字符就失去通配符的作用。

1.2使用实例

1
2
3
4
5
6
7
8
9
10
11
hk@vm:~/5linux$ ls -alh
总用量 110M
drwxrwxr-x 6 hk hk 4.0K 9月 28 21:32 .
drwxr-xr-x 29 hk hk 4.0K 10月 17 11:39 ..
drwxr-xr-x 37 hk hk 4.0K 9月 29 07:32 busybox-1.29.0
-rwxrwxr-x 1 hk hk 2.2M 9月 28 21:32 busybox-1.29.0.tar.bz2
drwxrwxr-x 24 hk hk 4.0K 9月 27 16:24 linux-3.14
drwxrwxr-x 24 hk hk 4.0K 10月 17 15:16 linux-imx-rel_imx_4.1.15_2.1.0_ga
-rwxrwxr-x 1 hk hk 97M 9月 25 17:22 linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
drwxrwxr-x 25 hk hk 4.0K 10月 15 17:13 uboot-imx-rel_imx_4.1.15_2.1.0_ga
-rwxrwxr-x 1 hk hk 11M 9月 25 17:23 uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

2.输出重定向命令:>

2.1使用格式

Linux 允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中,其实就相当于修改了默认输出的方向。

如: ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )

一般格式如下:

1
command > file_name

【注意】
(1)> 输出重定向会覆盖原来的内容。

(2)>> 输出重定向则会追加到文件的尾部

(3)若是 file_name 文件不存在,则会直接创建。

2.2使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
hk@vm:~/5linux$ ls -alh > test.txt
hk@vm:~/5linux$ cat test.txt
总用量 110M
drwxrwxr-x 6 hk hk 4.0K 10月 20 10:21 .
drwxr-xr-x 29 hk hk 4.0K 10月 17 11:39 ..
drwxr-xr-x 37 hk hk 4.0K 9月 29 07:32 busybox-1.29.0
-rwxrwxr-x 1 hk hk 2.2M 9月 28 21:32 busybox-1.29.0.tar.bz2
drwxrwxr-x 24 hk hk 4.0K 9月 27 16:24 linux-3.14
drwxrwxr-x 24 hk hk 4.0K 10月 17 15:16 linux-imx-rel_imx_4.1.15_2.1.0_ga
-rwxrwxr-x 1 hk hk 97M 9月 25 17:22 linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
-rw-rw-r-- 1 hk hk 0 10月 20 10:21 test.txt
drwxrwxr-x 25 hk hk 4.0K 10月 15 17:13 uboot-imx-rel_imx_4.1.15_2.1.0_ga
-rwxrwxr-x 1 hk hk 11M 9月 25 17:23 uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

3.分屏显示:more

查看内容时,在信息过长无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用 more 命令,每次只显示一页,按下空格键可以显示下一页,按下 q键 退出显示,按下 h键 可以获取帮助。一般格式如下:

1
more

4.管道:|

4.1使用格式

一个命令的输出可以通过管道作为另一个命令的输入,一般格式如下:

1
cmd1 | cmd2

4.2使用实例

1
2
#  命令1 | 命令2
ls -lh | more

5.清屏:clear

清除终端上的显示(类似于 DOS 的 cls 清屏功能),也可使用快捷键: Ctrl + l ( “l” 为字母 )。一般格式如下:

1
clear

6.切换工作目录:cd

6.1使用格式

cd 命令用于更换工作目录。一般格式如下:

1
cd <dir_name>

【命令说明】

命令 说明
cd 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。
cd ~ 切换到当前用户的主目录(/home/用户目录)
cd . 切换到当前目录
cd .. 切换到当前目录的上一级目录
cd - 切换到上次所在的目录

【注意】

(1)Linux 所有的目录和文件名区分大小写。

(2)cd 后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。

(3)如果路径是从根路径开始的,则路径的前面需要加上 “ / ” ,如 “ /mnt ” ,通常进入某个目录里的文件夹,前面不用加 “ / ” 。

6.2使用实例

1
cd / # 进入根目录

7.显示当前路径:pwd

7.1使用格式

pwd 命令用于显示当前的工作目录。一般格式如下:

1
pwd

7.2使用实例

1
2
hk@vm:~/5linux$ pwd
/home/hk/5linux

8.创建目录:mkdir

8.1使用格式

mkdir 命令用于创建一个新的目录。一般格式如下:

1
mkdir [option] <dir_name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-p 递归创建目录
  • dir_name :要创建的目录名称。

【注意】新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。、

8.2使用实例

1
2
3
4
5
6
7
8
9
10
hk@vm:~/6temp$ mkdir a
hk@vm:~/6temp$ mkdir -p b/c/d
hk@vm:~/6temp$ tree
.
├── a
└── b
└── c
└── d

4 directories, 0 files

9.删除目录: rmdir

9.1使用格式

rmdir 命令用于删除一个目录。一般格式如下:

1
rm <dir_name>

【注意】必须离开目录,并且目录必须为空目录,不然提示删除失败。

9.2使用实例

1
2
3
hk@vm:~/6temp$ rmdir a/
hk@vm:~/6temp$ ls
b

10.删除文件:rm

rm 命令用于删除文件或目录。一般格式如下:

1
rm [option] <name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-i 以进行交互式方式执行(提示是否确认删除)
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数
-v 显示详细的删除过程

【注意】 rm 命令删除的文件不能恢复,严禁 sudo rm -rf /* 。

10.2使用实例

  • 删除文件
1
2
3
4
5
6
7
8
hk@vm:~/6temp$ ls
a.c b b.vim

hk@vm:~/6temp$ rm -i a.c
rm:是否删除普通空文件 'a.c'? y
hk@vm:~/6temp$ ls
b b.vim

  • 删除目录
1
2
3
4
5
6
hk@vm:~/6temp$ rm -v b
rm: 无法删除'b': 是一个目录
hk@vm:~/6temp$ rm -rv b
removed directory 'b/c/d'
removed directory 'b/c'
removed directory 'b

11.建立链接文件:ln

11.1软链接与硬链接

  • 硬链接

(1)硬链接只能链接普通文件,不能链接目录。

(2)一个源文件可以对应多个硬链接,修改任意一个硬链接,源文件及其他与源文件相关联的硬链接的内容也同步更改;修改源文件,与源文件相关联的硬链接内容也随之更改。

(3)删除一个硬链接,源文件及其相关的其他硬链接不受影响,删除源文件,与其相关的硬链接都不受影响。

  • 软链接

(1)软链接既可以链接文件,也可以链接目录。

(2)一个源文件可以对应多个软链接,修改任意一个软链接,源文件及其他与源文件相关联的软链接的内容也同步更改;修改源文件,与源文件相关联的软链接内容也随之更改。

(3)删除软连接就相当于删除了快捷方式,源文件不会受到任何影响,但删除了源文件,与源文件相关联的所有软链接将全部失效。

(4)若软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。

总的来说,硬链接相当于拷贝文件,但所有文件内容保持同步软链接相当于快捷方式,内容保持同步,但都是访问源文件的一个名字而已。

11.2使用格式

ln 命令用于创建一个链接。一般格式如下:

1
ln [option] <source_file> <link_file> # ln [选项] 源文件名 链接文件名

【参数说明】

  • option :选项
点击查看 [option]
option 说明
ln 建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在。
ln -s 建立一个软链接,软链接不占用磁盘空间,源文件删除则软链接失效。
  • source_file :源文件名。
  • link_file :我们要创建的链接的名字。

11.3使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
hk@vm:~/6temp$ touch 1.md 2.md 3.md
hk@vm:~/6temp$ ls
1.md 2.md 3.md

# ln 源文件 链接文件
hk@vm:~/6temp$ ln 1.md hardlinks1 # 创建硬链接hardlinks1,其与1.md文件相关联
# ln -s 源文件 链接文件
hk@vm:~/6temp$ ln -s 2.md softlinks1 # 创建软链接hardlinks1,其与2.md文件相关联

hk@vm:~/6temp$ ls -alh
总用量 8.0K
drwxrwxr-x 2 hk hk 4.0K 10月 20 13:36 .
drwxr-xr-x 29 hk hk 4.0K 10月 17 11:39 ..
-rw-rw-r-- 2 hk hk 0 10月 20 13:36 1.md
-rw-rw-r-- 1 hk hk 0 10月 20 13:36 2.md
-rw-rw-r-- 1 hk hk 0 10月 20 13:36 3.md
-rw-rw-r-- 2 hk hk 0 10月 20 13:36 hardlinks1
lrwxrwxrwx 1 hk hk 4 10月 20 13:36 softlinks1 -> 2.md

12.查看或者合并文件内容:cat、nl、head、tail

12.1使用格式

这几个命令用于文件的内容显示。一般格式如下:

命令 参数 说明
cat -s 多个空行合并成一个空行显示。
-b 加行号显示。
nl 直接加行号显示文件内容。
head -n(n为行数) 显示文件前n行数据,默认是10行。
tail -n(n为行数) 显示文件倒数n行数据,默认是10行。

12.2使用实例

1
2
3
4
5
6
7
#  1. 查看文件内容:cat 文件名
cat test.md # 直接在终端显示test.md文件内容
cat /home/test/test.md # 可以使用绝对路径

# 2. 合并文件内容:cat 文件1 文件2 >(或>>) 文件名
cat test1.md test2.md > test.md # 清空test.md所有内容,再将两个文件内容合并
cat test1.md test2.md >> test.md # 将两个文件内容追加到test.md,原有内容不会被清除

13.文本搜索:grep

13.1使用格式

Linux 系统中 grep 命令是一种强大的文本搜索工具, grep 允许对文本文件进行模式查找。如果找到匹配模式, grep 打印包含模式的所有行。一般格式如下:

1
grep [option] <name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-v 显示不包含匹配文本的所有行(相当于求反)
-n 显示匹配行与行号
-i 忽略大小写
-r 以递归的方式查找符合条件的文件。
  • name:要查找的内容。

【注意】

(1)在 grep 命令中输入字符串参数时,最好引号或双引号括起来。例如: grep ‘a’ 1.txt 。

(2)grep 搜索内容串可以是正则表达式

表达式 说明
^ 表示行首
如:grep '^a' test.txt表示搜索该文件中以a开头的行
$ 行尾
如:grep 'm$' test.txt表示搜索该文件中以m结尾的行
[] “[”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。[abc]:匹配a、b、c中的任意一个[a-f]:匹配从a到f范围内的的任意一个字符
. (点)匹配一个非换行符的字符

13.2使用实例

1
2
3
4
5
hk@vm:~$ grep -r update /etc/acpi
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys --update

hk@vm:~$ grep -n -r update /etc/acpi
/etc/acpi/events/thinkpad-cmos:7:action=/usr/sbin/thinkpad-keys --update

14.查找文件:find

14.1使用格式

find 命令用于通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。一般格式如下:

1
find <dir> [option] <file_name>

【参数说明】

  • dir :要查找的目录。
  • option :选项。
点击查看 [option]
option 说明
-name 查找名字
-size 查找大小
-perm 查找权限
  • file_name :要查找的文件名。

14.2使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
#  1. find 要查找的文件夹 -name 要查找的文件名
find ./ -name test.sh 查找当前目录下所有名为test.sh的文件
find ./ -name '*.sh' 查找当前目录下所有后缀为.sh的文件
find ./ -name "[A-Z]*" 查找当前目录下所有以大写字母开头的文件

# 2. find 要查找的文件夹 -size 文件大小
find /tmp -size 2M 查找在/tmp 目录下等于2M的文件
find /tmp -size +2M 查找在/tmp 目录下大于2M的文件
find /tmp -size -2M 查找在/tmp 目录下小于2M的文件
find ./ -size +4k -size -5M 查找当前目录下大于4k,小于5M的文件

# 3. find 要查找的文件夹 -perm 文件大小
find ./ -perm 0777 查找当前目录下权限为 777 的文件或目录

15.拷贝文件: cp

15.1使用格式

cp 命令用于将给出的文件或目录复制到另一个文件或目录中。需要注意的是cp命令在复制的时候,若是不加-p参数,将会修改新文件的时间等的相关信息。一般格式如下:

1
cp [option] <source_name> <target_name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f 覆盖已经存在的目标文件而不给出提示
-i 交互式复制,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖
-r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v 显示拷贝进度
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • source_name :要拷贝的源文件名。
  • target_name :拷贝后的名称。

15.2使用实例

1
2
#  1. cp [参数] 要复制的文件或文件夹 目标文件夹 
cp –r test/ newtest # 将当前目录 test/ 下的所有文件复制到新目录 newtest 下

16.移动文件:mv

16.1使用格式

mv (英文全拼: move file )命令用来为文件或目录改名、或将文件或目录移入其它位置。一般格式如下:

1
mv [option] source_file(文件) target_file(文件)

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-f 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-i 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-b 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-n 不要覆盖任何已存在的文件或目录。
-u 当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
-v 显示移动进度
  • source_file :要移动的源文件,可以是目录。
  • target_file :要移动的目标文件,可以是目录。

16.2使用实例

1
2
3
4
5
#  1. 修改文件名:mv source_file(文件) dest_file(文件)
mv a b # 将文件 a 改名为 b

# 2. 移动文件:mv source_file(文件) dest_directory(目录)
mv test/ mvtest # 将 test 目录放入 mvtest 目录中。注意,如果 mvtest 目录不存在,则该命令将 test 改名为 mvtest。

17.归档管理:tar

17.1使用格式

此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。一般格式如下:

1
2
tar [option] <压缩包包名> [-C] <target_dir> # 解压
tar [option] <压缩包包名> <文件名> # 压缩

【参数说明】

  • option :选项。
点击查看 [option]
参数 说明
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t 列出档案中包含的文件
-x 解开档案文件
-r 向压缩归档文件末尾追加文件
-z 调用gzip实现一个压缩的功能
指定压缩包的格式为:file.tar.gz
-j 调用bzip2实现一个压缩的功能
指定压缩包的格式为:file.tar.bz2
-C 目录(C为大写) 指定解打包位置

【注意】

(1)一般打包或者解包默认都是当前目录,若是想要打包或者解包到其他目录的话,就需要使用 -C 参数。

(2)tar 命令很特殊,其参数前面可以使用 “-” ,也可以不使用。

(3)除了 f 需要放在参数的最后,其它参数的顺序任意。

(4)tar 这个命令并没有压缩的功能,它只是一个打包的命令,但是在 tar 命令中增加一个选项 -z 可以调用 gzip 实现一个压缩的功能,实行一个先打包后压缩的过程。

17.2使用实例

17.2.1压缩用法

1
2
3
4
5
6
7
8
9
#  1. 压缩file.tar:tar –cvf 压缩包包名 文件名
tar –cvf jpg.tar *.jpg # 将当前目录里所有jpg文件打包成jpg.tar

# 2. 压缩file.tar.gz用:tar -zcvf 压缩包包名 文件1 文件2 ...
tar -zcvf test.tar.gz * # 将当前路径下所有文件及文件夹打包并压缩到test.tar.gz文件

# 3. 压缩file.tar.bz2用法:tar -jcvf 压缩包包名 文件1 文件2 ...
tar -jcvf test.tar.bz2 * # 将当前路径下所有文件及文件夹打包并压缩到test.tar.bz2文件

17.2.2解压用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  1. 解压file.tar:tar –xvf 压缩包包名
tar –xvf jpg.tar # 解压jpg.tar包到当前文件夹
# 2. 解压file.tar到指定目录:tar -xvf 压缩包包名 -C 文件夹名称
tar -xvf test.tar -C /test # 将test.tar文件解压到 /test文件夹下。

# 3. 解压file.tar.gz: tar -zxvf 压缩包包名
tar -zxvf test.tar.gz # 将test.tar.gz文件解压到当前文件夹。
# 4. 解压file.tar.gz到指定目录:tar -zxvf 压缩包包名 -C 文件夹名称
tar -zxvf test.tar.gz -C /test # 将test.tar.gz文件解压到 /test文件夹下。

# 5. 解压file.tar.bz2: tar -jxvf 压缩包包名
tar -jxvf test.tar.bz2 # 将test.tar.bz2文件解压到当前文件夹。
# 6. 解压file.tar.bz2到指定目录:tar -jxvf 压缩包包名 -C 文件夹名称
tar -jxvf test.tar.bz2 -C /test # 将test.tar.bz2文件解压到 /test文件夹下。

18.文件压缩解压:gzip

18.1使用格式

tar 与 gzip 命令结合使用实现文件打包、压缩。 tar 只负责打包文件,但不压缩,用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.gz 。一般格式如下:

1
gzip [option] <file_name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-d 解压
-r 压缩所有子目录
  • file_name :要压缩或者解压的文件名。

【注意】

(1)一般来说都是隐藏在 tar 命令参数中(-z表示),不然需要先打包,再压缩,略显繁琐。

(2)一般打包或者解压默认在当前目录中进行。

18.2使用实例

一般不直接使用,而是放在 tar 命令中调用。

19.文件压缩解压: bzip2

19.1使用格式

tar 与 bzip2 命令结合使用实现文件打包、压缩(用法和 gzip 一样)。 tar 只负责打包文件,但不压缩,用 bzip2 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.bz2 。一般格式如下:

1
bzip2 <file_name>

【注意】一般来说都是隐藏在 tar 命令参数中(-j表示),不然需要先打包,再压缩,略显繁琐。

19.2使用实例

1
2
3
4
5
#  1. 压缩用法:tar -jcvf 压缩包包名 文件...
tar jcvf bk.tar.bz2 *.c

# 2. 解压用法:tar -jxvf 压缩包包名
tar jxvf bk.tar.bz2

20.文件压缩解压: zip、unzip

20.1使用格式

通过 zip 压缩文件的目标文件不需要指定扩展名,默认扩展名为 xxx.zip 。一般格式如下:

1
2
zip [option] <file_name>
unzip [option] <file_name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-d 解压
-r 压缩所有子目录
  • file_name :要压缩或者解压的文件名。

20.2使用实例

1
2
3
#  1. 压缩文件:zip -r 目标文件(没有扩展名) 源文件

# 2. 解压文件:unzip -d 解压后目录文件 压缩文件

21.查看命令位置: which

21.1使用格式

Linux which 命令用于查找文件。 which 指令会在环境变量 $PATH 设置的目录里查找符合条件的文件,所以多用于查看命令的位置。一般格式如下:

1
which <command_name>

21.2使用实例

1
which bash # 显示bash命令的位置

22.查看目录结构: tree

22.1使用格式

tree 用于以树状图列出目录的内容。一般格式如下:

1
tree [option] [num]

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-a 显示所有文件和目录
-A 用ASNI绘图字符显示树状图而非以ASCII字符组合
-C 在文件和目录清单加上色彩,便于区分各种类型
-d 显示目录名称而非内容
-L level 限制目录显示层级
  • num :要显示的目录层数。

22.2使用实例

1
tree -L 3 # 列出该目录下3层目录树

23.查看文件类型: file

23.1使用格式

file 命令用于辨识文件类型。一般格式如下:

1
file [option] <file_name>

【参数说明】

  • option :选项。
点击查看 [option]
option 说明
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-l 直接显示符号连接所指向的文件的类别。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-m<魔法数字文件> 指定魔法数字文件。

23.2使用实例

1
2
# 1. 查看文件类型
file test.c

五、系统管理

1.查看当前日历: cal

1.1使用格式

cal 命令用于查看当前的日历,一般格式如下:

1
cal [ option ] [ 月份 ] [ 年份 ]

【参数说明】

  • option :选项。
option说明
-l显示单月输出
-3显示系统前一个月,当前月,下一个月的日历
-s将星期日作为月的第一天
-m显示星期一作为一周的第一天(缺省为星期日.)
-j显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y显示当前年份的日历
  • 月份:显示指定的月份日历。
  • 年份:显示指定年份的日历。

1.2使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
hk@vm:~$ cal
十月 2022
日 一 二 三 四 五 六
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
hk@vm:~$ cal 5 1997
五月 1997
日 一 二 三 四 五 六
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

2.显示或设置时间: date

2.1使用格式

date 命令可以按照指定格式显示日期,只键入 date 则以默认格式显示当前时间。一般格式如下:

1
date [option] [+输出形式] [MMDDhhmm[[CC]YY][.ss]]

【参数说明】

  • option :选项。
option说明
-d datestr显示 datestr 中所设定的时间 (非系统时间)
-s datestr将系统时间设为 datestr 中所设定的时间
-u显示目前的格林威治时间
--version显示版本编号
--help显示辅助讯息
  • +输出形式:表示输出的格式,我们可以自己定义。
点击查看自动以时间显示格式

那么如果想要自己定义时间显示的格式呢?可以这样

1
date "+现在时间是: %Y-%m-%d %H:%M:%S"
点击查看时间格式化字符详细说明
% 印出 %
%n下一行
%t跳格
%H小时(00..23)
%I小时(01..12)
%k小时(0..23)
%l小时(1..12)
%M分钟(00..59)
%p显示本地 AM 或 PM
%r直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S秒(00..61)
%T直接显示时间 (24 小时制)
%X相当于 %H:%M:%S
%Z显示时区
点击查看日期格式化字符详细说明
%a星期几 (Sun..Sat)
%A星期几 (Sunday..Saturday)
%b月份 (Jan..Dec)
%B月份 (January..December)
%c直接显示日期与时间
%d日 (01..31)
%D直接显示日期 (mm/dd/yy)
%h同 %b
%j一年中的第几天 (001..366)
%m月份 (01..12)
%U一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w一周中的第几天 (0..6)
%W一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x直接显示日期 (mm/dd/yy)
%y年份的最后两位数字 (00.99)
%Y完整年份 (0000..9999)

【注意】若是不以加号( + )作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss] ,其中 MM 为月份, DD 为日, hh 为小时, mm 为分钟, CC 为年份前两位数字, YY 为年份后两位数字, ss 为秒数。当我们不希望出现无意义的 0 时(比如说 2020/01/01),则可以在标记中插入 - 符号,比如说 date ‘+%-H:%-M:%-S’ 会把时分秒中无意义的 0 给去掉,像是原本的 09:09:09 会变为 9:9:9 。另外,只有取得权限者(比如说 root )才能设定系统时间。当我们以 root 身分更改了系统时间之后,要以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续保持最新的正确值。

2.2使用实例

1
2
3
4
5
hk@vm:~$ date "+现在时间是: %Y-%m-%d %H:%M:%S"
现在时间是: 2022-10-20 14:28:14

hk@vm:~$ date
2022年 10月 20日 星期四 14:28:19 CST

3.关机重启: reboot、shutdown、init

3.1 reboot

reboot 命令用于重启系统,一般就直接 reboot 就可以了,它也有一些参数,但是似乎没用过,这里就不写了。

3.2 shutdown

shutdown 命令可以用来进行定时关机,并且在关机以前传送讯息给所有使用者正在执行的程序,也可以用来重开机。一般格式如下:

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

3.3 init

init 命令是 Linux 下的进程初始化工具, init 进程是所有 Linux 进程的父进程,它的进程号为 1 ,是 Linux 内核引导运行的,是系统中的第一个进程。一般格式如下:

1
init [option]

【参数说明】

  • option :选项
option说明
0停机或者关机(不能将init default设置为0)
1单用户模式,只root用户进行维护
2多用户模式,不能使用NFS(Net File System)
3完全多用户模式(标准的运行级别)
4安全模式
5图形化(即图形界面)
6重启(不要把init default设置为6)

4.检测磁盘空间: df

4.1使用格式

df 命令作用是列出文件系统的整体磁盘空间使用情况。一般格式如下:

1
df [option] [file_name]
点击查看 [option]
option说明
-a--all,显示所有的文件系统,包括虚拟文件系统
-B--block-size,指定单位大小。比如1k,1m等
-h--human-readable,以易读的GB、MB、KB等格式显示
-H--si,和-h参数一样,但是不是以1024,而是1000,即1k=1000,而不是1k=1024
-i--inodes,不用硬盘容量,而是以inode的数量来显示
-k以KB的容量显示各文件系统,相当于--block-size=1k
-m以KB的容量显示各文件系统,相当于--block-size=1m
-l--local,只显示本地文件系统
--no-sync在统计使用信息之前不调用sync命令(默认)
-sync在统计使用信息之前调用sync命令
-P--portability,使用POSIX格式显示
-t--type=TYPE,只显示指定类型的文件系统
-T--print-type,显示文件系统类型
-x--exclude-type=TYPE,不显示指定类型的文件系统
--help显示帮助信息
--version显示版本信息

4.2使用实例

1
2
3
4
5
6
7
8
9
10
hk@vm:~$ df -T
文件系统 类型 1K-块 已用 可用 已用% 挂载点
udev devtmpfs 1977176 0 1977176 0% /dev
tmpfs tmpfs 401592 31500 370092 8% /run
/dev/sda1 ext4 81451752 13001104 64290036 17% /
tmpfs tmpfs 2007952 45200 1962752 3% /dev/shm
tmpfs tmpfs 5120 4 5116 1% /run/lock
tmpfs tmpfs 2007952 0 2007952 0% /sys/fs/cgroup
vmhgfs-fuse fuse.vmhgfs-fuse 278929404 181423696 97505708 66% /mnt/hgfs
tmpfs tmpfs 401592 80 401512 1% /run/user/1000

5.检测目录所占磁盘空间: du

5.1使用格式

du 和 df 类似, du 侧重在文件夹和文件的磁盘占用方面,而 df 则侧重在文件系统级别的磁盘占用方面。一般使用格式:

1
du [option][dir_or_file_name]
点击查看 [option]
option说明
-a或-all显示目录中个别文件的大小
-b或-bytes显示目录或文件大小时,以byte为单位
-c或--total除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
-D或--dereference-args显示指定符号连接的源文件大小
-h或--human-readable以K,M,G为单位,提高信息的可读性
-H或--si与-h参数相同,但是K,M,G是以1000为换算单位
-k或--kilobytes以1024 bytes为单位
-l或--count-links重复计算硬件连接的文件
-L<符号连接>或--dereference<符号连接>显示选项中所指定符号连接的源文件大小
-m或--megabytes以1MB为单位
-s或--summarize仅显示总计
-S或--separate-dirs显示个别目录的大小时,并不含其子目录的大小
-x或--one-file-xystem以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过
-X<文件>或--exclude-from=<文件>在<文件>指定目录或文件
--exclude=<目录或文件>略过指定的目录或文件
--max-depth=<目录层数>超过指定层数的目录后,予以忽略
--help显示帮助
--version显示版本信息

5.2使用实例

1
2
hk@vm:~$ du -sh 5linux/
2.8G 5linux/

6.查看或配置网卡信息: ifconfig

6.1使用格式

ifconfig 工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。但是在运行时可能会提示未安装该工具(如果之前没有安装过的话),根据系统提示执行相应的命令进行工具安装即可。一般格式如下

1
ifconfig [option1] [option2] # 但是一般就是直接 ifconfig 查看网络配置信息而已
点击查看 [option]

参数特别多,但是貌似一般不怎么用。

option1-a显示所有接口的状态,包括那些关闭的接口
-s显示接口简短状态列表,类似于 netstat -i
-v冗余模式,遇到错误将报告错误信息
option2add<地址>设置网络设备IPv6的IP地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
<hw<网络设备类型><硬件地址>设置网络设备的类型与硬件地址
io_addr设置网络设备的I/O地址
irq<IRQ地址>设置网络设备的IRQ
media<网络媒介类型>设置网络设备的媒介类型
mem_start<内存地址>设置网络设备在主内存所占用的起始地址
metric<数目>指定在计算数据包的转送次数时,所要加上的数目
mtu<字节>设置网络设备的MTU
netmask<子网掩码>设置网络设备的子网掩码
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址
up启动指定的网络设备
-broadcast<地址>将要送往指定地址的数据包当成广播数据包来处理
-pointopoint<地址>与指定地址的网络设备建立直接连线,此模式具有保密功能
-promisc关闭或启动指定网络设备的promiscuous模式
[IP地址]指定网络设备的IP地址
[网络设备]指定网络设备的名称

6.2使用实例

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
hk@vm:~$ ifconfig
ens33 Link encap:以太网 硬件地址 00:0c:29:dc:97:38
inet 地址:192.168.19.140 广播:192.168.19.255 掩码:255.255.255.0
inet6 地址: fe80::ec18:46b3:f09b:2115/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:69723 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:34505 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:28541354 (28.5 MB) 发送字节:10261211 (10.2 MB)

ens37 Link encap:以太网 硬件地址 00:0c:29:dc:97:42
inet 地址:192.168.10.101 广播:192.168.10.255 掩码:255.255.255.0
inet6 地址: fe80::fc30:db60:f384:6805/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:119696 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:110068 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:10082240 (10.0 MB) 发送字节:153554413 (153.5 MB)

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 跃点数:1
接收数据包:27817 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:27817 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:2134713 (2.1 MB) 发送字节:2134713 (2.1 MB)

7.测试远程主机连通性: ping

7.1使用格式

执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机是否运作正常。一般格式如下:

1
ping [option][主机名称或IP地址] # 可以是网址,如www.baidu.com
点击查看 [option]
option说明
-d使用Socket的SO_DEBUG功能
-c <完成次数>设置完成要求回应的次数
-f极限检测
-i<间隔秒数>指定收发信息的间隔时间
-I<网络界面>使用指定的网络接口送出数据包
-l<前置载入>设置在送出要求信息之前,先行发出的数据包
-n只输出数值
-p<范本样式>设置填满数据包的范本样式
-q不显示指令执行过程,开头和结尾的相关信息除外
-r忽略普通的Routing Table,直接将数据包送到远端主机上
-R记录路由过程
-s<数据包大小>设置数据包的大小
-t<存活数值>设置存活数值TTL的大小
-v详细显示指令的执行过程
-w <秒数>在 n 秒后退出
-W <秒数>在等待 n 秒后开始执行

7.2使用实例

1
2
3
4
5
6
7
8
9
10
11
hk@vm:~$ ping www.baidu.com
PING www.a.shifen.com (36.152.44.95) 56(84) bytes of data.
64 bytes from 36.152.44.95: icmp_seq=1 ttl=128 time=14.1 ms
64 bytes from 36.152.44.95: icmp_seq=2 ttl=128 time=14.0 ms
64 bytes from 36.152.44.95: icmp_seq=3 ttl=128 time=13.9 ms
64 bytes from 36.152.44.95: icmp_seq=4 ttl=128 time=13.7 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 13.738/13.973/14.148/0.182 ms

7.3图形字符界面切换

我们使用的带图形界面的 Ubuntu 是可以切换到纯字符模式的。

  • 字符化界面控制终端和图形界面伪终端切换
1
2
Crtl+Alt+F3或者Ctrl+Fn+Alt+F3  # 图形界面伪终端切换到字符化界面控制终端
Ctrl+Alt+F7或者Ctrl+Fn+Alt+F7 # 字符化界面控制终端切换到图形界面伪终端

六、软件操作

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
sudo apt-get update           # 更新源

sudo apt-get install package # 安装包

sudo apt-get remove package # 删除包

sudo apt-cache search package # 搜索软件包

sudo apt-cache show package # 获取包的相关信息,如说明、大小、版本等

sudo apt-get install package --reinstall # 重新安装包

sudo apt-get -f install # 修复安装

sudo apt-get remove package --purge # 删除包,包括配置文件等

sudo apt-get build-dep package # 安装相关的编译环境

sudo apt-get upgrade # 更新已安装的包

sudo apt-get dist-upgrade # 升级系统

sudo apt-cache depends package # 了解使用该包依赖那些包

sudo apt-cache rdepends package # 查看该包被哪些包依赖

sudo apt-get source package # 下载该包的源代码

sudo apt-get clean && sudo apt-get autoclean # 清理无用的包

sudo apt-get check # 检查是否有损坏的依赖