总字符数: 35.98K
代码: 21.27K, 文本: 14.71K
预计阅读时间: 1.20 小时
LINUX 系统结构
Linux学习手册Linux系统可以粗糙地抽象为3个层次,一般称为内核层(Kernel),中间层是Shell层,既命令解释器,高层则是应用层.

| 层次 | 描述 |
|---|---|
| 内核层 | 内核层是UNIX/LINUX系统的核心和基础,它直接附着在硬件平台上. 控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行. 从而扩展硬件的功能,提高资源的利用效率. 为用户提供方便、高效、安全、可靠的应用环境. |
| Shell层 | Shell层是与用户直接交互的界面. 用户可以在提示符下输入命令行,由Shell解释执行并输出相应结果或有关信息. 所以我们也把Shell称为命令解释器,利用系统提供的丰富命令可以快捷而简单地完成许多工作. |
| 应用层 | 应用层提供基于X Window协议的图形环境. X Window协议定义了一个系统所必须具备的功能(如同TCP/IP是一个协议,定义软件所应具备的功能). 任何系统能满足此协议及符合X协会其他的规范,便可称为X Window. |
X Window与微软的Windows图形环境有很大的区别:
- Linux系统与X Window没有必然捆绑的关系,也就是说,Linux可以安装X Window,也可以不安装;
- 微软的Window图形环境与内核捆绑密切.
Linux系统不依赖图形环境,依然可以通过命令行完成100%的功能,而且因为不使用图形环境还会节省大量的系统资源.
Linux系统大多作为服务器部署且不安装或并不启用图形环境.
Linux控制台的使用
linux系统由桌面控制台和字符控制台组成.
字符控制台是Linux系统核心,大部分操作在字符界面完成.
默认Linux有6个字符控制台,可独立作业,体现了”多用户、多任务”特性.在图形界面下切换到字符界面按Ctrl+Alt+F1~F6,反之,从字符界面切换到X-Window可输入”Startx”或按Ctrl+Alt+F7.
Linux图形界面相对不够完善,功能较Windows有欠缺,复杂操作难在图形界面完成。因此,习惯在字符界面下工作对操作上有重要意义.Linux系统默认管理员用户是root,类似于Windows的Administrator,拥有最高权限,可以操作系统所有文件和设备。
Linux 文件系统结构介绍
| 目录路径 | 说明 |
|---|---|
/ |
Linux 系统的根目录。 所有文件系统的起点。 |
/root |
系统管理员(超级用户)的主目录。 当以 root 身份登录时,默认进入此目录。建议设置较高安全等级。 |
/bin |
存放系统预装的基本可执行程序,供所有用户使用。如 ls、mv、rm 等常用命令。这些程序在系统任何目录下均可执行。部分内容常与 /usr/bin 相同(通过符号链接共享)。 |
/dev |
设备(Device)目录。 包含系统中所有外部设备的文件表示(如硬盘、USB、终端等)。 Linux 中设备以文件形式存在,但此处不存放驱动程序。 |
/home |
普通用户的主目录。 例如,用户 bob 的主目录为 /home/bob。用户登录后默认进入自己的主目录。 |
/lib |
库(Library)目录。 存放系统动态链接共享库(类似 Windows 的 DLL 文件),几乎所有应用程序都依赖此目录下的库文件。 |
/mnt |
临时挂载目录。 系统预留用于手动挂载其他文件系统(如光盘、U盘、网络存储等)。 通常为空,使用后需卸载。 |
/proc |
虚拟文件系统,存放系统运行时信息(如进程、CPU、内存状态)。 数据位于内存中,由内核动态生成,不占用磁盘空间。 |
/run |
临时文件系统,存放系统启动以来的运行时数据(如进程 PID 文件、套接字等)。 重启后内容会被清除。 通常 /var/run 是指向 /run 的符号链接。 |
/srv |
服务数据目录(Service)。 存放某些服务启动后需要访问的数据(如 Web 服务的网页、FTP 文件等)。 若无服务运行,则为空。 |
/tmp |
临时文件目录。 供所有用户和程序存放临时文件。 系统重启或定期任务会自动清理。 |
/var |
可变数据目录(Variable)。 存放经常变化的文件,如日志文件( /var/log)、邮件队列、数据库文件、缓存等。 |
/boot |
启动目录。 存放系统启动所需的核心文件,如内核镜像(vmlinuz)、引导配置(grub/EFI)、initramfs 等。 |
/etc |
系统配置目录(Et Cetera)。 存放几乎所有系统和应用程序的配置文件,如网络配置、用户账户、服务设置等。是系统管理的核心目录。 |
/media |
可移动设备挂载点。 系统自动识别并挂载 U盘、光驱等设备的目录(如 /media/usb、/media/cdrom)。 |
/opt |
可选软件包目录(Optional)。 用于安装第三方或额外软件(如 Oracle、MySQL 等)。 默认为空,便于独立管理。 |
/sbin |
系统管理命令目录。 存放仅限系统管理员(root)使用的系统级命令,如 fdisk、ifconfig、reboot 等。 |
/sys |
系统信息虚拟目录。 基于 sysfs 文件系统,反映内核设备树结构,整合 proc、devfs、devpts 等信息,用于查看和配置内核对象。 |
/usr |
用户资源目录(Unix System Resources)。 存放系统资源,包括可执行文件( /usr/bin)、库文件(/usr/lib)、文档(/usr/share)等,相当于 Windows 的 Program Files,通常占用最大磁盘空间。 |
对于渗透测试工程师来讲需要重点注意以下内容
| 目录路径 | 说明 | 渗透测试关注点 |
|---|---|---|
/tmp |
用于存放临时文件的目录。如果以高权限运行的应用程序在此目录中创建不安全的临时文件,可能被利用进行提权。 | 渗透测试人员可能会查找此目录中的临时文件处理方面的配置不当或漏洞,特别是由于其频繁使用,可能存在较多安全隐患。 |
/dev/shm |
用于存放共享内存对象的临时文件存储区域。由于默认权限设置为777,任何用户都可以在此目录创建或删除文件,这可能被恶意用户利用来执行特权升级或进行拒绝服务(DoS)攻击。 | 渗透测试人员可能会检查此目录的权限设置或搜索配置不当,以便找出潜在的安全漏洞。 |
/root |
root用户的主目录,包含敏感的配置文件。 | 渗透测试人员可能会关注此目录,以识别任何敏感信息、配置错误或潜在漏洞,这可能导致未经授权的访问。 |
/bin |
包含所有用户使用的基本二进制可执行文件。 | 渗透测试人员可能会在此目录中查找常见的可执行文件和二进制文件,以发现可能存在漏洞或配置错误。 |
/dev |
包含系统中所有设备的设备文件。虽然不包含设备驱动程序,但与设备相关的漏洞或配置错误可能被利用以实现未经授权的访问或信息泄露。 | 渗透测试人员可能会寻找与设备相关的漏洞或配置错误。 |
/home |
用户主目录,包括普通用户的主目录(如 /home/bob)以及 root 用户的主目录(/root)。 |
渗透测试人员可能会检查用户特定的配置和存储的凭据,以识别潜在的弱点或配置错误。 |
/sbin |
包含系统二进制文件和用于系统管理的命令。 | 渗透测试人员关注此目录,以识别需要提升权限的可执行文件,可能被利用进行未经授权的操作。 |
/etc |
对系统配置至关重要。 | 渗透测试人员通常会研究此目录,寻找配置文件中的配置错误、敏感信息或可能导致安全问题的漏洞。 |
/media |
识别外部设备,如USB驱动器和光驱。 | 渗透测试人员可能会评估系统如何处理外部设备,以寻找可能的安全风险或配置错误。 |
Linux常用命令
认识登录界面
我们来看看图中的每行所表示的是什么意思

第一行显示了Linux发行商和版本信息.
第二行展示了Linux使用的内核版本,以3.10.0为例.其中,3是主版本号,10是次要版本号,如果次要版本号为偶数,表示是一个稳定版本.最后的0是修订次数.
第三行展示了当前计算机的主机名,这里的”192”即为这台电脑的名称.
明白以上的一些参数之后,我们就可以登录了,首先在第三行的”192 Login:”后面输入用户名,这里我们输入root,然后按ENTER,接着要求输入用户密码,输入密码后,如果密码正确,则会出现如下画面:

Last Login: 这行表示我们这个用户的上次登录的时间和位置
[root@192~]# 这行的root:表示登录的用户是root用户
[]:这是分隔符,没有特殊含义
Root:显示的是当前的登录用户,这里使用root用户登录.
@:分隔符号,没有特殊含义
192:当前系统的简写主机名
~:表示目前位于/root目录下
#:表示root用户,是超级管理员,普通用户为$
在Linux系统中有家目录的说法,那么家目录是什么?Linux系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始位置就称为用户的家
- 超级用户的家目录:
/root - 普通用户的家目录:
/home/用户名
命令格式
1 | 命令格式: 命令 [-选项] [参数] |
在命令格式中,[]代表可选项,选项的功能是调整命令功能,参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作.
1 | ls -al /etc |
- 个别命令使用不遵循此格式
- 当有多个选项时,可以写在一起
- 选项分为短格式选项(-L)和长格式选项(–All),短格式选项是英文的简写,用一个减号调用,长格式是英文完整单词,用两个减号调用.
Linux的命令按照来源方式分为两种:
- Shell内置命令就是Shell自带的命令,这些命令是没有执行文件的;
- 外部命令就是由程序员单独开发的,是外来命令,所有会有命令的执行文件.
Linux中绝大多数命令是外部命令.
文件处理命令
目录处理命令
1. ls命令
1 | 命令英文原意:list |
使用方法
1 | [root@localhost ~]# ls --查看目录内容 |
2. mkdir命令
1 | 命令名称:mkdir |
使用方法
1 | [root@localhost ~]# mkdir test --创建test的空目录 |
3. cd命令
1 | 命令名称:cd |
需要掌握几个概念:
绝对路径是指通过完整的目录树结构来表示目标文件或子目录的路径.
在描述中,以目录结构为例,目标目录为
/root/test,而在该目录下有两个子目录testOne和testTwo,它们的绝对路径分别为/root/Test/testOne和/root/Test/testTwo.相对路径是相对于当前工作目录的路径表示方法.相对路径中包含两个符号,即
..和..其中,..表示当前工作目录的上一层目录,而.表示当前目录本身.
使用方法
1 | [root@localhost ~]# cd test/testOne --切换目录只需要在命令后面加目录名称即可 |
使用TAB键可将命令自动补全
4. pwd命令
1 | 命令名称:pwd |
使用方法
1 | [root@localhost ~]# pwd #显示绝对路径 |
5. rmdir命令
1 | 命令名称: rmdir |
使用方法
1 | [root@localhost ~]# mkdir -p test/abc/def #使用-p递归创建目录test/abc/def |
6. cp命令
1 | 命令名称: cp |
使用方法
1 | [root@localhost ~]# cp ps.txt /root/test/testOne #把ps.txt文件复制到testOne目录下 |
7. mv命令
1 | 命令名称: mv |
使用方法
1 | [root@localhost ~]# mv ps_bak.txt /tmp #移动后源文件被删除,类似剪切 |
8. rm命令
1 | 命令名称:rm |
使用方法
1 | [root@localhost cesi1]# rm ps_bak2 #删除文件ps_bak2 |
文件处理命令
1. touch
1 | 命令名称:touch |
使用方法
1 | [root@localhost test]# touch program #在本目录下创建文件program |
2. stat
1 | 命令名称:stat |
使用方法
1 | [root@192 ~]# stat anaconda-ks.cfg #查看文件详细信息 |
3. cat
1 | 命令名称: cat |
使用方法
1 | [root@localhost cesi1]# cat /etc/issue #查看issue文件内容 |
4. tac
1 | 命令名称: tac |
使用方法
1 | root@localhost cesi1]# tac /etc/issue #显示文件,反向显示 |
5. more
1 | 命令名称: more |
使用方法
1 | [root@localhost cesi1]# more /etc/services |
6. less
1 | 命令名称: less |
使用方法
1 | [root@localhost cesi1]# less /etc/services #查看文件 |
7. head
1 | 命令名称: head |
使用方法
1 | [root@localhost cesi1]# head -n 20 /etc/services #显示开头20行的内容 |
8. tail
1 | 命令名称: tail |
使用方法
1 | [root@localhost cesi1]# tail -n 19 /etc/services #显示services文件末尾19行内容 |
链接命令ln
1 | 命令名称:ln |
使用方法
1 | [root@localhost ~]# cp -l /root/ps.txt /root/psbak.txt #复制为硬链接文件 |
硬链接的特点
- 不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变
- 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问.
- 硬链接不会建立新的inode信息,也不会更改inode的总数
- 硬链接不能跨文件系统(分区)建立,应为在不同的文件系统中,inode号是重新计算的.
- 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下的所有子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的Linux来讲过于复杂.
软链接删除原文件,对软链接有影响,硬链接删除原文件,对硬链接没有影响
权限管理命令
为什么需要权限
在计算机系统中,权限的设定和不同用户等级的分配是为了确保系统的安全性和数据的完整性.
尽管在个人计算机上,我们可能都是被信任的用户,可以直接使用管理员身份登录,但在服务器上,情况就不同了.
服务器承载着大量重要且具有高价值的数据,如游戏数据、电子商城数据、银行数据等.
为了保护这些数据免受不当访问和意外损坏,需要对权限进行详细的设定.不同的用户可能需要执行不同的任务,具备不同的职位,因此需要分配相应的用户等级和权限等级.
在服务器环境中,不是所有用户都应该以root身份登录.
管理员拥有最大的系统权限,因此为了最小化潜在的风险,需要按照工作需要和职位需要来合理分配用户等级和权限等级.
这样可以有效地防止不必要的数据访问和潜在的安全漏洞,确保服务器系统的稳定性和安全性.
权限管理

- 所有者:一般是这个文件的建立者.
- 所属组:用户组是一组用户的集合,类似大学里各种社团.将用户放到用户组里是为了方便管理.
- 其他用户权限:字面意思即非所有者和所属组成员的用户对文件的权限.
文件类型
-: 普通文件.b: 块设备文件.这是一种特殊设备文件,存储设备都是在这种文件,如分区文件/dev/sda1就是这种文件.c: 字符设备文件.这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等.d: 目录文件.Linux中一切皆文件,所以目录也是文件的一种.l: 软链接文件.p: 管道符文件.这是一种非常少见的特殊设备文件.s: 套接字文件,这也是一种特殊设备文件,一些服务支持Socket访问,就会产生这样的文件.
文件目录权限总结
| 代表字符 | 权限 | 数字代表 | 对文件的含义 | 对目录的含义 |
|---|---|---|---|---|
| r | 读权限 | 4 | 可以查看文件的内容 | 可以列出目录中的内容 |
| w | 写权限 | 2 | 可以修改文件内容 | 可以在目录中创建、删除文件 |
| x | 执行权限 | 1 | 可以执行文件 | 可以进入目录 |
基本权限命令
1. chmod
1 | 命令名称: chmod |
使用方法
1 | [root@192 ~]# touch qx |
2. chown
1 | 命令名称: chown |
使用方法
1 | [root@192 ~]# chown Bob test #改变Bob文件的所属用户 |
文件搜索命令
Linux拥有强大的搜索功能,但是强大带来的缺点是相对比较复杂,搜索命令只是选项较多,不容易记忆而已,并不难理解.
在使用搜索命令的时候,大家要注意,如果搜索的范围过大、搜索的内容过多,则会给系统造成巨大的压力,所以不要在服务器访问的高峰执行大范围的搜索命令.
| 命令 | 描述 |
|---|---|
find |
文件搜索 |
which |
搜索命令所在目录及别名信息 |
whereis |
搜索命令所在目录及帮助文档路径 |
grep |
在文件内容中搜索子串匹配的行并输出 |
1. which
1 | 命令名称:which |
使用方法
1 | #需要了解知识: |
2. find
find是Linux中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode号等来搜索文件.但是find命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大,所以在使用find命令搜索时,不要指定过大的搜索范围.
1 | ##需要了解知识: |
使用方法
1 | ##范例1:按照文件名搜索 |
3. grep
1 | 命令名称:grep |
使用方法
1 | [root@localhost sbin]# grep -i sum ./sum.sh #查找sum.sh脚本中sum的内容 |
帮助命令
1. man [info]
1 | 命令名称:man |
使用方法
1 | ## 查看命令的帮助信息 |
2. help
1 | 命令名称:help |
3. –help
1 | [root@localhost sbin]# touch --help |
压缩解压缩命令
在Linux系统中,与Windows不同,文件类型并非仅依赖于扩展名,而主要取决于文件的权限.
Linux系统不靠扩展名来区分文件类型,而是通过权限来控制.各种压缩格式(如”.zip”、”tar”、”gz”、”bz2”等)在Linux中的解压缩方法各不相同,扩展名在此主要作为用户辨识压缩格式的标识.
用户在Linux系统中不需要深入了解各种压缩格式的技术差异,只需知道对应的压缩包如何解压缩,以及在需要压缩文件时应如何操作.
这种差异不仅体现在表面的扩展名上,更涉及到系统底层的权限和文件管理机制.
因此,在Linux中正确识别和处理压缩文件需要用户了解正确的压缩格式,以使用相应的压缩命令.
1. gzip gunzip命令
.gz格式是Linux中最常用的压缩格式,使用gzip命令进行压缩1 | 命令名称:gzip |
1 | [root@localhost test]# cp /etc/services /root/test/compress #复制services文件,更名为compress |
gzip 只能压缩文件,压缩后不保留原文件,不能压缩目录
2. zip unzip命令
.zip是Windows中最常用的压缩格式,Linux也可以正确识别.zip格式,这可以方便地和Windows系统通用压缩文件。
1 | 命令名称:zip |
1 | [root@localhost test]# zip yasuo.zip yasuo |
3. bzip2 bunzip2命令
.bz2格式是Linux的另一种压缩格式,从理论上来讲,.bz2格式的算法更先进,压缩比更好;而.gz格式相对来讲压缩时间更快。
1 | 命令名称:bzip2 |
1 | [root@localhost test]# bzip2 -k compress #使用bzip2 压缩文件compress |
4. tar命令
在Linux中,对打包和压缩是区别对待的.在Linux中,如果想把多个文件或目录打包到一个文件包中,使用的是tar命令,而压缩使用的是gzip或bzip2命令.
1 | 命令名称:tar |
1 | root@localhost test]# tar -cvf test.tar testOne testTwo #打包testOne testTwo目录 |
网络命令
IP地址是计算机在互联网中唯一的地址编码.每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网IP地址.
Linux也需要配置IP地址才可以正常使用网络.其实Linux主要是通过修改网卡配置文件来永久修改IP地址的.
1. ip命令
ip命令逐渐取代了ifconfig命令,两条命令功能接近,但是ip命令的功能更加强大
1 | 命令名称:ip |
使用方法
1.查看IP地址信息
1 | [root@192 ~]# ip address show ## |
2.查看路由表
1 | [root@192 ~]# ip route show |
2. ifconfig命令
1 | 命令名称:ifconfig |
1.查看IP地址
1 | [root@192 ~]# ifconfig |
3. ifup和ifdown命令
ifup和ifdown是两个非常简单的命令,其作用类似于Windows中的启用和禁用网卡,主要用于启用和关闭网卡
1 | [root@192 ~]# ifdown eth0 #关闭eth0网卡 |
4. ping命令
ping命令是常用的网络命令,主要通过ICMP进行网络探测,测试网络中主机的通信情况
1 | 命令名称:ping |
1 | root@localhost test]# ping 192.168.2.156 #测试到主机的连通性,按Ctrl+C后结束测试 |
5. ss命令
在CentOS7,可以通过ss命令取代netstat命令.
1 | 命令名称:ss |
1 | root@localhost test]# ss -an #查看本机所有的网络连接,包括Scoket程序连接,TCP连接,UDP连接 |
6. netstat命令
1 | 命令名称:netstat |
端口的作用:在互联网中,如果IP地址是服务器在互联网中唯一的地址标识,那么想象一下,我有一台服务器,它有固定的公网IP地址,通过IP地址可以找到我的服务器.但是我的服务器中既启动了网页服务(WEB服务),又启动了文件传输服务(FTP服务),那么你的客户端访问我的服务器,到底应该如何确定你访问的是哪一个服务?
端口就是用于网络通信的接口,是传输层向上传递数据到应用层的通道.我们可以理解为每个常规服务都有默认的端口号,通过不同的端口号,就可以确定不同的服务.这样,互联网上的数据流就能准确地到达我们期望的服务,实现了不同服务之间的有效区分和协同工作.
1 | [root@localhost ~]# netstat -tuln ##查看本机开启的端口 |
7. lsof
lsof(List Open Files)是一个用于显示系统中已打开文件的工具,包括网络套接字、设备文件等.- 通过
lsof命令,你可以查看哪些进程打开了哪些文件、套接字,以及它们所占用的资源情况.
基本语法
lsof的基本语法是:
1 | lsof [option] [file | directory | process ID] |
option:用于指定一些选项,如-i用于显示网络连接.file | directory | process ID:可选参数,用于过滤显示的结果.
主要功能
- 显示打开文件的进程:
lsof [file]:显示指定文件相关的进程信息.lsof [directory]:显示指定目录相关的进程信息.
- 网络连接查询:
lsof -i:显示所有打开的网络连接和套接字信息.
- 按进程ID过滤:
lsof -p [process ID]:显示特定进程ID打开的文件和套接字.
- 按用户过滤:
lsof -u [username]:显示指定用户打开的文件和套接字.
例子和用法
显示所有打开文件的进程:
1
lsof
显示指定文件相关的进程信息:
1
lsof /path/to/file
显示网络连接和套接字信息:
1
lsof -i
系统级别的操作
查找占用端口的进程:
1
lsof -i :[port]
查看已删除的文件被哪个进程占用:
1
lsof +L1
8. scp
scp(Secure Copy Protocol)是一个用于在本地和远程系统之间安全地传输文件的命令行工具.scp通过SSH协议进行数据传输,提供加密和认证的安全性.
基本语法
scp的基本语法是:
1 | scp [options] [source] [destination] |
options:可选参数,用于指定一些选项,如-r用于递归复制.source:源文件或目录的路径.destination:目标路径,可以是本地路径或远程主机路径.
主要功能
- 从本地到远程的复制:
scp [source] [user@remote_host:destination]
- 从远程到本地的复制:
scp [user@remote_host:source] [destination]
- 递归复制:
scp -r [source_directory] [user@remote_host:destination_directory]
- 指定端口:
scp -P [port] [source] [user@remote_host:destination]
例子和用法
从本地到远程的复制:
1
scp file.txt root@192.168.64.123:/path/to/destination/
从远程到本地的复制:
1
scp root@192.168.64.123:/path/to/source/file.txt /local/destination/
递归复制:
1
scp -r folder root@192.168.64.123:/path/to/destination/
注意事项
scp是基于SSH的,确保远程主机支持SSH.- 当传输大量文件或文件夹时,使用
-r选项以递归方式复制.
9. nmtui
- 命令名称:
nmtui - 命令路径:
/usr/bin/nmtui - 执行权限:
root权限执行. - 语法:
nmtui
进程管理命令
1. ps
查看进程信息
基本语法
1 | ps [options] |
主要功能
ps命令用于显示当前运行的进程信息.- 通过不同的选项可以指定显示不同类型的进程信息.
例子和用法
显示所有用户的详细进程信息:
1
2
3
4[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193688 6216 ? Ss 14:12 0:03 /usr/lib/systemd/systemd --switched-root --system --desroot 2 0.0 0.0 0 0 ? S 14:12 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:12 0:00 [kworker/0:0H]- USER: 显示进程的拥有者,即运行进程的用户.
- PID: 进程ID,是每个进程的唯一标识符.
- %CPU: 进程占用CPU的百分比,表示进程在CPU上的利用率.
- %MEM: 进程占用内存的百分比,表示进程在物理内存上的利用率.
- VSZ: 进程的虚拟内存大小(以KB为单位),包括进程使用的所有虚拟内存.
- RSS: 进程使用的实际物理内存大小(以KB为单位),即驻留集大小.
- TTY: 与进程关联的终端类型,如果没有终端与之关联,则显示
?. - STAT: 进程状态,常见的包括:
- S(Sleeping): 进程休眠中.
- R(Running): 进程正在运行.
- D(Disk sleep): 进程不可中断的休眠.
- Z(Zombie): 僵尸进程,进程已经终止,但其父进程尚未回收其资源.
- START: 进程启动的时间,显示时钟时间或者日期.
- TIME: 进程占用CPU的累计时间,显示格式为分钟:秒.
- COMMAND: 启动进程的命令行.
查找特定进程的详细信息:
1
ps aux | grep process_name
2. top
实时查看系统进程
基本语法
1 | top |
主要功能
top命令提供了实时显示系统中运行的进程及其资源占用情况的功能.- 以动态更新的方式展示进程列表和各项资源使用情况.
例子和用法
实时显示运行中的进程列表和系统资源使用情况:
1 | [root@localhost ~]# top |
- 系统概况部分:
- top - 16:22:40 up 2:09, 2 users, load average: 0.00, 0.02, 0.05
16:22:40: 当前系统时间.up 2:09: 系统运行时间,2小时9分钟.2 users: 当前登录的用户数.load average: 0.00, 0.02, 0.05: 系统负载,分别表示1分钟、5分钟和15分钟的负载平均值.
- top - 16:22:40 up 2:09, 2 users, load average: 0.00, 0.02, 0.05
- 任务信息部分:
- Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
116 total: 总任务数.1 running: 正在运行的任务数.115 sleeping: 休眠中的任务数.0 stopped: 停止的任务数.0 zombie: 僵尸任务数.
- Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
- CPU使用情况部分:
- %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu(s): CPU使用率.us: 用户空间占用CPU的百分比.sy: 内核空间占用CPU的百分比.ni: 用户进程以优先级调整过的时间.id: CPU空闲时间.wa: CPU等待I/O操作的时间.hi: CPU处理硬中断的时间.si: CPU处理软中断的时间.st: 被虚拟机偷取的时间.
- %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- 内存使用情况部分:
- KiB Mem: 1863028 total, 131844 free, 496824 used, 1234360 buff/cache
1863028 total: 总内存大小.131844 free: 空闲内存大小.496824 used: 已使用内存大小.1234360 buff/cache: 用作缓存的内存大小.
- KiB Swap: 2097148 total, 2095348 free, 1800 used. 1170648 avail Mem
2097148 total: 总交换空间大小.2095348 free: 空闲交换空间大小.1800 used: 已使用的交换空间大小.1170648 avail Mem: 可用于分配的内存大小.
- KiB Mem: 1863028 total, 131844 free, 496824 used, 1234360 buff/cache
- 进程列表部分:
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID: 进程ID.USER: 进程所属用户.PR: 进程的优先级.NI: 进程的优先级值(负值表示高优先级,正值表示低优先级).VIRT: 进程使用的虚拟内存大小.RES: 进程使用的实际物理内存大小.SHR: 进程使用的共享内存大小.S: 进程状态(详见man top中的PROCESS STATES).%CPU: 进程占用CPU的百分比.%MEM: 进程占用内存的百分比.TIME+: 进程累计占用CPU的时间.COMMAND: 启动进程的命令行.
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
安全性和权限
top通常需要超级用户权限,或者用户拥有特定的权限组(如proc组).
注意事项
- 提供交互式界面,方便实时监控系统性能.
- 结合不同选项使用,可以按需查看各项资源使用情况.
3. Kill
kill命令用于终止或向进程发送信号,是 Linux 系统中进程管理的重要工具.通过kill命令,用户可以控制和管理运行中的进程.
基本语法
kill的基本语法如下:
1 | kill [options] <PID> |
options:可选参数,用于指定发送的信号类型等.<PID>:进程ID,表示要操作的目标进程.
主要功能
- 终止进程:
kill主要用于终止运行中的进程,通过向目标进程发送信号来实现.
例子和用法
向进程发送默认信号(SIGTERM):
1
kill 1234
向进程发送指定信号(SIGKILL):
1
kill -9 5678
系统级别的操作
终止指定进程:
1
kill 1234
安全性和权限
kill命令需要执行用户对目标进程的操作权限,通常需要与目标进程拥有相同的用户权限.
注意事项
- 在终止进程时,使用不同的信号可能导致不同的行为,谨慎选择信号类型.
- 使用
-9选项(SIGKILL)将强制终止目标进程,但可能导致数据丢失,应慎用.
系统管理
1. Systemctl命令
systemctl是一个用于控制systemd系统和服务的命令行工具.systemd是现代Linux系统的初始化系统,负责启动和管理系统上运行的服务.systemctl命令可用于查看和控制服务、查看系统日志以及执行其他系统管理任务.
基本语法
systemctl的基本语法是:
1 | systemctl [option] [command] [unit] |
option:用于指定一些全局选项.command:指定要执行的操作,如start、stop、restart等.unit:可选参数,指定服务或其他系统单元的名称.
主要功能
- 服务管理:
start [unit]:启动服务.stop [unit]:停止服务.restart [unit]:重新启动服务.status [unit]:查看服务状态.enable [unit]:设置服务为开机自启.disable [unit]:禁止服务开机自启.
- 系统状态查询:
journalctl:查看系统日志.list-units:显示当前活动的系统单元.analyze:查看系统加载时间和性能.
- 单元文件管理:
list-unit-files:列出所有可用的单元文件.show [unit]:显示单个单元文件的详细信息.
例子和用法
启动和停止服务:
1
2systemctl start apache2
systemctl stop apache2查看服务状态:
1
systemctl status apache2
查看系统日志:
1
journalctl
2. Service
service命令是用于在Unix-like操作系统中管理系统服务的脚本工具.它提供了一种简单的方式来启动、停止、重新启动和查询系统服务的状态.
基本语法
service的基本语法是:
1 | service [option] serviceName [command] |
option:用于指定一些全局选项.serviceName:指定服务的名称.command:可选参数,指定要执行的操作,如start、stop、restart等.
主要功能
- 服务管理
start [serviceName]:启动服务.stop [serviceName]:停止服务.restart [serviceName]:重新启动服务.status [serviceName]:查看服务状态.enable [serviceName]:设置服务为开机自启.disable [serviceName]:禁止服务开机自启.
例子和用法
启动和停止服务:
1
2bashCopy codeservice apache2 start
service apache2 stop查看服务状态:
1
2bashCopy code
service apache2 status重新启动服务:
1
2bashCopy code
service apache2 restart
通过service命令,可以方便地管理系统服务的运行状态.
3. 关机重启命令
说到关机和重启,很多人认为,重要的服务器(比如银行的服务器、电信的服务器),如果重启了,则会造成大范围的灾难,其实,银行或电信服务器,也是需要维护,是依靠备份服务器来代替,如果你有自己的经验,则完全可以按照自己的经验来维护服务器.
shutdown
1 | [root@localhost test]# shutdown [选项] 时间 |
1 | [root@localhost test]# shutdown -h now #表示现在关机 |
其他关机指令
1 | [root@localhost test]# halt #直接关机 |
其他重启命令
1 | [root@localhost test]# reboot #重启 |
用户和用户组管理
Linux系统是一个多用户多任务的分时操作系统.用户在使用系统资源之前,需向系统管理员申请一个账号,并以此账号的身份进入系统.账号有助于系统管理员跟踪用户活动、控制他们对系统资源的访问,同时也帮助用户组织文件并提供安全性保护.
每个用户账号都有唯一的用户名和相应的口令.用户通过输入正确的用户名和口令进行登录,随后可以进入系统并访问自己的主目录.这种安排有助于实现对系统资源的合理管理和用户身份的认证.
用户管理
1. useradd
1 | 命令名称:useradd |
1 | 实例1 |
Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理.
2. userdel
如果一个用户的账号不再使用,可以从系统中删除.删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录.
删除一个已有的用户账号使用userdel命令,其格式如下:
1 | userdel [选项] [用户名] |
3. usermod
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等.
修改已有用户的信息使用usermod命令,其格式如下:
1 | usermod [选项] [用户名] |
1 | [root@localhost ~]# usermod -s /bin/ksh -d /home/z –g developer sam |
4. passwd
用户管理的一项重要内容是用户口令的管理.用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令.
指定和修改用户口令的Shell命令是passwd.超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令.
1 | 命令名称:passwd |
1 | 假设当前用户是sam,则下面的命令修改该用户自己的口令: |
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
1 | [root@localhost ~]# passwd -d sam |
1 | [root@localhost ~]# passwd -l sam |
5. who
1 | 命令名称:who |
1 | [root@localhost test]# who |
6. whoami
1 | 命令名称:whoami |
7. id
1 | 命令名称:id |
8. su
1 | 命令名称:su |
用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建.
用户组的管理涉及用户组的添加、删除和修改.组的增加、删除和修改实际上就是对/etc/group文件的更新.
1. groupadd
1 | 其格式如下: |
1 | 范例1: |
2. groupdel
1 | 其格式如下: |
3. groupmod
1 | 其语法如下: |
1 | 范例1: |
4. newgrp
一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限.用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组.例如:
1 | [root@localhost ~]$ newgrp root |
与用户账号有关的系统文件
完成用户管理的工作有多种方法,但每一种方法实际上都涉及对相关的系统文件进行修改.与用户和用户组相关的信息存放在一些系统文件中,其中包括 /etc/passwd、/etc/shadow、/etc/group等.接下来将分别介绍这些文件的内容.
1. /etc/passwd文件
/etc/passwd 文件是用户管理工作中涉及的最重要的文件之一.每个用户在Linux系统中都有一个对应的记录行,该行包含了用户的基本属性.这个文件对所有用户都是可读的,而其内容则类似于下面的例子:
1 | [root@localhost ~]# cat /etc/passwd |
每个字段的含义:
- 用户名 (john): 用户的登录名.
- 密码占位符 (x): 在过去,密码是存储在这里的,现在通常被放置在
/etc/shadow文件中. - 用户ID (1000): 用户的唯一标识符.
- 组ID (1000): 用户所属的主要用户组的标识符.
- 用户描述 (John Doe): 一般是用户的真实姓名或其他描述性信息.
- 用户家目录 (/home/john): 用户的主目录,登录时的初始工作目录.
- 登录Shell (/bin/bash): 用户登录时启动的Shell.
通过修改这个文件中的记录,可以更改用户的属性,但需要小心,因为直接编辑可能会导致系统不稳定.通常,用户和组的管理最好使用专门的命令工具,如useradd、userdel、usermod等.
在系统中,存在一类称为伪用户(pseudo users)的特殊用户.虽然它们在 /etc/passwd 文件中有一条记录,但由于其登录Shell为空,因此这些用户无法进行登录.它们的存在主要为了方便系统管理,并满足系统进程对文件属主的特定要求.
常见的伪用户及其含义:
- bin: 拥有可执行的用户命令文件.
- sys: 拥有系统文件.
- adm: 拥有帐户文件.
- uucp: 用于UUCP(Unix to Unix Copy)通信协议.
- lp: 用于lp或lpd子系统,负责打印服务.
- nobody: 用于NFS(Network File System)服务,通常用于执行不涉及安全问题的服务.
2. /etc/shadow
伪用户和安全性
除了之前提到的标准伪用户(如bin、sys、adm等),Linux系统还包含许多其他伪用户,如audit、cron、mail、usenet等.这些伪用户与系统中相关的进程和文件密切相关.
口令文件的安全性
用户口令在
/etc/passwd文件中可读,因此如果密码简单或者规律性强,存在被破解的风险.为提高安全性,Linux系统将加密后的口令分离存储在独立文件中,即/etc/shadow文件.该文件只有超级用户有读权限,确保了用户密码的安全性./etc/shadow文件中的记录行与/etc/passwd中的用户一一对应,由pwconv命令根据/etc/passwd中的数据自动生成.记录行包含以下字段:- 登录名: 与
/etc/passwd中的登录名一致. - 加密口令: 存放加密后的用户口令.
- 最后一次修改时间: 用户最后一次修改口令时的天数.
- 最小时间间隔: 两次修改口令之间所需的最小天数.
- 最大时间间隔: 口令保持有效的最大天数.
- 警告时间: 从系统开始警告用户到口令失效之间的天数.
- 不活动时间: 用户没有登录活动但账号仍能保持有效的最大天数.
- 失效时间: 给出账号的生存期,期满后账号不再合法.
这样的分离增强了系统的安全性,防止直接读取口令文件导致的安全问题.
- 登录名: 与
下面是/etc/shadow的一个例子:
1 | [root@localhost ~]# cat /etc/shadow |
3. /etc/group
用户组信息存储在/etc/group文件中.在Linux系统中,将用户分组是对用户进行管理和控制访问权限的一种方式.每个用户属于一个主组,并可以属于多个附加组.用户要访问属于附加组的文件时,需要使用newgrp命令成为所要访问组的成员.
/etc/group文件的格式与/etc/passwd类似,由冒号(:)隔开若干字段,包括:
- 组名: 用户组的名称,由字母或数字构成,不应重复.
- 口令: 用户组加密后的口令字,一般为空.
- 组标识号: 用于系统内部标识组的整数.
- 组内用户列表: 属于这个组的所有用户,用逗号(
,)分隔,可能是主组或附加组.
以下是/etc/group文件的示例:
1 | root::0:root |