Linux系统及应用课程笔记
本文最后更新于29 天前,其中的信息可能已经过时,如有错误请在评论区留言

Linux系统及应用课程笔记

第一章Linux导论

CPU、频率、内存、硬盘、操作系统、服务接口

用于执行系统软件和应用软件的处理器称为CPU

频率是指单位时间内运算的次数。

内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时存放程序和数据,一旦关闭电源或发生断电,其中的程序和数据就会丢失。

硬盘是主要的存储媒介之一,接口形式分为:

  • IDE:“电子集成驱动器”,并口
  • SATA:串口,硬盘转速更高
  • SCSI:转速快,但是价格较高

简单来说,操作系统是一个软件,能驱动所有的硬件,并提供一个开发软件的开发接口,在这个基础上再开发软件将会非常简单。
操作系统(Operating System,OS)是计算机系统软件的重要组成部分,用来控制和管理计算机系统资源,合理地组织计算机工作流程,为用户有效地使用计算机提供一个功能强大、使用方便和可扩展的工作环境。操作系统是计算机用户与计算机之间进行通信的接口。
操作系统定义如下:操作系统是一组控制和管理计算机硬件和软件资源、合理地对各类作业进行调度、方便用户使用的程序的集合。
操作系统的功能是管理和控制计算机系统中的硬件、软件资源,合理地组织计算机工作流程,并为用户提供一个良好的工作环境和友好的接口。
从资源管理的角度出发,操作系统应具有五个方面的功能:处理机管理、存储器管理、设备管理、文件管理和用户接口

核心(Kernel)是指操作系统最底层的东西,每个操作系统都有自己的核心,由它来掌管整个硬件资源的工作状态

Linux系统

定义:Linux是一个Unix-like的操作系统,它是硬件与用户的交互接口,具有免费、高稳定性、支持多用户多任务环境、节省资源等优点。

Linux系统的层次结构

服务接口:外层的软件必须以事先约定好的方式使用内层软件或硬件提供的服务。通常把这种约定称为接口(Interface)。

Linux的内核版本

Linux内核版本由3个数字组成:r.x.y
r:目前发布的Kernel主版本。
x:偶数是稳定版本,奇数是开发中的版本。
y:错误修补次数。

第二章安装CentOS

Linux系统的目录层次结构

文件系统层次结构(Filesystem Hierarchy Standard,简称FHS)

Linux系统使用树型目录结构,在整个系统中只存在一个根目录(文件系统)
Linux系统中总是将文件系统挂载到树型目录结构中的某个目录节点中使用
在Linux中所有的设备都被当做一个文件来对待!!!

目录作用
/根目录,所有文件和目录的起点
/bin存放基本的用户命令和可执行文件,系统启动时必需的命令
/boot存放启动相关文件,如内核文件、引导加载程序
/dev存放设备文件,用于访问硬件设备(硬盘、串口、USB等)
/etc存放系统配置文件,如网络配置、用户配置等
/home存放用户的个人文件和设置,每个用户有独立的子目录
/lib存放共享库文件,供系统和程序使用
/media挂载可移动存储设备(如USB、光盘等)
/mnt临时挂载文件系统或设备的目录
/opt存放第三方应用程序或可选软件包
/proc虚拟文件系统,提供系统和进程的实时信息
/root超级用户(root)的家目录
/sbin存放系统管理员使用的命令,用于系统维护
/srv存放由系统提供的服务产生的数据
/sys虚拟文件系统,提供内核和硬件设备的实时信息接口
/tmp存放临时文件,供程序在运行时使用
/usr存放共享的系统文件和程序,包含可执行文件、库文件、文档等
/var存放经常变化的数据,如日志、邮件、缓存等
来源ChatGPT 4o
更加详细见第三章Linux的文件权限和目录配置-Linux目录配置

Linux中的硬件设备号

设备Linux内的设备号
IDE硬盘/dev/hd[a-d]
SCSI/SATA/USB硬盘/dev/sd[a-p]
U盘/dev/sd[a-p]
CD ROM/DVD ROM/dev/cdrom
软驱/dev/fd[0-1]
打印机/dev/lp[0-2]
鼠标/dev/mouse
磁带机/dev/ht0(IDE)或/dev/st0(SCSI接口)

开机流程与主引导分区

Bios:开机后自动运行的第一个程序,分析计算机内有哪些存储设备,根据用户的设置寻找能够开机的硬盘,并读取并执行该硬盘的MBR中的最基本的引导加载程序,从而加载内核文件。

VMware虚拟机下安装Linux系统

利用VMware在所建的虚拟系统和主机之间的硬件中,只共享CPU和内存,其它如网卡、声卡、显卡等都是虚拟的,也就是说只要你的计算机内存足够大,就可以在主机下同时运行多个虚拟系统。
虚拟系统的主要硬件都是虚拟的,所以它有很好的移植性,即在一台计算机上安装的虚拟系统,完全可以移植到另外一台计算机上运行。
在VMware主界面中,打开目录中对应的文件即可载入新拷贝过来的新虚拟机系统,然后启动即可。

VMware虚拟平台为主机与虚拟机之间提供了三种网络模式:
(1) 桥接模式 (2) NAT模式 (3) 仅主机模式

设置了虚拟机的网络模式还无法构建主机和虚拟机之间的网络通信,还需配置虚拟网卡和虚拟机的IP地址。下面以构建“仅主机模式”的网络通信关系为例,介绍具体的网络配置方法。
(1) 虚拟机的网络配置
(2) 虚拟网卡的网络配置:即主机和虚拟机之间的虚拟网卡的网络配置。
为了保证主机和虚拟机之间的网络通信,一般要求为同一IP段的地址。

命令提示符表示命令输入的状态

管理员root用户的提示符“#”
[root@localhost ~]#
普通用户提示符“$”
[teacher@localhost ~]$

Linux命令格式
Linux命令组成部分
命令字 命令选项 命令参数

example:

第三章Linux的文件权限和目录配置

用户和用户组

  • 用户:一定资源的使用者,可以创建和管理文件以及访问其他用户文件
  • 用户组:由一定数量的对某些文件具有相同操作权限的用户组成的小组
  • UID与GID:用户与用户组的标识号
  • 其他人
  • root

用户与用户组的相关文件

  • /etc/passwd:所有系统帐号、一般用户以及root的相关信息
  • /etc/shadow:密码记录
  • /etc/group:用户组名

权限控制机制

Linux系统是个多用户系统,能做到不同的用户能同时访问不同的文件,因此一定要有文件权限控制机制
Linux系统的权限控制机制和Windows的权限控制机制有着很大的差别

Linux的文件或目录被一个用户拥有时,这个用户称为文件的拥有者(或属主)
同时文件还被指定的用户组所拥有,这个用户组称为文件所属组;一个用户可以是不同组的成员,这可以由管理员控制
文件的权限由权限标志来决定,权限标志决定了文件的拥有者、文件的所属组、其他用户对文件访问的权限

用户和权限

Linux文件权限规则怪诞:

Linux为每个文件都分配了一个所有者,称为文件属主,并赋予文件主唯一的注册名;对文件的控制取决于文件主或root用户

文件的所属关系是可以改变的,可以将文件或目录的所有权转让给其他用户,但只有文件属主或root才有权改变文件的所属关系

可以用chown命令更改某个文件或目录的所有权;如果改变了文件或目录的所有权,原文属主将不再拥有该文件或目录的控制权

用户组:Linux下,每个文件又属于一个用户组;当创建一个文件或目录时,系统会赋予它一个用户组关系,chgrp命令可以改变文件的组关系

访问权限:Linux系统中的每个文件和目录都有访问权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作

Linux系统中规定了3种不同类型的用户:

  • 文件属主(user)
  • 同组用户(group)
  • 可以访问系统的其他用户(others)

访问权限规定3种访问文件或目录的方式:

  • 读(r)
  • 写(w)
  • 可执行或查找(x)

在Linux的命令提示符下,键入命令

ls  -l

命令用来列出文件和目录的详细信息。它的输出通常包含以下列:

  • 文件类型和权限(第一列)
  • 第一列显示文件的类型和权限。
  • 第一个字符表示文件类型:
    • - 表示普通文件
    • d 表示目录
    • l 表示符号链接
    • c 表示字符设备文件
    • b 表示块设备文件
    • p 表示命名管道(FIFO)
    • s 表示套接字文件
  • 后面的9个字符表示文件的权限,按三组显示:
    • 第1-3个字符表示文件主(Owner)对文件的权限。
    • 第4-6个字符表示文件所在组(Group)对文件的权限。
    • 第7-9个字符表示其他用户(Others)对文件的权限。
      权限的字符包括:
    • r 表示可读(read)
    • w 表示可写(write)
    • x 表示可执行(execute)
    • - 表示没有对应的权限。
  • 硬链接数(第二列)
    显示指向该文件的硬链接数。对于目录来说,这个数字表示包含该目录的子目录的数量(加上目录本身)。
  • 文件属主(第三列)
    显示文件的所有者,即文件主的用户名。
  • 文件所属组(第四列)
    显示文件的所属用户组。
  • 文件大小(第五列)
    显示文件的大小,以字节为单位。
  • 最后修改时间(第六列)
    显示文件最后修改的时间,通常格式为 月 日 时间(例如:Jan 1 12:34)。若文件较久未修改,可能显示年份。
  • 文件名(第七列)
    显示文件或目录的名称。对于符号链接,还会显示链接指向的目标。

示例输出:
-rw-r–r– 1 user group 1234 Jan 1 12:34 example.txt


-rw-r–r–:普通文件,主用户有读写权限,组用户和其他用户有读权限。
1:硬链接数为1。
user:文件的所有者是 user。
group:文件的所属组是 group。
1234:文件大小为 1234 字节。
Jan 1 12:34:最后修改时间是1月1日的12:34。
example.txt:文件名是 example.txt。

修改文件权限

改变权限命令:chmod
rwx可以分别用数字表示
r –> 4
w –> 2
x –> 1
rwx的组合可以用这些数字的和表示(按位或)
rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
— = 0+0+0 = 0
rwxr-x—就可以用750来表示!
语法:
chmod [-R] xyz 文件
其中xyz分别为三组rwx属性数值的和

设定文件权限时,在模式中常用以下的字母代表用户或用户组:
u(user)表示文件的所有者
g(group)表示文件的所属组
o(others)表示其他用户
a(all)代表所有用户(即u+g+o)
权限用以下字符表示:
r表示读权限
w表示写权限
x表示执行权限
最后要指明增加(+)、取消(-)权限,只赋予权限(=)

命令:chown

改变某个文件或目录的拥有者和所属的组
格式:chown [选项]用户或组 文件名 
说明:
只有文件主和超级用户才可以使用该命令
同时改变文件主和文件所属的组时,用户名和用户组名由冒号分开
选项:
-R 递归式地改变指定目录及其所有子目录、文件的文件主

命令:chgrp

改变文件或目录的所属组。
格式:chgrp [选项] 组名 文件名
说明:
如果用户不是该文件的文件主或超级用户,则不能改变该文件或目录的所属组
chown可以同时改变文件拥有者和所属组,chgrp只具有改变所属组的功能
参数选项:
-R 递归式地改变指定目录及其下面的所有子目录和文件的用户组

r (read) – 读取权限:
允许查看文件夹中的内容,即列出目录中的文件和子目录。如果没有读权限,用户无法使用 ls 命令查看该目录的文件。

w (write) – 写入权限:
允许在目录中创建、删除或重命名文件和子目录。如果没有写权限,用户不能向目录中添加或删除文件,无法修改目录内的文件。

x (execute) – 执行权限:
允许进入该目录(即使用 cd 命令切换到该目录)。如果没有执行权限,用户无法进入该目录,即便目录中有读取权限。

具体来说:

没有执行权限(x)意味着你无法使用 cd 命令进入该目录。即使你有写权限(w),你也无法进入目录进行文件创建、删除或重命名等操作。
写入权限(w)仅在你已经能够进入目录的情况下才有意义。如果没有 执行权限(x),你根本无法进入该目录,写入权限就无法发挥作用。

举个例子:
如果目录权限是 rw-(没有执行权限),你可以查看目录中的文件内容(如果有读取权限),但不能进入该目录,也无法在其中创建、删除或修改文件。
如果目录权限是 r-x(没有写入权限),你可以进入该目录,并查看其中的内容,但不能在目录中进行文件操作(如创建或删除文件)。
总结来说,x 权限是必须的,它决定了你是否能够进入该目录并对其进行操作。

文件夹(目录)文件的创建和删除

mkdir:创建目录
rmdir:删除空目录
touch:创建文件
rm:删除文件
rm -r 目录名:删除非空目录

文件类型

普通文件
纯文本文件(数字、字母)
二进制文件 (cat)
数据格式的文件
目录文件
链接文件:类似于windows下面的快捷方式
设备文件:与系统外设及存储相关的文件
[b]块(block)设备文件:存储设备
[c]字符(character)设备文件:串行口设备,键盘鼠标
套接字:网络数据连接
管道

文件名及扩展名

文件名是文件的唯一标识符
linux使用ext2或ext3文件系统,文件名遵循以下约定:

  • 可以使用除“/”以外的所有ASCII字符,但不能包含空格和一些对shell来说有特殊含义的字符,如:
    ! $ # * & ? \ , ; < > [ ] { } ( ) ^ @ % | “ ‘ `
  • 文件名区分大小写字母, 如:
    sample.txt、Sample.txt和SAMPLE.TXT都代表不同的文件。
  • 文件名最长可达到256个字符。
  • 文件名以句点开头,则该文件就成为隐藏文件。

Linux中的后缀没有意义:
.sh、.Z、.tar.gz、.zip、.tgz、.html、.php、.pl
Linux系统中文件名只是帮组我们了解文件可能的用途,真正的执行与否仍然需要权限规范。

Linux目录配置

Linux文件系统由文件和目录组成,文件是专门用来存储数据的对象,而目录是一种用来组织文件和其他目录的容器。
标准FHS:Filesystem Hierarchy Standard,规范了根目录(/)及子层(/usr、/var)下的目录放置什么文件

 可分享的(shareable不可分享( unshareable
不变的(static)/usr(软件放置处)/etc(配置文件)
/opt(第三方软件)/boot(开机与内核文件)
可变动的(variable)/var/mail( 用户邮件信箱)/var/run(程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)

 /
根目录root(/)

/bin
bin 就是二进制(binary)英文缩写,是存放用户可执行的二进制文件的目录。这里存放例如ls, mv, rm, mkdir, rmdir, gzip, tar, telnet及ftp等等常用的执行文件。

随着现代 Linux 系统的进化,一些特定的命令可能会被移到 /usr/bin 等其他目录,而 /bin 目录中的内容更倾向于系统启动和恢复时所需的最小集合。在某些系统上,/bin 和 /usr/bin 可能会被合并,以简化文件结构。——ChatGPT o1-mini

/boot
这是放置Linux内核与启动相关文件的地方,这个目录底下的vmlinuz-xxx就是Linux的Kernel。如果引导加载程序选择grub的话,那么这个目录内还有/boot/grub这个子目录。

/dev
存放与设备有关的文件,Unix/Linux系统均把设备当成是文件来看待,例如/dev/fd0代表软盘,就像Windows系统下的A区,而/dev/cdrom则代表光盘。这个目录底下的文件通常分为两种,分别是管理磁盘 I/O的块文件和串行设备的字符文件

/etc
这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。我们要用到的网络配置文件,文件系统,x系统(X Window 系统)配置文件,设备配置信息,设置用户信息等都在这个目录下。
/etc/rc.d
这个目录主要存放开关机过程中用到的脚本文件。
/etc/rc.d/init.d
所有服务默认的启动脚本文件都是放在这里。
/etc/xinetd.d
超级守护程序管理的各项服务三维设置文件目录
这个路径在较新的Linux distribution当中才有。早期的版本用来启动服务的文件是inetd.conf,在较新的版本中,启动服务已经变成使用xinetd.conf文件。如果需要启动一些额外的服务的话,需要在/etc/xinetd.d这个目录下进行配置。
/etc/X11
与X Windows有关的配置文件所在的目录,如配置分辨率、刷新频率等。X Window 是一个图形用户界面系统,广泛应用于类 Unix 操作系统(如 Linux、BSD 等)中,用于提供图形界面(GUI)支持。

/home
这是系统默认的用户根目录(home directory),新增用户时默认会在/home下建立与用户名同名的子目录。如果建立一个用户,用户名是“jl”,那么在/home目录下就有一个对应的/home/jl路径,用来存放用户的主目录。

/lib
lib是库(library)英文缩写,系统使用的函数库的目录。程序在运行过程中,可能会调用一些额外的参数,这需要函数库的支持,这些函数库就存在此处。

/media
放置可删除设备,软盘、光盘、dvd等设备的挂载目录。通常软盘挂在/ media /floppy下,而光盘挂在/ media /cdrom下。

/mnt
这个目录在一般情况下也是空的。可以临时将别的文件系统挂在这个目录下。

/opt
第三方软件放置的目录
其他非安装套件提供的软件安装在/usr/local目录下

/root
系统管理员的根目录

/sbin
放置系统管理常用的程序,例如:fdisk, mke2fs,fsck, mkswap, mount等。与/bin不太一样的地方,这个目录下的程序通常是给root等系统管理员使用的程序。
服务器软件程序:/usr/sbin
本机自行安装的软件产生的系统执行文件:/usr/local/sbin

/srv
启动网络服务后,这些服务所需要取用的数据目录。例:www服务需要的网页文件存在/srv/www里面。

/tmp
存放临时文件的地方,所有的用户都可以使用。一般要定期清理,重要的数据也不要放到这个目录下面。

/proc
用于放置系统核心与执行程序所需的一些信息。这个目录将在启动的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为这个目录里面的数据都在内存中。

/lost+found
文件系统发生错误时,将一些丢失的片段放到这个目录下。

/sys
作用与/proc 类似。

/usr(unix system resource)课件上为unix software resource
非常重要的一个目录,存放应用程序与命令,类似于Windows的“Program Files”, 是linux系统中占用硬盘空间最大的目录。
放置系统默认的软件,即系统安装套件中提供的软件。
/usr/include
程序用到的头文件,通常在编译时需要。
/usr/lib
应用程序需要的函数库。
/usr/local
新安装的软件以及升级后的软件默认安装目录。
/usr/share/doc
放置一些系统说明文件的地方,例如如果安装了grub,那么其下必然有grub相关的目录,从中可以找到说明文档。
/usr/share/man
放置一些程序的说明文件的地方,就是使用man的时候,会去查询的路径。例如你使用man ls这个指令时,就会查出/usr/share/man/man1/ls.1.bz2(也可能是ls.1.gz)这个说明文件的内容。
/usr/src
放置一般源码。内核源码的默认目录则是/usr/src/kernels。
/usr/X11R6
放置X Window系统文件的目录,一般包括lib和bin两个子目录。

/var
用于存储各种快速增长或者变化的东西。
/var/log:放置所有服务的登录文件或者错误日志
/var/spool/mail 或/var/mail :用户未读邮件默认存放地点是
/var/lib:程序本身执行过程中,需要使用到的数据文件。
/var/lock:解决冲突
/var/spool:放置队列数据,“队列”是等待其他程序使用的数据。
/var/run:某些程序或者服务启动后,将她们的pid放置这个目录下
/var/cache:程序本身运行过程中产生的一些暂存文件

第四章Linux文件和目录管理

Linux目录的几个常见概念

路径
对文件位置信息的描述机制,是指从树型目录中的某个目录层次到其内某个文件的一条通路;分为相对路径和绝对路径;

工作目录
登入系统后,用户始终处于某个目录中,此目录即为工作目录,或称作当前目录

根目录
Linux树型目录结构的最顶层目录

用户“家”目录
也称用户主目录,通常是位于/home目录中跟用户名称相同的一个目录,用户登录系统后默认处于此目录中

文件路径

从一个目录到另一个目录或文件的通路,由各级目录的名称来标识
绝对路径:从根目录/开始到文件名结束的路径
例如:/usr/work/GJMill/temp/aa.o

相对路径:不是从根目录开始的路径,从当前的操作位置到要目标目录或文件的通路,小范围内转换目录的需要。
例如:cd ../log

几个特殊符号

.代表当前路径
..代表上层目录
~代表user的根目录
~user代表user的根目录

系统登录时候,用户会自动跳转到其home目录,root用户的home是/root,其他用户user的默认home目录是/home/user
cd ~ :进入用户主目录
cd :进入当前用户主目录
cd – :返回进入此目录之前所在的目录

环境变量PATH

环境变量PATH的作用是提供给用户查找文件的可能路径
查看PATH:
echo $PATH

用相对或绝对路径来执行
[root@localhost ~]#路径/comand
增加PATH搜索目录(即将可执行文件的路径写入环境变量)
[root@localhost ~]#PATH=“$PATH”:目录

系统会自动搜寻该文件,哪个目录中的ls文件先被找到,就调用哪个

文件目录操作命令

目录操作命令
ls pwd cd mkdir rmdir
文本文件查看命令
cat more less head tail
文件操作命令
file touch cp rm mv
文件内容统计命令
wc
文件链接命令
ln

命令功能
ls显示指定目录和文件的信息
pwd显示当前目录名称
cd进入指定的目录
mkdir创建指定名称的目录
rmdir删除指定名称的目录
命令功能
cat显示文本文件内容
tac从最后一行开始显示,tac和cat字母顺序相反
nl显示的时候,输出行号
more分页显示文本文件内容
less分页显示文本文件内容,并可方便反复浏览
head显示文件首部内容
tail显示文件尾部内容
命令功能
file显示指定文件的类型
touch建立指定名称的文件或更新文件时间
cp复制文件或目录
rm删除文件或目录
mv移动文件或目录,文件或目录重命名

ls命令

ls 命令将每个由其后的参数指定的目录内课件文件或子目录的名称列出;如果不指定Directory参数,ls命令显示当前目录的内容
一般情况下,ls命令按照文件名字母顺序显示所有信息
当ls命令显示目录内容时,它不显示名称以 .(点)开头的文件项,除非使用了-a 或者 -A 标志

[root@localhost ~]#ls [-aAdfFhilRS] 目录名
[root@localhost ~]#ls [–color={none,auto,always}] 目录名
[root@localhost ~]#ls [–full-time] 目录名

-A 列出所有条目,除了 .(点)和 ..(点-点)
-a 列出目录中所有项,包括以 .(点)开始的项
-l(L 的小写)显示方式、链接数目、所有者、组、大小(按字节)和每个文件最近一次修改时间

  • d 此项为目录
  • b 此项为块特殊文件
  • c 此项为字符特殊文件
  • l 此项为符号链接
  • p 此项为一个先进先出(FIFO)特殊文件
  • s 此项为本地套接字此项为普通文件

-r反转排序顺序,适当的按字母逆向排序或者首先排序最旧的文件
-R递归列出所有子目录
-d仅列出目录本身,而不列出目录内的文件数据
-h 显示文件大小(与-l联合使用)
–color=never 不要按照文件属性用不同的颜色
–color=always 显示颜色
–color=auto 让系统自行设置是否显示颜色
–full-time 以完整的时间模式输出
–time={atime,ctime} 输出访问时间或者是改变权限的时间,而非是修改时间

pwd命令

显示工作目录的路径名称 (print working directory)
[root@localhost ~]# pwd [-P]
pwd 命令将当前目录的全路径名称(从根目录)写入标准输出;全部目录使用 /(斜线)分隔;第一个 / 表示根目录,最后一个目录是当前目录
[-P]显示出实际路径,而非使用连接的路径

cd命令

[root@localhost ~]#cd [相对路径或绝对路径]
更改当前目录 (change directory),用户必须具有指定目录中的执行(搜索)许可权
如果未指定目录参数,cd 命令会将当前工作目录设置为登录目录
如果指定的目录名是完整的路径名,它就成为当前工作目录

cd ~user表示去user的家目录
.(点)表示当前目录, ..(点点)表示父目录
cd ~ 返回当前用户主目录(等同于cd)
cd – 返回用户上次所在的目录

mkdir命令

创建一个或多个新的目录
[root@localhost ~]#mkdir [-mp] 目录名
每个新目录包含标准项 .(点)和 ..(点-点)
-p 可以直接创建多层目录
-m 设置新创建的目录的权限,不管默认权限

rmdir命令

删除目录
[root@localhost ~]#rmdir [-p] 目录名
在可以除去该目录前,它必须为空,并且必须有它的父目录的写权限
-p 连上层的“空”目录也一起删除

cat 命令(concatenate)

[root@localhost ~]#cat [-AEnTv] file
功能1:将指定文件从首行开始连续显示在屏幕,当文件过大时不适用
-n 或 –number 由 1 开始对所有输出的行数编号
-v 将非打印字符显示为可视字符,除了跳格符、换行符和换页符;
-E 在每行末尾显示一个 $(美元符号)
-T则将跳格字符显示为 ^I,与-v联合使用;- t= -vT
-A 等同于-vET

功能2:连接两个或多个文件,该命令功能之二是用来将两个或多个文件连接起来。
cat  filename1  >  filename2 :将filename1中的内容复制到自动新建的filename2中
cat file1 file2 > file3:这样就把文件filel和文件file2的内容合并起来,放入文件file3中。

tac命令

tac file
从最后一行开始显示,tac和cat字母顺序相反

nl命令

[root@localhost ~]#nl [-bnw] 文件
-b:制定行号的指定方式

-b a:表示不论是否为空行,同样列出行号
-b t:如果有空行,空行不要列出行号

-n:列出行号的表示方法

-n ln:行号在字段的最左方显示
-n rn:行号在字段的最右方显示,不加0
-n rz:行号在字段的最右方显示,加0

-w:行号字段占用的位数

more 命令

[root@localhost ~]#more 文件名
more 命令读文件,而且每次一屏显示文本;此命令在每屏后暂停,并在屏幕底部打印单词 More;
回车键: more 命令会再显示一行;
空格键: more 命令显示文本的另一屏。
b/ctrl+b:往回翻页
f:立刻显示文件名以及目前的行数
+行号:从指定行号开始显示文件内容。
+/<搜索字符串>:打开文件后,直接跳转到第一次匹配的字符串位置。
q :结束查看

less命令

[root@localhost ~]#less 文件名
less 命令的功能几乎和 more 命令一样,也是用来按页显示文件,不同之处在于 less 命令在显示文件时允许用户既可以向前又可以向后翻阅文件
pageup
pagedown
/ 向下搜索
? 向上搜索
q离开less程序

more的确支持按 b 键返回上一屏。不过,这种功能有一定的局限性,具体表现为:

缓冲限制:
在许多情况下,more只会加载当前需要显示的部分内容,而不是一次性将整个文件加载到内存中。因此,如果文件过大且没有预加载之前的内容,b键可能无法返回到更早的部分。

less的优势:
less 会在大多数环境下将文件缓存在内存或临时存储中,因此能够随时自由地上下滚动,不依赖是否预加载内容。这使得less更加灵活,也更适合处理超大文件。

总结:
虽然more可以通过b键返回上一屏,但这种能力受限于缓存的实现方式,远不如less那样全面和可靠。如果文件内容较大且需要频繁向前向后切换,less是更优的选择。

head命令

显示一个文件或多个文件的前几行或前几个字节
格式:head [–n num] file…
如果不为 head 命令指定任何标志, 缺省显示前 10 行
输入文件必须是文本文件
-n :
正数-代表要显示的行数
负数-不显示末尾这些行
示例:
head 100b file

tail命令

显示文件内容的最后几行(显示从指定位置开始的文件内容);
tail [-n num] 文件
常用选项
+num 显示从第num行开始至文件尾的内容
-num 显示从距文件尾num行开始至文件尾的内容
-f 如果文件内容正在增长中,此选项则动态显示增长的内容,直到用户使用“Ctrl+C”结束(tail -f /var/log/messages)
示例
tail 5 file

显示文本
$ cat /etc/passwd
分页显示文本
$ more /etc/passwd
分页文本浏览
$ less /etc/passwd
显示文件首
$ head -5 /etc/passwd
显示文件尾
$ tail -5 /etc/passwd

file 命令

确定文件类型
文件的基本数据,ASCLL,date文件,或者是binary文件,及其中有没有使用到动态函数库等等信息。
格式:file 文件名

touch 命令

创建新文件,更新文件的访问和修改时间
modification time (mtime,修改时间)
status time (ctime,状态时间)
access time (atime,访问时间)

格式:touch [-opt] {File|Directory}
常用选项
-a 更改由 File 变量指定的文件的访问时间
-c如果文件不存在,则不要进行创建
-m更改 File 的修改时间
-t Time使用指定时间而不是当前时间。Time 变量以十进制形式 [YYMMDDhhmm]指定

YY 指定年份的后两位数字
MM 指定一年的哪一月(从 01 到 12)
DD 指定一月的哪一天(从 01 到 31)
hh 指定一天中的哪一小时(从 00 到 23)
mm指定一小时的哪一分钟(从 00 到 59)

rm命令

删除(链接)文件或目录,如果要删除的文件是符号链接,则除去链接,但是符号链路引用的文件或目录仍在
格式:rm [opt] file/dir
常用选项
-f 在删除有写保护的文件前不提示
-i 删除每个文件前提示
-r 当目标参数为目录时递归删除目录及其内容
-R 同-r

mv命令

移动(并重命名)文件或目录,mv 命令可以覆盖现有文件
格式:mv [opt] source destination
-f:强制直接转移不询问
-i:若目标文件已经存在询问是否覆盖
-u:若源文件已经存在,但源文件比较新,则更新

cp命令

复制文件或目录
格式:cp [-opt][src_file|src_dir][dst_file|dst_dir]
常用选项
-a 复制目录时使用,保留链接、文件属性、并递归地复制目录
-d 复制时保留链接
-f 如果指定的目标文件存在,先强行覆盖
-i 覆盖目标文件前需要用户先确认
-p 复制文件,包括其修改时间和访问权限
-r 复制目录时可递归复制目录中的内容
-R 如同-r,但特殊文件将被重新创建,而非复制

文件查找命令

which命令

查看可执行文件的路径:which
语法:
which [-a] 命令
通过PATH进行搜索
常用选项:
-a 将所有可找到的命令列出,不仅仅列出第一个找到的命令
举例:
which pwd
which lsattr

whereis命令

查找“特定文件”
whereis指令会在特定目录中查找符合条件的文件;
格式:whereis [选项] 文件列表
常用选项:
-b 只查找二进制文件
-m 只查找说明文件
-s 只找源文件
-u 没有帮助文件的文件

搜索的实质

which:通过PATH进行搜索
whereis,locate:通过存储系统文件信息的数据库
Find:直接搜索硬盘

locate命令

格式: locate 文件
用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎条件的文件或目录
需要先建立数据库,而后方可进行查找
由于系统文件会发生变化,因此此数据库需要定期更新方能在查找时找到符合指定条件的文件,也可以在查找前手动更新
直接修改/etc/updatedb.conf
updatedb命令用来生成最新的文件名数据库,它会在目录/var/lib/mlocate/下生成 mlocate.db 数据库
它的查找速度比find快,但更新数据库的过程本身会很耗费时间

find命令

功能:在目录结构中搜索文件,并执行指定的操作
语法:find 起始目录 查找条件 [操作]
起始目录:find命令所查找的目录路径;例如可用.来表示当前目录,用/来表示系统根目录
查找条件:匹配机制,如可以按照文件名、文件权限、修改时间等进行文件查找
操作:按指定条件查找后进行的特定处理方法,如将查找到的文件在屏幕上显示出来,或对其进行权限修改,或将查找到的文件删除等等

find查找条件的组合方法

可以为find命令同时指定多个查找条件进行查找
指定多个条件的查找条件可以是一个用逻辑运算符not、and或or组成的复合条件:

and 逻辑与,在命令中用“-a” 表示,是默认选项,可以省略
or 逻辑或,在命令中用“-o” 表示
not 逻辑非,在命令中用“!”表示

-name ‘字串’ 按照文件名查找文件
-lname ‘字串’ 查找文件名匹配所给字串的所有符号链接文件
-gid n 查找属于ID号为n的用户组的所有文件
-uid n 查找属于ID号为n的用户的所有文件
-group ’字串’ 查找属于用户组名为所给字串的所有的文件
-user ’字串’ 查找属于用户名为所给字串的所有的文件
-empty 查找大小为0的目录或文件
-path ’字串’ 查找路径名匹配所给字串的所有文件
-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如755,644
-nogroup 查找无有效所属组的文件,即文件所属组在/etc/groups中不存在
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-type 查找某一类型的文件
-size n [bck] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 在查找文件时,首先查当前目录中的文件,然后再在其子目录中查找
以时间为条件查找
-amin +n -n 按访问时间查找; -n指n分钟以内,+n指n分钟以前
-atime +n -n 按访问时间查找;-n指n天以内,+n指n天以前   
-cmin +n -n 按创建时间查找
-ctime +n -n 按创建时间查找
-mmin +n -n 按修改时间查找
-mtime +n -n 按修改时间查找
-newer file 列出比file还新的文件
可执行操作
-exec 命令 {} \; 对符合条件的文件执行所给的命令
{}表示命令的参数即为所找到的文件
命令的末尾必须以“\ ;”结束
-ok 命令 {} \; 同-exec,但会询问用户是否执行该命令

例题

在/etc目录下查找所有以rc开头的文件名

#find /etc -name “rc*” -print 

查找系统中所有文件长度为0的普通文件,并列出它们的完整路径

#find / -type f -size 0 -exec ls -l {} \; 

在/etc下的所有以passwd开头的文件中查找是否有名为redhat的用户

#find /etc –name “passwd*” –exec grep “redhat” {} \;

查找当前目录下所有以txt结尾且2分钟内没有被访问过的文件

#find . -name “*.txt” -amin +2 -print

文件与目录的默认权限与隐藏权限

umask命令

用来设置新建文件权限的掩码
格式:umask [模式]
说明:
模式为新建文件权限的掩码值
Linux系统中目录的默认权限是drwxrwxrwx,文件的默认权限是-rw-rw-rw-。因此,有以下公式:
新目录的权限= drwxrwxrwx -默认权限掩码
新文件的权限= -rw-rw-rw- -默认权限掩码
注意:基于安全原因,Linux系统不允许文件的默认权限有执行权
不带任何参数的umask命令显示当前的默认权限掩码值

chattr命令

设置文件的隐藏属性
chattr [+-=] [ASacdistu] 文件或目录
a:只能增加数据,不能删除,只有root才能设置
i:可以让文件“不能被删除、改名、设置连接,也无法写入或新增数据”

lsattr命令

显示文件夹的隐藏属性
格式:lsattr [-aR] 文件或目录
-a:显示隐藏文件的属性
-R:连同子目录的数据一并列出

第五章文件压缩与打包

压缩实质:使用特定的压缩算法将占用较大空间的文件压制成占用空间较小的文件

压缩文件

压缩文件后缀名通常为
.tar.gz:tar程序打包文件,并且经过gzip的压缩
.tar: tar程序打包数据,并没有压缩过
.gz :gzip程序压缩的文件
.Z:compress程序压缩的文件
.bz2:bzip2程序压缩的文件
.tar.bz2:bzip2压缩过的tar文件
根据后缀名称知道压缩指令,从而知道解压缩指令

压缩指令compress

compress [-dfr] filename
-d:解压缩参数
-f:强制压缩文件
-r:针对目录,将目录下的文件同时压缩

uncompress filename
解压文件
该指令是最初与最简单的压缩指令,经其压缩过的文件的后缀名为.Z,对小文件不压缩

当使用该指令压缩文件时,生成的压缩文件会覆盖原文件,目前使用较少,多见于UNIX中
eg:compress -f godisagirl
将文件godisagirl压缩为godisagirl.Z,同时原文件被压缩文件取代
uncompress godisagirl.Z
compress –d godisagirl.Z
将godisagirl.Z文件解压为godisagirl

压缩指令gzip

gzip指令同样是压缩解压指令,压缩后的后缀名为.gz,是当前网络上十分流行的压缩包形式
gzip [-crd#] filename
-d:解压缩参数
-c:将压缩过程显示到屏幕上,通过导向数据来处理
-#:压缩等级,1最差,9最优,6默认

gunzip:解压缩.gz格式的压缩文件
事实上,gunzip和gzip是同一个命令,gunzip只不过是一个指向gzip的硬链接而已(gzip -d等同于gunzip)

zcat filename.gz
zcat的功能也是在不解压的前提下读取其内容,不同点在于zcat针对.gz格式的压缩文件。 eg:zcat swhwork.gz

压缩指令bzip2

bzip2 [-dzc] filename
-d:解压缩
-z:强制压缩文件
-c:将压缩结果显示到屏幕去
-#:#代表1到9,即压缩级别,1压缩较小,9压缩较多
该指令的后缀为.bz2
bzcat filename.bz2
在不解压的前提下读取压缩文件的内容
eg:bzcat chocolate.bz2
不经解压读取压缩文件的内容

压缩指令tar

tar指令是目前功能最为强大的压缩指令,是用来将文件存储到归档文件或从归档文件中获取原文件的指令
tar [-zjxvctpPNf] target source
-z:打包并用gzip压缩
-j:打包并bzip2压缩
-x:解压文件
-c:打包文件
-v:压缩时显示被文件
-f:后接压缩包名,通常放在所有选项的最后
-t:查看.tar包中的文件列表
-p:打包时不改变文件属性
-P:按照source中指定的路径方式打包文件
-N:把较新的文件打包进新建的文件夹内(yyyy/mm/dd)
–exclude FILE:在打包过程中,不打包file

dd指令

dd 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换
dd if=<输入文件> of=<输出文件> [选项]
选项
if:输入文件,也可以是设备
of:输出文件,也可以是设备
bs:规划一个块的大小,默认512字节
count:多少个bs

例题

将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
将备份image文件恢复到指定盘
dd if=/root/image of=/dev/hdb
备份与恢复MBR,备份磁盘开始的512个字节大小的MBR信息到指定文件
dd if=/dev/hda of=/root/image count=1 bs=512
将MBR备份恢复
dd if=/root/image of=/dev/had
销毁磁盘数据,利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据
dd if=/dev/urandom of=/dev/hda1
测试硬盘的读写速度,通过以下两个命令输出的命令执行时间,可以计算出硬盘的读、写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

/dev/null,它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃,可向它输出任何数据

/dev/zero,是一个输入设备,你可你用它来初始化文件,该设备无穷尽地提供0。
dd if=/dev/zero of=zero_file.txt bs=1M count=10
if=/dev/zero:输入文件为 /dev/zero,它提供零字节数据。
of=zero_file.txt:输出到 zero_file.txt 文件中。
bs=1M:设置块大小为 1MB。
count=10:复制 10 个块(10MB 的零值数据)。

第六章Vi文字处理器

文本编辑器概述

文本编辑器的作用
Linux系统中的配置文件以文本文件的形式保存
Linux管理员需要通过编辑配置文件进行系统管理
文本编辑器的分类
行编辑器与全屏幕编辑器
字符界面编辑器与图形界面编辑器

Visual Editor(vi)

普通模式(Normal Mode):这是 vi 启动时默认的模式。在此模式下,您可以执行文本导航、删除、复制、粘贴、查找、替换等操作,而不是直接编辑文本内容。

插入模式(Insert Mode):在插入模式下,您可以直接编辑文本。进入插入模式的方式是按 i(光标前插入),I(行首插入),a(光标后插入)等。

命令模式(Command Mode):在普通模式下,按下冒号 : 进入命令模式。此时可以执行保存、退出、搜索等操作。例如,:w 保存文件,:q 退出,:wq 保存并退出。

基本操作
进入插入模式:
按 i 进入插入模式。
按 a 在光标之后插入。
按 o 在当前行下方插入新行。
r/R:替换,区别在于r仅替换一个字符,R一直替换到按下Esc才停止

保存和退出:
:w 保存文件。
:q 退出编辑器。
:wq 保存并退出。
:q! 强制退出,不保存修改。

文本编辑:
在普通模式下,按 x 删除光标所在位置的字符。
按 dd 删除光标所在行。
ndd:删除从当前行向下的n行。
x/X:向后/前删除一个字符。
按 yy 复制光标所在行。
nyy:复制从当前行向下的n行。
p/P:将复制来的数据粘贴在光标的下/上一行。

搜索和替换:
/关键字 查找文本。
n 跳转到下一个匹配项。
:s/旧文本/新文本/ 替换当前行的第一个匹配项。
:s/旧文本/新文本/g 替换当前行的所有匹配项。
:%s/旧文本/新文本/g 替换全文中的所有匹配项。
例如:
/word: 在当前光标后查找含word的字符串
?word:从光标开始向前查找含word的字符串
:n1,n2s/word1/word2/g:将n1行到n2行之间的word1替换为word2
:1,$s/word1/word2/g:将全文中的word1替换为word2
:1,$s/word1/word2/gc:与上个命令相同,但需要用户确认替换

高级操作
撤销与重做:
按 u 撤销操作。
按 Ctrl + r 重做操作。
行操作:
dd 删除当前行。
D 删除光标所在位置到行尾的内容。
cc 删除当前行并进入插入模式。
跳转:
gg 跳到文件开头。
G 跳到文件末尾。
nG:移动到文件的第n行
:n 跳转到第 n 行。
0:移动到行首
$:移动到行尾

命令行模式下的常用命令
:w:将修改写入文件
:q:退出vi
:wq:保存后退出
:wq!:强制保存后退出
:set nu:显示行号
:set nonu:取消行号

Vi IMproved(vim)

Vim(Vi IMproved)是vi的升级版本
在文字模式下的#后输入alias,如果出现alias vi=‘vim’的字样,说明vi已经升级到vim了
Vim提供光标坐标值提示、颜色显示、对程序语法的支持等功能
Vim可以实现正规表示法的支持、多文件多窗口编辑等

v:字符选择,将光标经过的地方反白选择
V:行选择,将光标经过的行反白选择
[ctrl]+v:块选择,可以用长方形的方式选择数据
y:复制反白区域
d:删除反白区域

多文件编辑:通常用于将一个文件的部分内容复制到另一个文件去时或需要多文件内容相互对照的情况下

vi 文件名1 文件名2 ……
:n表示查看或编辑下一个文件
:N表示查看或编辑上一个文件
:files显示当前打开的所有文件的编号

多窗口变换:vi在字符界面下的一种特殊应用形式,表现为在一个终端上同时显示两个文件或同时显示一个文件的不同段落,为用户查看资料、编写程序提供了便利
:sp [filename]
ctrl+w, j/k表示下/上移一个窗口
ctrl+w, q表示退出

例题

eg1:按照要求完成下列操作(多文件编辑)
1)使用vim同时新建并编辑两个文件
2)在两个文件中分别输入并保存文本内容
3)显示当前打开的所有文件编号
4)退出vim 编辑界面

1)vim t1 t2
2)在当前界面中输入“how are you”,按Esc键后使用“:w”保存文本内容,接着输入“:n”切换到文件t2的编辑界面,输入“fine,thank you!”,按Esc键后使用“:w”保存文本内容
3)在vim 的指令行输入“:files”查看文件编号
4)按Esc键后使用“:q” 退出vim编辑界面

eg2:按照要求完成下列操作(多窗口编辑)
1)使用vim打开刚才创建的两个文件
2)将上面窗口第一行的文本内容复制到下面窗口的第二行,并保存该修改
3)显示当前打开的所有文件编号
4)撤消刚才的复制操作
5)先退出下面的窗口,再退出上面的窗口

eg2答案:
1)使用vim t1打开文件t1,接着在vim的指令行输入“:sp t2”打开一个新窗口
2)在当前界面中输入“yy”,接着使用ctrl+w j切换到文件lover的编辑界面,输入“p”,按Esc键后使用“:w”保存文本内容
3)在vim 的指令行输入“:files”查看文件编号
4)在vim的一般模式下输入“u”,接着使用“:w”保存修改
5)使用ctrl+w j/k将光标移动到下面窗口中,接着使用ctrl+w q退出,然后再次使用ctrl+w q退出剩下的窗口

第七章Linux系统日常管理

RPM软件包管理

目前在众多Linux系统上多采用RPM软件包,它是一种开放的软件包管理系统,这种软件包格式在安装、升级以及卸载上非常方便,不需要进行编译。
对于终端用户来说,RPM简化了系统安装卸装更新升级的过程,只需要使用简短的命令就可完成。RPM维护一个已安装软件包和它们的文件的数据库
对于开发者来说,RPM允许把软件编码包装成源码包和程序包,然后提供给终端用户,这个过程非常简单,这种对用户的纯净源码、补丁和建构指令的清晰描述减轻了发行软件新版本所带来的维护负担。

可升级性: 使用 RPM,可以不必全盘重装就可以在系统上升级个别组件。当得到一个基于 RPM 的操作系统的新发行版本,不必重新安装系统。
强大的查询功能:RPM 被设计来提供强大的查询功能。可以在整个数据库中搜索软件包或某些特定文件。还可以轻易地了解到哪个文件属于哪个软件包,软件包来自哪里。
系统校验:RPM另一项强大的功能是软件包校验。
纯净源码:RPM的一个重要的设计目标是允许使用与软件的原创者所发行源码一致的“纯净”软件源码。使用 RPM,会有纯净源码、使用过的补丁、以及完整的建构指令。

用rpm制作(或解包的对象)的包文件一般以“.rpm”作为后缀。RPM包的名称有其特有的格式,如典型的 RPM 包名称类似于:

bash-5.1.8-2.el8.x86_64.rpm

bash:软件包名称
5.1.8:版本号
2.el8:发布号,表示这是针对 Enterprise Linux 8 的第二次发布
x86_64:适用的硬件架构
.rpm:文件扩展名

rpm的用法一般是:
rpm <可选项> <包文件名称>

RPM 有五种基本操作模式(不包括软件包建构):
安装: rpm –i RPM包的全路径文件名
v:代表verbose,设置在安装过程中将显示详细的信息。
h:代表hash,设置在安装过程中将显示“# ”来表示安装的进度。
例如:rpm -ivh dhcp-3.0pl1-23.i386.rpm

卸载: rpm -e RPM包名称
若要强行卸载,可用:rpm -e –nodeps <包文件名>

升级: rpm -u RPM包名称
命令格式 :rpm -Uvh RPM包的全路径文件名
例如:升级软件包dhcp-3.0pl1-23.i386.rpm:
rpm -Uvh dhcp-3.0pl1-23.i386.rpm
由新版本降级为旧版本,要加 –oldpackage 参数

刷新: rpm -f RPM包名称

查询: rpm -q RPM包名称
使用 rpm -q 命令来查询安装的软件包的数据库,配合-q可选项一起使用的其他可选项包括:
-a : 查询所有已安装的软件包。
-f <file>: 会查询拥有<file>的软件包。当指定文件时,必须指定文件的完整路径(如 /bin/ls)。
-p <packagefile>: 查询软件包<packagefile>。

想了解完整的选项和细节,请使用 rpm –help 命令。

例题

例1:基本查询。
rpm -q samba
例2:在系统中查询和samba有关的已安装程序:
rpm -qa | grep samba
例3:查询samba软件的概述信息:
rpm -qi samba
例4:查看dhcp软件在系统中文件的安装位置:
rpm -ql dhcp
例5:查看文件/bin/ls属于那个软件包:
rpm -qf /bin/ls
例6:查看samba软件的配置文件:
rpm -qc samba
例7:查看dhcp软件所依赖的软件包和文件:
rpm -qR dhcp

备份

备份是计算机日常重要操作之一。放在硬盘上的文件,很容易会因硬件损坏、软件改装、误操作等各种原因而遭受破坏。
通常对于重要的数据,都要定期将它从硬盘上复制到其他存储介质(例如:软盘、磁带、MO等)上,然后设法妥善保管这些备份介质,从而达到保护(原始)数据的目的,一旦硬盘上数据遭受损害,我们可以从备份介质上把原先的数据还原。
最简单的备份方法是用cp命令进行复制。
另外Linux操作系统也提供了一些其他的备份方法,并且提供了多种对文件进行压缩的方法。

进程管理

Linux是一个多任务的操作系统,用户可以执行多个程序,每个程序又会有多个进程,某些进程可能占用大量的系统资源,某些进程又可能是非法或危险的,这就造成系统负载过重。作为管理员,必须要了解如何查看系统进程并进行相应处理,以维持系统的整体性能。
内核的内部数据结构记录了有关每个进程的各种信息,其中一些非常重要的信息有:
(1)进程的地址空间映射。
(2)进程的状态。如睡眠状态、停止状态、可运行状态等。
(3)进程执行的优先级。
(4)进程已经使用的资源信息。
(5)进程的信号掩码。
(6)进程的属主。

进程的分类

Linux系统有好几种进程,每一种都有其各自的品质和特性,Linux系统有以下3种进程。 (1)交互式进程:一个由shell启动并控制的进程,交互式进程既可在前台运行,也可在后台运行。 (2)批处理进程:与终端无关,安排在指定时刻完成的一系列进程。 (3)守护进程:在引导系统时起动,以执行即时的操作系统任务,如lpd,inetd及named等。

ps命令

ps 命令的全称是 Process Status
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令是最基本同时也是非常强大的进程查看命令。
使用该命令可以确定有哪些进程正在运行以及进程运行的状态、进程是否结束,进程有没有僵死,哪些进程占用了过多的资源等。

语法:ps [参数]
功能:使用 ps 命令查看系统的进程情况。该命令可以确定有哪些进程正在运行以及运行状态等。
参数:
-a 显示所有进程,包括其他用户的进程
-u 显示基于用户的信息
-x 显示所有进程,不以终端来区分
-t tty 显示属于指定终端tty的进程
-U user 显示user用户所拥有的进程

例1:查看当前进程状况。
ps
例2:查看进程的详细情况。
ps -u
例3:查看每位用户的全部进程。
ps -aux

字段名称含义用途
PID进程 ID唯一标识系统中的一个进程
PPID父进程 ID标识该进程的父进程
UID用户 ID运行进程的用户的数字标识
USER用户名运行进程的用户名
TTY终端设备进程关联的终端,? 表示无终端
CMD启动命令进程启动时的完整命令
TIMECPU 时间进程运行消耗的 CPU 时间总和
STAT进程状态进程状态,如 R(运行)、S(休眠)、Z(僵尸)等
VSZ虚拟内存大小(KB)进程使用的虚拟内存空间大小
RSS常驻内存大小(KB)进程实际占用的物理内存大小
%CPUCPU 使用百分比进程使用 CPU 资源的比例
%MEM内存使用百分比进程使用系统物理内存的比例
START启动时间进程启动的时间或日期
NINice 值(优先级)显示进程的优先级,值越小优先级越高
PRI调度优先级内核调度进程时使用的优先级值
WCHAN等待的内核函数进程当前等待的内核函数名称

PID:进程的ID号

内核给每个进程分配一个独一无二的ID号。控制进程的大多数命令和系统调用需要用户指定PID来标识操作的目标。
PID按照创建进程的顺序来分配,当内核用光了PID时,它就从1开始,并且跳过任何仍然在使用的PID。

PPID:父PID

Linux没有提供创建新进程去运行某个特定程序的系统调用。相反,现有进程必须克隆自身去创建一个新进程。克隆进程能够把正在运行的那个程序替换成另外的一个程序。
当一个进程被克隆时,原来的进程就叫做父进程,而副本则叫做子进程。进程的PPID属性就是克隆它的父进程的PID。
可以通过 ps –l 查看父进程。

系统监控命令 – top 命令

语法:top [参数]
功能:使用top命令动态监控系统性能。top命令可以监控系统的内存、交换分区和CPU的使用率等,它会定期更新显示内容。
参数:

-c:显示每个程序的完整指令。
-q:持续监控程序执行的状况。
-d<间隔秒数>:设置top执行状况的间隔时间,单位以秒计算。
-n<执行次数>:设置监控信息的更新次数。

在执行 top 的过程中,可以输入下面的字符进行排序。
A:以执行的先后顺序进行排序
T:由启动的时间进行排序
M:以所占的内存大小排序
P:以所耗用的 CPU 资源排序

进程启动

在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。
启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求进行自行启动。

手工启动

用户输入命令直接启动一个进程便是手工启动。
(1)前台启动
当用户键入一个命令“ls -l”,就已经启动了一个进程,而且是一个前台的进程。
(2)后台启动
在命令结尾加上一个&号
#troff –me notes > note_form &
两种方式的共同特点是新进程都由当前shell进程产生

调度启动

(1)at命令
at命令用于在指定时刻执行指定的命令序列。at命令有两种使用方式:
方法一:在命令提示符下输入“at <时间>”,然后按回车键,输入执行的任务。
方法二:将一批命令写入shell脚本,然后按照以下格式设置在指定时间执行shell脚本中的命令:
at 时间 –f 脚本文件
其中 –f 参数指定脚本文件名。

例1:指定在今天下午5:30执行某命令。假设现在时间是中午12:30,2008年3月25日,其命令格式可以采取如下几种形式:
at 17:30
at now + 5 hours
at 17:30 25.3.08
例2:设定在当天12:30将 /root/abc文件以电子邮件方式向用户h1、h2发送。at 12:30
at> cat /root/abc | mail –s “file abc” h1 h2
如果还有其他命令,可以按回车继续输入,最后以 结束。
用at –l 查看当前系统内准备定时执行作业的情况。
例3:在三天后下午4点执行文件work中的作业
#at -f work 4pm + 3 days

(2)atrm命令
该命令用于删除指定要执行的命令序列:
语法:atrm 作业号[作业号……]
命令 at –r 作业号[作业号……]也可以实现此功能。

(3)atq命令
该命令用于查看安排的作业序列。
命令 at –l 也可以实现此功能。

(4)batch命令
batch命令用于在系统负载较低,资源比较空闲的时候执行任务,而不为其指定一个具体的时间。其用法与at类似,不用加时间参数。

进程的挂起、恢复和终止

1.进程挂起及恢复
在键盘上按,即可挂起当前的前台作业。
要恢复进程执行时,有两种选择:
(1)用 bg 命令将挂起的作业放到后台执行
(2)用 fg 命令将挂起的作业放回到前台执行

2.进程终止
使用中断前台进程;
使用kill命令中断后台进程。
无条件kill命令: kill -9
结束所有的后台进程:kill 0
例如,要终止系统中的named进程
先使用ps命令查看进程,得到named进程对应的PID(3576),使用kill命令来终止此进程:
ps -aux | grep named
kill 3576

进程的优先级

优先级往往用一个数(可以是负数)来表示,数越小,优先级就越高。具有较高优先级的进程可以获得较多的CPU时间。
默认优先级为0。如果优先级是一个负数,一般表示该进程具有最高的优先级。+20为最低优先级。
使用命令 ps –efl 或者 top 可以查看进程的优先级。NI对应的项即为进程的优先级。

指定进程优先级 – nice 命令

语法:nice -n <优先级> <命令>
例如:nice –n 12 top
只有root用户才可以增加进程的优先级。

改变进程优先级 – renice 命令

语法:renice <优先级> <命令>
root 用户可以把 renice 用于任何进程。
而其他用户只能 renice 自己拥有的进程,而且优先级只能在0到20之间变动。
例:# renice +10 -u zhangsan
此命令把zhangsan用户的所有进程的优先级全部调为10,包括新创建的和已经在运行的zhangsan用户的所有进程。

查看内存的使用情况 – free 命令

语法:free [参数]
功能:可以使用free命令显示系统的物理内存和交换分区的总量,以及已使用的、空闲的、共享的、在内核缓冲内的和被缓存的内存数量。
参数:
-k:以Kbytes显示内存。
-m:以Mbytes显示内存。

显示磁盘的相关信息 – df 命令

功能说明:显示磁盘的相关信息。
语法:df [-ahHiklmPT][–block-size=<区块大小>][-t <文件系统类型>][-x <文件系统类型>][–help][–no-sync][–sync][–version][文件或设备]
参数:
-a  包含全部的文件系统。
-h 以可读性较高的方式来显示信息。
-t <文件系统类型>  仅显示指定文件系统类型的磁盘信息。
-T 显示文件系统的类型。

显示目录或文件的大小 – du 命令

语法:du [选项] [Names…]
功能:du命令(你可以在子目录/usr/bin中找到它)能够方便地汇总出磁盘的使用情况,它可以报告出每个子目录或者某个指定路径的空间占用量。
该命令的各个选项含义如下:
-s:对每个Names参数只给出占用的数据块总数。
-a:递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
-b:以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。

例题

【例10.54】 分屏显示每个目录或文件的大小。
    # du | more
【例10.55】 显示文件/root/abc的大小。
    # du /root/abc
【例10.56】 显示目录/root 的大小。
    # du –s /root
【例10.57】 以MB为单位显示目录/root的大小。
    # du –sh /root

第8章Linux下的编程

全是题目

1.不能直接进行格式化对硬盘分区是( )
A.逻辑分区 B.主分区 C.扩展分区 D.硬盘分区

答案是:C.扩展分区
原因:扩展分区是一个容器,用来容纳逻辑分区,它本身不能直接被格式化。只有逻辑分区和主分区可以被格式化,用于存储数据。硬盘分区(D选项)并不是具体的分区类型,因此不正确。

2.在Linux中的/etc/passwd⽂件中存放的是( )
A.⽤户密码 B.⽤户账号信息 C.⽂件系统信息 D.⽤户组信息

答案是:B.用户账号信息
原因:在 Linux 系统中,/etc/passwd 文件主要用于存储用户的账号信息。具体内容包括用户名、用户ID(UID)、组ID(GID)、用户的全名或描述信息、用户的主目录路径以及用户的默认 shell 等。虽然历史上 passwd 文件中也存储了加密后的用户密码,但现代 Linux 系统通常将密码信息存储在更加安全的 /etc/shadow 文件中,以提高系统的安全性。

3.代表⽂件内容修改时间的是
A.ctime B.ntime C.atime D.mtime

答案是:D. mtime
原因:在 Linux 文件系统中,每个文件都有三个主要的时间戳:
atime(Access Time):表示文件最后被访问的时间。
mtime(Modification Time):表示文件内容最后被修改的时间。
ctime(Change Time):表示文件状态(如权限、所有者等)最后被更改的时间。

4.【判断】⽂件的写权限w表示可以编辑修改⽂件内容,以及删除该⽂件的权限。

答案是:错误
原因:在 Linux 系统中,文件的写权限(w)确实允许用户编辑或修改文件的内容。然而,删除文件的权限并不由文件本身的写权限决定,而是由包含该文件的目录的写权限来控制。具体来说:
修改文件内容:需要对文件本身具有写权限。
删除文件:需要对文件所在的目录具有写权限和执行权限。
因此,即使用户对某个文件拥有写权限,如果用户对包含该文件的目录没有适当的权限,仍然无法删除该文件。同样,如果用户对目录具有写权限,但对文件没有写权限,用户仍然可以删除该文件。这意味着文件的写权限不一定意味着用户拥有删除该文件的权限。

评论

  1. 徐超
    Windows Edge
    已编辑
    1 月前
    2024-12-05 11:04:20

    很有价值,谢谢博主

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇