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 | sudo apt-get install manpages |
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手册,我们会得到以下信息:
2.2.2查询有哪些页有帮助信息
我们在终端执行以下命令:
1 | man -f read |
然后我们回的到以下信息:
1 | hk@vm:~$ man -f read |
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 | man 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 | hk@vm:~$ whoami |
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 | hk@vm:~$ who |
3.2.1显示信息带标题栏
1 | k@vm:~$ who -H |
3.2.1显示终端属性和标题栏
1 | hk@vm:~$ who -TH |
4.退出登录账户:exit
4.1使用格式
exit 命令用于退出目前的 shell 或者退出当前用户(root用户下常用)。
1 | exit [状态值] |
【参数说明】
- 状态值 :就是退出的时候一个反馈给系统的值,是可选的。一般在终端使用的时候是用于退出 root 用户,一般不写状态值。
4.2使用实例
1 | hk@vm:~$ su |
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 | hk@vm:~$ useradd aaa |
我们看一下 /etc/passwd 文件中的我们新创建的用户 aaa:
1 | hk@vm:~$ cat /etc/passwd | grep aaa |
从这里可以看出,我们直接创建用户的话,在 /home 目录下并没有自动生成新建用户的目录,但是指定了登录用户的时候的默认目录,并且我们创建用户还需要加上 sudo 。
- 创建用户的时候指定家目录
1 | hk@vm:~$ useradd -d /home/hk2 aaa |
我们看一下 /etc/passwd 文件中的我们新创建的用户 aaa :
1 | hk@vm:~$ cat /etc/passwd | grep aaa |
可以看到家目录已经不再是默认的 aaa 了,改为了我们指定的目录。
5.3.2 adduser 实例
1 | hk@vm:~$ adduser bbb |
我们来看一下 /etc/passwd 文件中的我们新创建的用户 bbb:
1 | hk@vm:~$ cat /etc/passwd | grep bbb |
会发现,该命令同时为我们指定了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 | hk@vm:~$ passwd bbb |
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 | hk@vm:~$ cat /etc/passwd | grep bbb |
我们来看一下 /etc/passwd 文件中的我们新创建的用户 bbb:
1 | hk@vm:~$ cat /etc/passwd | grep bbb |
会发现用户已经删除了,但是用户目录没有删除,所以其实删除的时候可以加上 -r 选项。
7.3.2 deluser 实例
1 | hk@vm:~$ cat /etc/passwd | grep bbb |
我们来看一下 /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 | hk@vm:~$ su bbb |
9.查看有哪些用户组
要想查看当前系统中有哪些用户组,有下边几种方式。
1 | getent group # 方法一 |
10.查看用户在哪些组:groups
10.1使用格式
group 命令用于查询用户所在的组。
1 | groups [option] <user_name> |
【参数说明】
- option :选项。
点击查看 [option]
option | 说明 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
- user_name :要查询的用户名。
10.2使用实例
1 | hk@vm:~$ groups hk |
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(可执行) | |
- | 无权限 |
例如:
我们可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
12.2使用格式
chmod 命令用于修改文件权限。
1 | chmod [option] <mode> <file_name> |
【参数说明】
- option :选项。
点击查看 [option]
[-cfvR] | -c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不要显示错误讯息 | |
-v | 显示权限变更的详细资料 | |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更) |
- mode :权限设定字串(有两种模式:八进制数字模式和符号模式)。
点击查看 mode
要注意这里是三个八进制数,依次代表 Owner 、 Group 和 Other Users 。
1 | 三个 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 | chmod ugo+r 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 | ps -L <PID> |
1.2.4 ps -aux
1 | ps -aux |
我是使用的 ubuntu ,在它里边加 - 或者不加好像都一样,使用 au 或者 aux 选项后,窗口会列出各进程的很多项信息,输出格式如下:
1 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
点击查看显示进程信息参数说明
USER | 进程拥有者 | |
PID | pid | |
%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 | ps -eT -p <pid> # 显示指定的PID进程的所有线程 |
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 | top - 16:28:51 up 8:30, 1 user, load average: 0.08, 0.02, 0.00 |
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 | 优先级 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
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 | pstree [option] | grep <process_name> |
4.终止进程:kill
4.1使用格式
1 | kill -[signal] <PID> |
kill 命令向指定的进程发出一个信号 signal ,在默认的情况下, kill 命令向指定进程发出信号 15 ,正常情况下,将杀死那些不捕捉或不忽略这个信号的进程。
【参数说明】
- signal :要发送的信号编号。
点击查看 [signal]
signal编号 | signal | 说明 |
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 进程重启,挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是 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 | Command 'pstack' not found, but can be installed with: |
按照提示,我们在终端输入以下命令进行安装:
1 | sudo apt install pstack |
点击查看使用问题及解决方法
我们直接输入一个进程号,使用 pstack 命令,例如在终端执行:
1 | pstack 14071 # 当时运行死锁一节笔记的测试例程时得到的进程号 |
然后很不幸,我们会得到如下报错:
1 | Could not attach to target 14071: Operation not permitted. |
可能是没有权限,我们加上 sudo :
1 | pstack 14071 |
很不幸,不出意外的话,我们可能会收到如下提示:
1 | 14071: ./a.out |
这是怎么回事呢?不清楚啊,网上找了很久,似乎是因为这个命令 pstack 是一个脚本工具,它通过 apt 安装出来的程序好像是乱码,然后就不能运行了,我没有深究,按照解决办法,至少可以用了,后边研究明白了再补充吧。
- 新建一个 pstack 文件
1 | vim pstack |
- 添加以下内容并保存文件
点击查看脚本内容
1 | !/bin/sh |
- pstack 配置到系统
1 | sudo cp pstack /usr/bin |
5.3使用实例
1 | sudo pstack <pid> |
之前做测试的时候一个打印出来的效果如下:
1 | Thread 3 (LWP 14824 "a.out"): |
6.进程线程调度和优先级:chrt
6.1使用格式
1 | chrt [options] -p [priority] pid # 一般是需要加上sudo的 |
【说明】 这里我就不详细说明了,具体的使用可以查看 man 手册。
6.2使用实例
1 | hk@ubuntu-22-04:~$ chrt -m |
四、文件管理
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 | hk@vm:~/5linux$ ls -alh |
2.输出重定向命令:>
2.1使用格式
Linux 允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中,其实就相当于修改了默认输出的方向。
如: ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )
一般格式如下:
1 | command > file_name |
【注意】
(1)> 输出重定向会覆盖原来的内容。
(2)>> 输出重定向则会追加到文件的尾部。
(3)若是 file_name 文件不存在,则会直接创建。
2.2使用实例
1 | hk@vm:~/5linux$ ls -alh > test.txt |
3.分屏显示:more
查看内容时,在信息过长无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用 more 命令,每次只显示一页,按下空格键可以显示下一页,按下 q键 退出显示,按下 h键 可以获取帮助。一般格式如下:
1 | more |
4.管道:|
4.1使用格式
一个命令的输出可以通过管道作为另一个命令的输入,一般格式如下:
1 | cmd1 | cmd2 |
4.2使用实例
1 | 命令1 | 命令2 |
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 | hk@vm:~/5linux$ pwd |
8.创建目录:mkdir
8.1使用格式
mkdir 命令用于创建一个新的目录。一般格式如下:
1 | mkdir [option] <dir_name> |
【参数说明】
- option :选项。
点击查看 [option]
option | 说明 |
-p | 递归创建目录 |
- dir_name :要创建的目录名称。
【注意】新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。、
8.2使用实例
1 | hk@vm:~/6temp$ mkdir a |
9.删除目录: rmdir
9.1使用格式
rmdir 命令用于删除一个目录。一般格式如下:
1 | rm <dir_name> |
【注意】必须离开目录,并且目录必须为空目录,不然提示删除失败。
9.2使用实例
1 | hk@vm:~/6temp$ rmdir a/ |
10.删除文件:rm
rm 命令用于删除文件或目录。一般格式如下:
1 | rm [option] <name> |
【参数说明】
- option :选项。
点击查看 [option]
option | 说明 |
-i | 以进行交互式方式执行(提示是否确认删除) |
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
-v | 显示详细的删除过程 |
【注意】 rm 命令删除的文件不能恢复,严禁 sudo rm -rf /* 。
10.2使用实例
- 删除文件
1 | hk@vm:~/6temp$ ls |
- 删除目录
1 | hk@vm:~/6temp$ rm -v 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 | hk@vm:~/6temp$ touch 1.md 2.md 3.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 | 1. 查看文件内容:cat 文件名 |
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 | hk@vm:~$ grep -r update /etc/acpi |
14.查找文件:find
14.1使用格式
find 命令用于通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。一般格式如下:
1 | find <dir> [option] <file_name> |
【参数说明】
- dir :要查找的目录。
- option :选项。
点击查看 [option]
option | 说明 |
-name | 查找名字 |
-size | 查找大小 |
-perm | 查找权限 |
- file_name :要查找的文件名。
14.2使用实例
1 | 1. find 要查找的文件夹 -name 要查找的文件名 |
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 | 1. cp [参数] 要复制的文件或文件夹 目标文件夹 |
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 | 1. 修改文件名:mv source_file(文件) dest_file(文件) |
17.归档管理:tar
17.1使用格式
此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。一般格式如下:
1 | tar [option] <压缩包包名> [-C] <target_dir> # 解压 |
【参数说明】
- 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 | 1. 压缩file.tar:tar –cvf 压缩包包名 文件名 |
17.2.2解压用法
1 | 1. 解压file.tar:tar –xvf 压缩包包名 |
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 | 1. 压缩用法:tar -jcvf 压缩包包名 文件... |
20.文件压缩解压: zip、unzip
20.1使用格式
通过 zip 压缩文件的目标文件不需要指定扩展名,默认扩展名为 xxx.zip 。一般格式如下:
1 | zip [option] <file_name> |
【参数说明】
- option :选项。
点击查看 [option]
option | 说明 |
-d | 解压 |
-r | 压缩所有子目录 |
- file_name :要压缩或者解压的文件名。
20.2使用实例
1 | 1. 压缩文件:zip -r 目标文件(没有扩展名) 源文件 |
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 | 1. 查看文件类型 |
五、系统管理
1.查看当前日历: cal
1.1使用格式
cal 命令用于查看当前的日历,一般格式如下:
1 | cal [ option ] [ 月份 ] [ 年份 ] |
【参数说明】
- option :选项。
option | 说明 |
-l | 显示单月输出 |
-3 | 显示系统前一个月,当前月,下一个月的日历 |
-s | 将星期日作为月的第一天 |
-m | 显示星期一作为一周的第一天(缺省为星期日.) |
-j | 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数) |
-y | 显示当前年份的日历 |
- 月份:显示指定的月份日历。
- 年份:显示指定年份的日历。
1.2使用实例
1 | hk@vm:~$ cal |
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 | hk@vm:~$ date "+现在时间是: %Y-%m-%d %H:%M:%S" |
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 | hk@vm:~$ df -T |
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 | hk@vm:~$ du -sh 5linux/ |
6.查看或配置网卡信息: ifconfig
6.1使用格式
ifconfig 工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。但是在运行时可能会提示未安装该工具(如果之前没有安装过的话),根据系统提示执行相应的命令进行工具安装即可。一般格式如下
1 | ifconfig [option1] [option2] # 但是一般就是直接 ifconfig 查看网络配置信息而已 |
点击查看 [option]
参数特别多,但是貌似一般不怎么用。
option1 | -a | 显示所有接口的状态,包括那些关闭的接口 |
-s | 显示接口简短状态列表,类似于 netstat -i | |
-v | 冗余模式,遇到错误将报告错误信息 | |
option2 | add<地址> | 设置网络设备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 | hk@vm:~$ ifconfig |
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 | hk@vm:~$ ping www.baidu.com |
7.3图形字符界面切换
我们使用的带图形界面的 Ubuntu 是可以切换到纯字符模式的。
- 字符化界面控制终端和图形界面伪终端切换
1 | Crtl+Alt+F3或者Ctrl+Fn+Alt+F3 # 图形界面伪终端切换到字符化界面控制终端 |
六、软件操作
1 | sudo apt-get update # 更新源 |