Linux操作系统
1. Linux 简介
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System Interface 可移植操作系统接口)的多用户、多任务、支持多线程和多CPU的操作系统。
其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发。
内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。
2. Linux 发展史
• 1973年,贝尔实验室的Dennis Ritchie和Ken Thompson发明了C语言,而后写出了Unix的内核;
• 1979年,Unix发布System V,用于个人计算机, AT&T收回版权;
• 1984 年,Andrew Tanenbaum(谭宁邦)教授编写 Minix(mini Unix) ,用于教学;
• 1984 年,Richard Mathew Stallman(史托曼)发起的GNU计划,这是自由软件的鼻祖;
• 1991年, 芬兰赫尔辛基大学的研究生Linus Torvalds(托瓦兹)基于gcc、 bash,参考Minix,开发了针对386机器的Linux内核;
3. Linux 发行版本
Linux 的发行版本可以大体分为两类:
- 商业公司维护的发行版本,以著名的 Red Hat 为代表;
- 社区组织维护的发行版本,以 Debian 为代表。
很难说大量 Linux 版本中哪一款更好,每个版本都有自己的特点。下面为大家介绍几款常用的 Linux 发行版本。
红帽系列
Red Hat Enterprise: (www.redhat.com) 这个是企业级的linux,主要面向服务器。作为商业版,有比较好的配套软件和技术支持。
Fedora: (http://fedoraproject.org) 由社区维护,去除了一些商业软件。红帽实际上赞助了这个项目,以便以此作为技术测试平台。
CentOS: (www.centos.org) 这个版本不来自红帽的公司,是收集红帽公开的源码组成的免费版本,由社区维护,和红帽完全兼容。
SUSE系列
SUSE Linux Enterprise: (www.suse.com) 和红帽商业版类似,德国的发行版本。
openSUSE: (www.opensuse.org) SUSE的免费版本。
Debian系列
Debian: (www.debian.org) 完全免费,社区维护的Linux版本,有很大的用户群,所以遇到问题,基本都可以找到社区用户的支持。
Ubuntu: (www.ubuntu.com) 由一个基金提供支持的免费Linux版本。 继承自Debian。界面很友好。
4. Linux 系统特性
基本思想
Linux的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现代电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。
支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。
Linux 相关命令
1. 用户与用户组管理
Linux是一个多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。
不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
1.1 Linux用户分类
超级管理员:
Linux的超级管理员为root用户,UID为0,可以对计算机进行任何操作,不受权限的影响。
系统用户(虚拟用户):
linux中系统用户是指运行程序所必须的用户,不能用于登录,主要服务于应用和维护系统运行。
普通用户:
这类用户的权限会受到基本权限的限制,也会受到来自管理员的限制。
注意 : Linux是区分用户进行各种操作的,也就是说必须先登录某个用户才可以做相关的操作,所以我们想要操作Linux必须有自己的用户。
1.2 Linux的用户组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
比如:建立一个用户组,让这个组具有访问某个文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么这些用户就具有了和组一样的权限。
用户和用户组的对应关系有:一对一、一对多、多对一和多对多;下图展示了这种关系:
-
一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
-
一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
-
多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
- 多对多:多用户个可以存在多个组中。其实就是上面三个对应关系的扩展。
1.3 用户组管理命令
有关用户组的信息保存在/etc/group中,也就是说增加、删除和修改组,其实就是对/etc/group文件的更新。
1.3.1 查看组的信息
# cat 命令,查看某个文件的内容 /etc(配置文件目录)/group(配置文件)
[root@localhost ~]# cat /etc/group
此文件的格式是由冒号(:)隔开若干个字段,这些字段具体如下:
组名:口令:组标识号:组内用户列表
具体解释:
组名:
组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
口令:
口令字段存放的是用户组加密后的口令字。x表示口令是被/etc/gshadow文件保护的。
组标识号:
组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID,可以重复。
组内用户列表:
是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
1.3.2 修改组的信息
# 新建组
# 命令:groupadd 选项 用户组名称
[root@localhost ~]# groupadd group1
[root@localhost ~]# cat /etc/group
# 新增组 group1 ,组标识号是在当前已有的最大组标识号的基础上加1。
[root@localhost ~]# groupadd -g 101 group2
# 新增组 group2 ,指定组标识号是101。
# 删除组
# 命令:groupdel 用户组名称
[root@localhost ~]# groupdel group1
# 修改组
# 命令:groupmod 选项 用户组
[root@localhost ~]# groupmod -g 102 group2
# 将组group2的组标识号修改为102
[root@localhost ~]# groupmod -n group3 group2
# 将组group2的组名称修改为group3
1.4 用户管理命令
1.4.1 查看用户信息(passwd)
有关用户的信息保存在/etc/passwd文件中。
[root@localhost ~]# cat /etc/passwd
文件中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
用户名:
是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。
口令:
一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
用户标识号:UID
用户标识号(User ID),是一个整数,系统内部用它来标识用户。
0是系统管理员账号,1-999是系统保留账号,1000+即一般账号。useradd 命令默认生成UID=1000。
组标识号:GID
GID:用户组标识号(Group ID),是一个整数,系统内部用它来标识用户组。
注释性描述:
字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。
主目录:
也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
登录Shell:
用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。
1.4.2 修改用户信息(useradd/userdel/usermod/passwd)
添加用户
[root@localhost ~]# useradd zhangsan
# 创建用户 zhangsan ,该用户的默认家(home)目录为 /home/zhangsan
# 未指定分组,默认为与用户名称相同的用户组,即zhangsan组
为添加的用户指定相应的用户组
[root@localhost ~]# useradd -g group1 lisi
# 创建用户 lisi ,并指定该用户的用户组为 group1
为新添加的用户指定home目录
[root@localhost ~]# useradd -d /home/ww wangwu
# 创建用户 wangwu ,指定该用户的家(home)目录为 /home/ww
建立用户且指定ID
[root@localhost ~]# useradd zhaoliu -u 544
# 创建用户 zhaoliu ,并指定该用户的用户ID为 544
关于目录的说明:
~ 指的是当前用户的家(home)目录 , 即 /home/用户名
/ 指的是根目录,只有一个。
删除用户
[root@localhost home]# userdel zhangsan
# 删除用户 zhangsan,若不加参数,则仅删除用户帐号,而不删除相关文件。
[root@localhost home]# userdel -r lisi
# 删除用户 lisi,同时删除用户登入目录以及目录中所有文件。
设置密码
# 设置当前账户的密码
[root@localhost home]# passwd
# 使用root账户设置其他账户的密码
[root@localhost home]# passwd username
Enter new UNIX password: //输入新密码,输入的密码无回显
Retype new UNIX password: //确认密码
passwd: password updated successfully
# 删除用户密码
[root@localhost home]# passwd -d username
修改用户
# 修改用户名
[root@localhost home]# usermod -l new_username username
# 修改用户ID
[root@localhost home]# usermod -u 777 username
# 将用户 username 的id修改为777
# 更改登录目录
[root@localhost home]# usermod -d /home/hnlinux root
# 将用户 root 的登录目录修改为/home/hnlinux
1.4.3 切换用户(su)
# su 用户名
[root@localhost home]# su zhangsan
# 切换到zhangsan用户,但不切换环境变量
[zhangsan@localhost home]#
# su - 用户名
[root@localhost home]# su - zhangsan
# 切换到zhangsan用户,环境变量也切换成用户的环境变量。
[zhangsan@localhost ~]#
1.5 管理用户组中的成员(gpasswd)
gpasswd 是 Linux 下工作组文件 /etc/group 和 /etc/gshadow 管理工具,用于将一个用户添加到组或者从组中删除。
# 命令语法
gpasswd [可选项] 组名
# 可选参数
-a:添加用户到组;
-d:从组删除用户;
-A 用户:指定管理员;
-r:删除密码;
示例:
#1)建立一个新群组,名称为 group3 该群组交由 user3 管理
groupadd group3
# 给group3 组设置密码
gpasswd group3
useradd user3
# 指定user3为组管理员
gpasswd -A user3 group3
# 该组的管理员可以添加其他用户到当前组
#2)将uu1,uu2,uu3 都加入到 group3 群组
# root 用户创建用户
useradd uu1
useradd uu2
useradd uu3
# user3作为group3的管理员来添加用户到组
gpasswd -a uu1 group3
gpasswd -a uu2 group3
gpasswd -a uu3 group3
#3)将uu3 从 group3 群组中移除
gpasswd -d uu3 group3
2. 文件与目录管理
2.1 列出目录(ls)
ls (英文全拼:list files)命令用于显示指定工作目录下的内容(列出目前工作目录所含的文件及子目录)。
语法:
ls [-alrtAFR] [dirname...]
参数:
- -a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r 将文件以相反次序显示(原定依英文字母次序)
- -t 将文件依建立时间之先后次序列出
- -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
- -R 若目录下有文件,则以下之文件亦皆依序列出
示例:
# 显示当前目录下所有的内容,也可以写作:ll
ls -l
# 列出根目录(/)下的所有目录
ls /
# 列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面
ls -ltr s*
# 列出目前工作目录下所有文件及目录;目录于名称后加 "/", 可执行档于名称后加 "*"
ls -AF
2.2 切换目录(cd)
cd(英文全拼:change directory)命令用于切换当前工作目录。
语法:
cd [dirName]
# dirName:要切换的目标目录。
# 目标目录可以是绝对路径对应的目录,也可以是相对路径对应的目录。
. 代表当前目录
.. 代表上一层目录
~ 代表『当前用户』所在的家(home)目录
- 代表前一个工作目录
示例:
# 1)进入系统根目录
cd /
# 2)进入指定目录/root
cd /root
# 3)进入当前用户的家目录
cd ~
# 4)进入指定用户的家目录
cd ~root
# 5)返回进入此目录之前的所在目录
cd -
2.3 创建目录(mkdir)
mkdir(英文全拼:make directory)命令用于创建目录。
语法:
mkdir [-p] dirName
参数:
- -p 确保目录名称存在,不存在的就建一个。
示例:
# 创建目录(相对路径)
mkdir dir1
# 在当前目录下创建多级目录(相对路径)
mkdir -p dir2/dir21/dir211
# 创建目录(绝对路径)
mkdir /root/dir2/dir22
2.4 显示当前目录(pwd)
pwd(英文全拼:print work directory) 命令用于显示工作目录。
语法:
pwd
# 查看结果即可
2.5 删除目录(rmdir)
rmdir(英文全拼:remove directory)命令删除空的目录。
语法:
rmdir [-p] dirName
参数:
- -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
示例:
# 将当前目录下,名为 AAA 的子目录删除 :
rmdir AAA
# 在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir -p BBB/Test
2.6 复制文件或目录(cp)
cp(英文全拼:copy file)命令用于复制文件或目录。
语法:
cp [options] source dest
# 或者
cp [options] source1 source2 source3 .... directory
参数:
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合。
- -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。
- -i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -l:不复制文件,只是生成链接文件。
示例:
# 将a.log文件复制到当前目录下,新文件名称为b.log
cp a.log b.log
# 将a.log文件复制到当前目录的dir目录下,目标目录可以是相对路径或者绝对路径
cp a.log dir
# 将当前目录下的dir1目录复制到当前目录的dir目录下
cp -r dir1 dir
# 将当前目录下的dir1和dir2复制到当前目录的dir目录下
cp -r dir1 dir2 dir
注意:使用该指令复制目录时,必须使用参数"-r"或者"-R"。
2.7 删除文件或目录(rm)
rm(英文全拼:remove)命令用于删除一个文件或者目录。
语法:
rm [-fir] 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,删除前逐一询问确认
- -r :递归删除!常用在目录的删除!这是非常危险的选项!!!
示例:
# rm test.txt
rm:是否删除 一般文件 "test.txt"? y
# rm homework
rm: 无法删除目录"homework": 是一个目录
# rm -r homework
rm:是否删除 目录 "homework"? y
# rm -rf dir
# 直接删除目录dir及其子内容,无需确认
# rm -r *
# 删除当前目录下的所有文件及目录
注意:文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。
2.8 移动文件或目录(mv)
mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
语法:
mv [options] source dest
mv [options] source... directory
参数说明:
- -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
- -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
- -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
- -n: 不要覆盖任何已存在的文件或目录。
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
mv参数设置与运行结果
命令格式 | 运行结果 |
---|---|
mv 文件名 文件名 | 将源文件名改为目标文件名 |
mv 文件名 目录名 | 将文件移动到目标目录 |
mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名 |
mv 目录名 文件名 | 出错 |
示例:
将文件 aaa 更名为 bbb :
mv aaa bbb // bbb不存在
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
mv info/ logs
再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
$ mv /usr/student/* .
3. 文件基本属性
输入命令
ls -al
展示当前目录下的所有内容,如下图所示:
第一个红框中的第一个字符,“d”表示是目录,“-”表示是文件,“|”表示是链接文档。
第一个红框中的其他符号表示该文件或文件夹的权限:
r : 表示可读
w : 表示可写
x : 表示可执行 execute
- : 表示没有当前权限
而这9位表示权限的字符又分为了三部分:
第2-4位,表示该文件(夹)的属主权限 (该文件所属的用户,默认哪个用户创建,该文件就属于谁)
第5-7位,表示该文件(夹)的属组权限 (该文件所属的用户的组)
第8-10位,表示该文件(夹)的其他用户权限
例如:
drwxr-xr-x : 表示这是一个目录,属主可以读、写、执行,属组可以读、不可以写、可以执行,其他用户可以读、不可以写、可以执行
修改文件或目录权限的相关命令如下
3.1 修改所属组(chgrp)
chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。
命令:
chgrp [参数选项][所属群组][文件或目录...]
参数:
-R 或 --recursive: 递归处理,将指定目录下的所有文件及子目录一并处理。
-v 或 --verbose: 显示指令执行过程。
示例:
# 修改文件夹aaa的所属组为 root组,显示执行过程
[root@bogon 桌面]# chgrp -v root aaa
changed group of "aaa" from group1 to root
# 修改文件夹aaa(包含目录下的所有子目录及文件)的所属组为 root组,显示执行过程
[root@bogon 桌面]# chgrp -vR root aaa
changed group of "aaa/a.txt" from group1 to root
changed group of "aaa" from group1 to root
3.2 修改属主(chown)
chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。
命令:
chown [参数选项] user[:group] file...
参数:
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
示例:
# 修改aaa文件的所有这为root
[root@bogon 桌面]# chown root aaa
# 将dir的所属用户修改为root,所属组修改为root
[root@bogon 桌面]# chown root:root dir
# 将dir及其子目录下所有文件的所属用户修改为root,所属组修改为root
[root@bogon 桌面]# chown -R root:root dir
3.3 修改权限(chmod)
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
语法:
chmod [-cfvR] [--help] [--version] mode file...
参数:
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
示例:
将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
chmod ugo-r file1.txt
将文件 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该文件拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 :
chmod 777 file
语法为:
chmod abc file
如果要设置目录下所有文件和子目录的权限
chmod -R 770 dirname
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
- 若要rwx属性则4+2+1=7;
- 若要rw-属性则4+2=6;
- 若要r-x属性则4+1=5。
chmod a=rwx file
# 等价于
chmod 777 file
chmod ug=rwx,o=x file
# 等价于
chmod 771 file
4. 文本编辑器(vi/vim)
所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
4.1 什么是 vim
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
4.2 vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序
- w 保存文件
按ESC键可随时退出底线命令模式。
三种模式如下图所示:
4.3 vi/vim 使用实例
使用 vi/vim 进入一般模式
如果你想要使用 vi 来建立一个名为 runoob.txt 的文件时,你可以这样做:
$ vim runoob.txt
直接输入 vi 文件名 就能够进入 vi 的一般模式了。请注意,记得 vi 后面一定要加文件名,不管该文件存在与否!
按下 i 进入输入模式(也称为编辑模式),开始编辑文字
在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。
按下 ESC 按钮回到一般模式
好了,假设我已经按照上面的样式给他编辑完毕了,那么应该要如何退出呢?就是给他按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了!
在一般模式中按下 :wq 储存后离开 vi
OK,我们要存档了,存盘并离开的指令很简单,输入 :wq 即可保存离开!
这样我们就成功创建了一个 runoob.txt 的文件。
vim 快捷键
一、光标操作
gg:移动到文件头部位置
G:移动到文件末尾
nG:移动到 n 行,10G 即移动到文件第十行
$:跳转到当前行末尾
^:跳转到当前行开头
w:向右移动一个单词
nw:向右移动多个单词
b:向左移动一个单词
nb:向左移动多个单词
ggvG:全选
二、文本操作
dd:删除本行
ndd :删除 n 行
yy:复制当前行
p:粘贴
a:进入编辑模式,插入内容位置在光标的后面
复制此文件所有内容:
ggvG 全选 + y 复制 + p 粘贴
复制多行:
v 进入可视模式,通过移动光标选择目标,按 y 复制,p 粘贴
输入: 进入命令行模式,输入 15,20 copy 21, 即将从第十五行到第二十行的内容从第二十一行开始复制
三、查找与替换
查找:
在普通模式下输入 /,即可开始查找。
例如查找 root,输入 /root按下 enter 即可跳转至 root第一次出现的位置,同时,输入 n 可跳转至下一个 root 的位置,输入 N 跳转至上一个的位置
替换:
: s/root/admin/ 将光标当前行第一个出现的 root 替换为 admin,没有则不替换
: s/root/admin/g 将光标当前行的所有的 root 替换为 admin
: 3,5 s/root/admin/g 将第三至五行所有的 root 替换为 admin
: %s/root/admin/g 将所有行的 root 替换为 admin
四、保存与退出
:q! 不保存退出
:wq 保存并退出
:x 保存并退出
:w 保存
:w b.txt 另存为 b.txt
4.4 vim 异常处理
使用vim编辑文件时,会在系统中生成一个临时的交换文件,以.swp结尾。(例如,文件名称a.txt,临时交换文件名称为.a.txt.swp)
如果vim异常退出,有可能在磁盘上保存有该文件的交换文件,当再次使用vim编辑该文件时就会报错。此时就需要我们手动删除该交换文件。
5. 查看文件内容
5.1 cat命令
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
语法:
cat [-AbeEnstTuv] [--help] [--version] fileName
参数:
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
示例:
查看textfile1 的文档内容,并加上行号
cat -n textfile1
把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3
5.2 less命令
less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
语法:
less [参数] 文件
参数:
- -b <缓冲区大小> 设置缓冲区的大小
- -e 当文件显示结束后,自动离开
- -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
- -g 只标志最后搜索的关键词
- -i 忽略搜索时的大小写
- -m 显示类似more命令的百分比
- -N 显示每行的行号
- -o <文件名> 将less 输出的内容在指定文件中保存起来
- -Q 不使用警告音
- -s 显示连续空行为一行
- -S 行过长时间将超出部分舍弃
- -x <数字> 将"tab"键显示为规定的数字空格
- /字符串:向下搜索"字符串"的功能
- ?字符串:向上搜索"字符串"的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- b 向上翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一页
- 回车键 滚动一行
- [pagedown]: 向下翻动一页
- [pageup]: 向上翻动一页
示例:
# 查看test.log文件内容 并显示行号
less -N test.log
# 查看main.log文件,查询其中包含 error信息的内容,不区分大小写
less main.log | grep -i error
# 查看catalina.out,定位到第10行
less +10g catalina.out
# 查看完毕,使用q键,退出查看
5.3 head命令
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
命令:
head [参数] [文件]
参数:
- -q 隐藏文件名
- -v 显示文件名
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
实例
要显示 runoob_notes.log 文件的开头 10 行,请输入以下命令:
head runoob_notes.log
显示 notes.log 文件的开头 5 行,请输入以下命令:
head -n 5 runoob_notes.log
显示文件前 20 个字节:
head -c 20 runoob_notes.log
5.4 tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令:
tail [参数] [文件]
参数:
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
实例
要显示 notes.log 文件的最后 10 行,请输入以下命令:
tail notes.log # 默认显示最后 10 行
要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:
tail -f notes.log
此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到按下(Ctrl-C)组合键停止显示。
显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail -n 20 notes.log
显示文件 notes.log 的最后 10 个字符:
tail -c 10 notes.log
6 筛选文件内容
6.1 grep命令
grep 命令用于查找文件里符合条件的字符串。它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法:
grep [参数] '搜寻字符串' 文件名
参数:
- -c 或 --count : 计算符合样式的行数。
-
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -i 或 --ignore-case : 忽略字符大小写的差别。
-
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -v 或 --invert-match : 显示不包含匹配文本的所有行,反向选择。
示例:
# 查询main.log中包含 error的行
grep error main.log
# 查询main.log中包含 error的行,并显示行号
grep -n error main.log
# 查询main.log中包含 error(不区分大小写)的行,并显示行号
grep -ni error main.log
# 查询main.log中不包含 error(不区分大小写)的行,并显示行号
grep -nv error main.log
# 统计包含error信息的行数
grep -c error main.log
# 以递归的方式查询/etc/acpi目录下,所有包含update字符串的文件内容
grep -r update /etc/acpi
# 使用正则表达式查询符合条件的行
grep –e "正则表达式" 文件名 # 符合这个表达式格式的字符串
6.2 awk命令
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
语法:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
参数:
- -F fs or --field-separator fs
指定输入文件分隔符,fs是一个字符串或者是一个正则表达式,如-F:。 - -v var=value or --asign var=value
赋值一个用户定义变量。 - -f scripfile or --file scriptfile
从脚本文件中读取awk命令。
记录和字段
awk是一种处理文本文件的编程语言,文件的每行数据都被称为记录,默认以空格或制表符为分隔符,每条记录被分成若干字段(列),awk每次从文件中读取一条记录。
示例:
# ll命令可以查看当前目录下的内容,然后以空格分隔,取第9列(字段),这样就只打印出文件名
[root@bogon aaa]# ll | awk '{print $9}'
# 假如有b.txt文件内容如下:
[root@bogon aaa]# cat b.txt
zhangsan 100 90 88
lisi 90 80 85
wangwu 60 100 75
zhaoliu 99 60 90
tianqi 55 66 77
# 查看其中包含zhang或者li的行
[root@bogon aaa]# awk '/zhang|li/' b.txt
zhangsan 100 90 88
lisi 90 80 85
zhaoliu 99 60 90
# 以空格分隔,查看第一列
[root@bogon aaa]# awk '{print $1}' b.txt
zhangsan
lisi
wangwu
zhaoliu
tianqi
# 以空格分隔,查看第一列和第二列
[root@bogon aaa]# awk '{print $1,$2}' b.txt
zhangsan 100
lisi 90
wangwu 60
zhaoliu 99
tianqi 55
自定义分隔符: 默认以空格、换行符、制表符作为分隔符,使用-F可以指定分隔符:
awk -F: '{print $1}' /etc/passwd #以冒号作为分隔符
awk -F"[:,_]" '{print $1}' /etc/passwd #使用集合定义分隔符
内置变量OFS
保存的是输出字段的分隔符(列分隔符),默认为空格
awk -v OFS="-" '{print $1,$2}' /tmp/hosts #以"-"作为字段分隔符
awk -v OFS="\t" '{print $1,$2}' /tmp/hosts #以Tab制表符为字段分隔符
awk -v OFS=". " '{print NR,$0}' /tmp/hosts #在每行前面加上行号和点
print指令
可以输出常量和变量,如果是字符串常量需要用双引号括起来,数字常量可以直接打印
awk '{print 123}' /tmp/hosts
awk '{print "IP:",$1}' /tmp/hosts
awk '{print "第1列:"$1,"\t第2列:"$2}' /tmp/hosts
[root@bogon aaa]# awk '{print "第一列名字:"$1,"第二列语文:"$2}' b.txt
6.3 find命令
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:
find path -option [ -print ] [ -exec -ok command ] {} \;
参数:
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-cmin n : 在过去 n 分钟内被修改过
-ctime n : 在过去n天内被修改过的文件
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-type f : 文件类型是 f 的文件。
d: 目录
f: 一般文件
示例:
将目前目录及其子目录下所有后缀名为.log 的文件列出来。
# find . -name "*.log"
将目前目录其其下子目录中所有一般文件列出
# find . -type f
将目前目录及其子目录下所有最近 20 天内更新过的文件列出
# find . -ctime -20
6.4 管道符号
利用Linux所提供的管道符 “|” 将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。
command1正确输出,作为command2的输入,然后comand2的输出作为,comand3的输入,comand3输出就会直接显示在屏幕上面了。
通过管道之后:comand1,comand2的正确输出不显示在屏幕上面。
注意:管道命令只处理前一个命令正确输出,不处理错误输出。
示例:
# 查看test.txt文件中的内容,过滤其中包含hello字符串的部分。
cat test.txt |grep hello
# 查找指定的进程(sshd)信息,包含grep进程本身
ps -ef | grep sshd
# 查找指定的进程(sshd)信息,不包含grep进程本身
ps -ef | grep sshd | grep -v "grep"
6.5 输入输出重定向
输出重定向
对于任何一条linux 命令执行,它会是这样一个过程:
一个命令执行了:
先有一个输入:输入可以从键盘,也可以从文件得到。
命令执行完成:成功了,会把成功结果输出到屏幕:standard output默认是屏幕
命令执行有错误:会把错误也输出到屏幕上面:standard error默认也是指的屏幕
如果想把命令的结果输出的文件,则需要输出重定向符号:
> :输出重定向到文件,覆盖写入文件;
>>:输出重定向到文件,追加写入文件;
三种输入输出的代码分别是:
1)标准输入(stdin):代码为 0 ;
2)标准输出(stdout):代码为 1,不写默认标准输出;
3)错误输出(stderr):代码为 2 ;
针对标注输出和错误输出,有如下四种方式:
> : 标准输出覆盖写入文件
>> : 标准输出追加写入文件
2> : 错误输出覆盖写入文件
2>> : 错误输出追加写入文件
示例:
# 查看main.log文件中 包含error信息的行,并将结果覆盖写入f1文件
cat main.log | grep -i "error" > f1
# 查看main.log文件中 包含info信息的行,并将结果追加写入f1文件
cat main.log | grep -i "info" >> f1
# 查看一个不存在的文件 c.txt,并将报错结果追加写入error.log
cat c.txt 2>> error.log
# 建立testfile文件 输入内容 当输入遇到end时结束
cat >> testfile 2>&1 << end
# 执行find命令 将标准输出到find.out 将错误输出到find.err
find /etc -name passwd 1>find.out 2>find.err
# 执行find命令 将标准输出和错误输出 都输出到find.all
find /etc -name passwd >> find.all 2>&1
输入重定向
将标准从键盘输入改为从文件输入。
cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
下面简单说明几种使用方式和作用
1)cat << EOF,以EOF输入字符为标准输入结束:
2)cat > filename,创建新文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:
3)cat > filename << EOF,以EOF作为输入结束,其中EOF可以是任何字符串,和ctrl+d的作用一样:
示例:
# cat << EOF
[root@bogon aaa]# cat << over
> hello
> java
> bigdata
> nihao
> over ## 可以自定义结束标记
hello
java
bigdata
nihao
# cat > filename
[root@bogon aaa]# cat > f1
hahaha
hehehe
heiheihei
[root@bogon aaa]# ll
总用量 12
-rwxrwx---. 1 lisi root 0 6月 29 20:46 a.txt
-rw-r--r--. 1 root root 83 6月 29 18:12 b.txt
-rw-r--r--. 1 root root 40 6月 29 20:56 error.log
-rw-r--r--. 1 root root 24 6月 29 21:01 f1
[root@bogon aaa]# cat f1
hahaha
hehehe
heiheihei
# cat > filename << EOF
[root@bogon aaa]# cat > f2 << end
> this is test
> test end
> end
[root@bogon aaa]# cat f2
this is test
test end
7 压缩和解压缩
压缩:
指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。
指将多个文件(或目录)合并成一个文件,方便传递或部署。
在Linux系统中,文件的后缀名不重要,但是针对于压缩文件的后缀名是必须的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。
Linux常见的压缩文件后缀名:
后缀名 | 解释说明 |
---|---|
*.gz | gzip程序压缩的文件 |
*.tar | tar命令打包的数据,并没有压缩过 |
*.tar.gz | tar程序打包的文件,并且经过 gzip 的压缩 |
7.1 gzip命令
gzip命令用于压缩文件。文件经它压缩过后,其名称后面会多出".gz"的扩展名。
语法:
# 不保留源文件的压缩
gzip 文件名
# 保留源文件的压缩: -c默认把压缩后的文件输出到标准输出设备,使用重定向,输出到压缩文件中
gzip -c 文件名 > 压缩文件名(.gz)
# 不保留压缩文件的解压缩
gzip -d 压缩文件名(.gz)
# 保留压缩文件的解压缩
gzip -cd 压缩文件名(.gz) > 解压后文件名
参数:
- -c或--stdout或--to-stdout 把压缩后的文件输出到标准输出设备,不去更动原始文件。
- -d或--decompress或----uncompress 解开压缩文件。
- -v或--verbose 显示指令执行过程。
7.2 bzip2 命令
bzip2命令是.bz2文件的压缩程序。bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
语法:
# 不保留源文件的压缩
bzip2 文件名
# 保留源文件的压缩
bzip2 -k 文件名
# 不保留压缩文件的解压缩
bzip2 -d 压缩文件名(.bz2)
# 保留压缩文件的解压缩
bzip2 -dk 压缩文件名(.bz2)
参数:
- -c或--stdout 将压缩与解压缩的结果送到标准输出。
- -d或--decompress 执行解压缩。
- -k或--keep bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
7.3 tar 命令
tar(英文全拼:tape archive )命令用于备份文件。(打包)
语法:
# 将多个文件打包,并指定打包文件名称
tar -cvf 备份文件名称(.tar) 文件1 文件2 ...
# 例如:
tar -cvf test.tar a.log b.txt
# 将多个文件打包并采用gzip进行压缩,并指定压缩文件名称
tar -czvf 备份文件名称(.tar.gz) 文件1 文件2 ...
# 例如:
tar -czvf test.tar.gz a.log b.txt
# 解压文件,到当前目录
tar -xzvf test.tar.gz
# 解压缩到指定目录
tar -xzvf 压缩文件名(.tar.gz) -C 要解压的目录
# 查看压缩文件
tar -tzvf 压缩文件名(.tar)
参数:
- -c或--create 建立新的备份文件。
- -f<备份文件>或--file=<备份文件> 指定备份文件。
- -v或--verbose 显示指令执行过程。
- -z或--gzip或--ungzip 通过gzip指令处理备份文件。
-
-x或--extract或--get 从备份文件中还原文件。
- -C<目的目录>或--directory=<目的目录> 切换到指定的目录。
- -t或--list 列出备份文件的内容。
8 磁盘管理相关命令
8.1 df 命令
df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
语法:
df [选项]... [FILE]...
示例:
# 其中参数 -h表示以易读的方式展示,以K,M,G为单位
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 1.4G 17G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 497M 155M 343M 32% /boot
tmpfs 98M 0 98M 0% /run/user/0
其中:
文件系统:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
容量:此列表示文件系统的总大小,按照习惯单位显示;
已用:表示用掉的硬盘空间大小;
可用:表示剩余的硬盘空间大小;
已用%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
挂载点:文件系统的挂载点,也就是硬盘挂载的目录位置。
8.2 du 命令
du 会显示指定的目录或文件所占用的磁盘空间。
语法:
du -sh 文件或目录
# 参数:
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-s或--summarize 仅显示总计。
示例:
# 显示当前目录所占磁盘空间
du -sh .
9 进程相关命令
9.1 ps 命令
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
语法:
ps [options] [--help]
# ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-u username 显示指定用户的进程信息
示例:
# ps -A 显示进程信息
# ps -u root //显示root进程用户信息
# ps -ef //显示所有命令,连带命令行
# 典型用法
# ps -ef | grep xxx // 查看xxx相关的进程
使用 ps -aux
查看到的进程信息各字段含义:
字段 | 含义 |
---|---|
USER | 进程的属主 |
PID | 进程的ID |
%CPU | 进程占用的CPU百分比 |
%MEM | 占用内存的百分比 |
VSZ | 进程使用的虚拟內存量(KB) |
RSS | 该进程占用的固定內存量(KB)(驻留中页的数量) |
TTY | 进程所在终端的ID,若与终端无关,则显示一个(?) |
STAT | 进程的状态码: |
常见的状态码有:R-正在执行/可执行; D-睡眠中,不可被唤醒; S-睡眠中,可以被唤醒; T-停止; Z-僵尸进程(已经结束但没有释放系统资源) | |
常见的附加标志有:< 进程拥有比普通优先级高的优先级;N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程) | |
START | 进程的启动时间 |
9.2 top 命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
语法:
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
# 参数:
- d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
- q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
- c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
- s : 安全模式,将交谈式指令取消, 避免潜在的危机
- i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
- n : 更新的次数,完成后将会退出 top
- b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
示例:
# 显示进程信息
top
# 显示完整命令
top -c
# 设置信息更新次数
top -n 2
# 表示更新两次后终止更新显示
# 设置信息更新时间
top -d 3
# 更新周期为3秒
进程信息:
说明:前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。
第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:1)当前系统时间2)系统运行时间3)当前登录系统用户数4)load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行,Tasks — 任务(进程),具体信息说明如下:
1)系统现在总进程数
2)处于运行中的进程数
3)处于休眠的进程数
4)处于停止状态的进程数
5)处于僵尸状态的进程数
第三行,cpu状态信息,具体属性说明如下:
5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比0.0%
wa — IO等待占用CPU的百分比0.0%
hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比
第四行,内存状态,具体信息如下:
1)物理内存总量(32GB)
2)使用中的内存总量(14GB)
3)空闲内存总量(18GB)
4)缓存的内存量 (169M)
第五行,swap交换分区信息,具体信息说明如下:
1)交换区总量(32GB)
2)使用的交换区总量(0K)
3)空闲交换区总量(32GB)
4)缓冲的交换区总量(3.6GB)
第六行,