文章目录
常用命令
快捷键
- Tab:命令和文件名补全
- Ctrl+C:中断正在运行的程序;
- Ctrl+D:结束键盘输入(End Of File,EOF)
- df:查看磁盘使用情况
- dd是磁盘维护命令
- top是查看进程
- netstat查看网络
- 分 时 日 月 周 命令(0表示星期天)
- 内核分为进程管理,内存管理,io管理,文件管理子系统
free:查看linux系统内存使用及交换区的容量大小
cat /proc/meminfo:查看物理内存的大小
-u 表示指定用户的用户号,由于系统用户的用户号是0,所以指定用户号为0。如果同时有-o选项,则可以重复使用其他用户的标识号
-i package_name 安装软件包
-U packagefile 更新软件包
-qa 列出已安装的软件包列表
-q package-name 判断软件包是否安装
-qf file_name 判断某个特定文件是由哪个软件包负责安装的
/etc/group 设定用户的组名与相关信息
/etc/passwd 帐号信息
/etc/shadow 密码信息
fstab文件描述内容加载文件系统
int pthread_mutex_destroy(pthread_mutex_t *mutex); //销毁互斥锁
int pthread_mutex_lock(pthread_mutex_t *mutex); //以原子操作方式给互斥锁加锁
int pthread_mutex_trylock(pthread_mutex_t *mutex); //非阻塞版本
int pthread_mutex_unlock(pthread_mutex_t *mutex); // 以原子操作方式给互斥锁解锁
帮助
- –help
指令的基本用法 - man
man 是 manual 的缩写,显示指令的具体信息
当执行 man date 时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下:
- info
info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以进行跳转 - doc
/usr/share/doc 存放着软件的一整套说明文件
关机
- who:查看有无用户在线
- sync:将内存中的数据同步到磁盘中
- shutdown
path
- 可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
sudo
- sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令
包管理工具
- RPM 和 DPKG 为最常见的两类软件包管理工具:
- RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成
为很多 Linux 系统 (RHEL) 的既定软件标准。 - 与 RPM 竞争的是基于 Debian 操作系统 (Ubuntu) 的 DEB 软件包管理工具 DPKG,全称为 Debian Package,
功能方面与 RPM 相似 - YUM 基于 RPM,具有依赖管理和软件升级功能
- RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成
发行版
- 发行版是Linux内核及各种应用软件的集成版本
VIM模式(3个)
- 指令模式(Command mode):VIM 的默认模式,可以用于移动游标查看内容;
- 编辑模式(Insert mode):按下 “i” 等按键之后进入,可以对文本进行编辑;
- 指令列模式(Bottom-line mode):按下 “:” 按键之后进入,用于保存退出等操作
- 指令列模式下,有以下命令用于离开或者保存文件
GNU
- GNU 计划,译为革奴计划,目标是创建一套完全自由的操作系统,称为 GNU,其内容软件完全以 GPL 方式发
布。 - GPL 全称为 GNU 通用公共许可协议,包含了以下内容:
- 以任何目的运行此程序的自由;
- 再复制的自由;
- 改进此程序,并公开发布改进的自由
磁盘接口
IDE
- IDE(ATA)全称 Advanced Technology Attachment,接口速度最大为 133MB/s,因为并口线的抗干扰性太差,且
排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代
S-ATA
- S-ATA 全称 Serial ATA,即使用串口的 ATA 接口,抗干扰性强,且对数据线的长度要求比 ATA 低很多,支持热插
拔 - SATA-II 的接口速度为 300MiB/s,而新的 SATA-III 标准可达到 600MiB/s 的传输速度。SATA 的数据线也比 ATA 的细得多,有利于机箱内空气流通,整理线材也较方便
SCSI
- SCSI 全称是 Small Computer System Interface(小型机系统接口)
- 经历多代的发展,从早期的 SCSI-II 到目前的Ultra320 SCSI 以及 Fiber-Channel(光纤通道),接口形式也多种多样
- SCSI 硬盘广为工作站以及个人电脑以及服务器所使用,因此会使用较为先进的技术,如碟片转速 15000rpm 的高转速,且传输时 CPU 占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵
SAS
- SAS(Serial Attached SCSI)是新一代的 SCSI 技术
- 和 SATA 硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间
磁盘的文件名
- Linux 中每个硬件(包括磁盘)都被当做一个文件
- 磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:
- IDE 磁盘:/dev/hd[a-d]
- SATA/SCSI/SAS 磁盘:/dev/sd[a-p]
- 其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关
磁盘分区
分区表
- 分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是限制较少的 GPT 分区表
- MBR
- MBR 中,第一个扇区最重要,里面有master开机记录(Master boot record, MBR)及分区表(partition table),其
中master开机记录占 446 bytes,分区表占 64 bytes。 - 分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。
- 其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑
分区。
- 其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑
- Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。
- 注意,逻辑分区的编号从5 开始
- GPT
- 不同的磁盘有不同的扇区大小,例如 512 bytes 和最新磁盘的 4 k
- GPT 为了兼容所有磁盘,在定义扇区时使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。
- GPT 第 1 个区块记录了master开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分
区信息进行备份。这 33 个区块第一个为 GPT 表头纪录,这个部分纪录了分区表本身的位置与大小和备份分区的位
置,同时放置了分区表的校验码 (CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,可以使
用备份分区进行恢复 - GPT 没有扩展分区概念,都是主分区,每个 LBA 可以分 4 个分区,因此总共可以分 4 * 32 = 128 个分区
- MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 2^33 TB = 8 ZB
- 如下图:第一个区块为MBR,第二个区块为GPT表头记录,其余32个区块可分为4个分区(Entry)
- -1表示倒数第一个
开机检测程序
BIOS
-
BIOS(Basic Input/Output System,基本输入输出系统),它是一个固件(嵌入在硬件中的软件)
-
BIOS 程序存放在断电后内容不会丢失的只读内存中
-
BIOS 是开机时计算机执行的第一个程序,这个程序知道可以开机的磁盘,并读取磁盘第一个扇区的主要开机记录(MBR),由MBR执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件
-
主要开机记录(MBR)中的开机管理程序提供以下功能:选单、载入核心文件以及转交其它开机管理程序。
-
转交这个功能可以用来实现多重引导,只需要将另一个操作系统的开机管理程序安装在其它分区的启动扇区上,在启动开机管理程序时,就可以通过选单选择启动当前的操作系统或者转交给其它开机管理程序从而启动另一个操作系统
-
下图中,第一扇区的MBR中的开机管理程序提供了两个选单:M1、M2
- M1 指向了 Windows 操作系统,而 M2 指向其它分区的启动扇区,里面包含了另外一个开机管理程序,提供了一个指向 Linux 的选单
- 安装多重引导,最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录(MBR),而Linux 可以选择将开机管理程序安装在主要开机记录(MBR)或者其它分区的启动扇区,并且可以设置开机管理程序的选单
UEFI
- BIOS 不可以读取 GPT 分区表,而 UEFI 可以
分区与文件系统
- 对分区进行格式化是为了在分区上建立文件系统。
- 一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。
组成
- 最主要的组成部分如下:
- inode(理解为清单):一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;
- block:记录文件的内容,文件太大时,会占用多个 block。
- superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式
与相关信息等 - block bitmap:记录 block 是否被使用的位域
文件读取
- EXT2与FAT文件系统
- EXT2:相当于存在一个文件所在block的清单(inode)
- FAT:无inode,链表结构,每个block存储下一个block编号
磁盘碎片
- 指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能
block
- 一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较
小的 block
inode
- inode 具体包含以下信息:
- 权限 (read/write/excute);
- 拥有者与群组 (owner/group);
- 容量
- 建立或状态改变的时间 (ctime);
- 最近一次的读取时间 (atime);
- 最近修改的时间 (mtime);
- 定义文件特性的旗标 (flag),如 SetUID…;
- 该文件真正内容的指向 (pointer)。
- inode 具有以下特点:
- 每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes);
- 每个文件都仅会占用一个 inode。
- inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号
- 因此引入了间接、双间接、三间接引用。间接引用是指,让inode 记录的引用 block 块来记录引用信息
目录
- 建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件
名。 - 文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作
与目录的 w 权限有关
日志
- 如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block
中。 - ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。
挂载
- 挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。
目录配置
- 为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结
构。最基础的三个目录如下:- / (root, 根目录)
- /usr (unix software resource):所有系统默认软件都会安装到这个目录;
- /var (variable):存放系统或程序运行过程中的数据文件。
文件
文件属性(❤)
ls查看文件
- 用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。
- 使用 ls 查看一个文件时,会显示一个文件的信息
- 例如 drwxr-xr-x 3 root root 17 May 6 00:14 .config ,对这个信息的解释如下:
- d rwx r-x r-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
- 3:链接数
- root:文件拥有者
- root:所属群组
- 17:文件大小
- May 6 00:14:文件最后被修改的时间
- .config:文件名
文件类型和时间及权限
- 常见的文件类型及其含义有:
- d:目录
- -:文件
- l:链接文件
- 9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。
- 一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。
- 文件时间有以下三种:
- modification time (mtime):文件的内容更新就会更新;
- status time (ctime):文件的状态(权限、属性)更新就会更新;
- access time (atime):读取文件时就会更新
文件权限:10个字符 ls查看
第一个字符:文件(-),目录(d),链接(l)
剩余每三个读r写w执行x;第一组文件所有者,第二组文件所有者同一组用户,不同组的其他用户。
数字表示,读4写2执行1
所有者u,所有组g,其他o
基本操作命令
- ls
2. cd/mkdir/rmdir/touch/cp
修改权限
文件及目录默认权限
- 002(?)
链接
实体链接
符号链接
- 符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。
当源文件被删除了,链接文件就打不开了 - 可以为目录建立链接
获取文件内容
- cat/tac/more/less/head/tail/od
指令与文件搜索
- which/whereis/locate/find
- perm
- type
压缩和打包
压缩文件名
压缩指令
- gzip
2. bzip2
打包
Bash
- 可以通过 Shell 请求内核提供服务,Bash 是 Shell 的一种
- 特性
- 命令历史:记录使用过的命令
- 命令与文件补全:快捷键:tab
- 命名别名:例如 lm 是 ls -al 的别名
- shell scripts
- 通配符:例如 ls -l /usr/bin/X* 列出 /usr/bin 下面所有以 X 开头的文件
变量操作
- 对一个变量赋值直接使用 =。
- 对变量取用需要在变量前加上 $ ,也可以用 ${} 的形式;
- 输出变量使用 echo 命令
指令搜索顺序
- 以绝对或相对路径来执行指令,例如 /bin/ls 或者 ./ls ;
- 由别名找到该指令来执行;
- 由 Bash 内置的指令来执行;
- 按 $PATH 变量指定的搜索路径的顺序找到第一个指令来执行
数据流重定向(❤)
- 重定向指的是使用文件代替标准输入、标准输出和标准错误输出。
管道指令
- 管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的
内容时就可以使用管道 - 在命令之间使用 | 分隔各个管道命令
提取指令
排序指令
双向输出重定向
- 输出重定向会将输出内容重定向到文件中,而 tee 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用
tee 指令,一个输出会同时传送到文件和屏幕上
$ tee [-a] file
字符转换指令
- tr/col/expand/join/paste
分区指令
- split
正则表达式
grep
printf
awk
- 每次处理一行,处理的最小单位为字段
进程管理
查看进程
- ps
- 查看进程
- 示例一:查看自己的进程
ps -l
- 示例二:查看系统所有进程
ps aux
- 示例三:查看特定的进程
ps aux | grep 2570
- pstree
- 查看进程树
示例:查看所有进程树
pstree -A
- top
- 实时显示进程信息
示例:两秒钟刷新一次
top -d 2
- netstat
- 查看占用端口的进程
- 示例:查看某端口的进程
netstat -anp | grep port
进程状态
sigchld信号
wait
- 主进程调用wait
- 参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子
进程消灭掉,可以设置这个参数为 NULL。
waitpid()
pid_t waitpid(pid_t pid, int *status, int options)
- 作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。
- pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。
- 如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。
- options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也
就是说它会立即返回,父进程可以继续执行其它任务
孤儿进程
- 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
- 孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。
- 由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害
僵尸进程
- 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会
释放。 - 如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这
种进程称之为僵尸进程。 - 僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。
- 系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。
- 要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,
这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上 ,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。 因此孤儿进程并不会有什么危害
dd 删除光标所在的那一整行
yy 复制光标所在的那一整行
p 将已复制的数据在光标的下一行粘贴
P 将已复制的数据在光标的上一行粘贴
trap命令
运行格式
- 参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名
trap command signal
- 有三种形式分别对应三种不同的信号回应方式。
- 第一种:
- trap “commands” signal-list
- 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。
- 第二种:
-
trap signal-list
-
trap不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行。
- 第三种:
-
trap " " signal-list
-
trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种