Linux备忘录,记录经常忘记的一些命令以及概念。
Ctrl + D
结束键盘输入man
常用的数字代表的指令类型- 1用户再shell环境中可以操作的指令和可执行文件
- 5配置文件
- 8系统管理员可以使用的管理指令
info
与man
类似,但是info
将文档分成一个个页面,每个页面可以跳转/usr/share/doc
存放着软件的一整套说明文件sync
将内存中的文件数据立即同步到磁盘- 磁盘
- IDE 133MB/s
- SATA SATA-II 300MB/s,SATA-III 600MB/s
- SCSI
- SAS 6Gb/s
- 磁盘的文件名,文件名后面序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关
- IDE磁盘:/dev/hd[a-d]
- SATA/SCSI/SAS :/dev/sd[a-p]
- MBR
- 主要开机记录占446bytes,分区表占64bytes
- 分区表最多存储四个分区分为主分区和扩展分区,扩展分区只有一个
- 扩展分区使用其它扇区来记录额外的分区表,从而分出更多逻辑分区
- Linux分区当成文件,分区文件的命名方式为:磁盘文件名+编号,例如/dev/sda1。逻辑分区的编号从5开始
- GPT
- GPT为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logic Block Address,LBA),LBA扇区大小通常为512bytes
- GPT第一个区块记录MBR,紧接着33个区块记录分区信息,最后的33个区块用于对分区信息进行备份,33个区块的第一个区块为GPT表头记录,这个部分记录了分区表本身位置与大小和备份分区的位,同时放置了分区表的校验码(CRC32)。
- GPT没有扩展分区的概念,都是主分区,每个LBA可以分为4个分区,因此总共可以分128个分区。
- MBR不支持2.2TN以上的硬盘,GPT则最多支持到8ZB
- BIOS不可以读取GPT分区表,UEFI可以读取
- 对分区进行格式化就是在分区上建立文件系统,一个分区通常只能格式化一个文件系统,但是磁盘阵列等技术可以将一个分区格式化称为多个文件系统
- 文件系统
- inode ,一个文件占用一个inode,记录文件的属性和文件内容所在的block编号
- block:记录文件的具体内容
- superblock:记录文件系统的整体信息,包括inode和block的总量、使用量、剩余量,文件系统的格式和相关信息
- block bitmap:记录block是否被使用的位图
- 在Ext2文件系统中所支持的block大小有1K,2K,以及4K三种
- inode组成:权限、拥有者与群组、容量、ctime、mtime、定义文件特性的旗标(flag,如SetUID)、文件真正内容的指向
- 每个inode的大小是固定的。为了引用大量的block编号,除了使用直接指向外引入了间接、双间接、三间接引用,这决定了文件系统的最大的单文件大小
- 建立目录,系统分配一个inode和至少一个block,block中记录的是该目录下的文件名和inode的对应关系
- 文件的inode本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些与文件名有关的操作都与目录的写权限相关
- ext3/ext4文件系统引入了日志功能,可以利用日志解决block bitmap与block数据不一致的问题
- linux 最基础的三个目录:
/root
根目录/usr
(unix software resource)软件默认安装目录/var
(varible)存放系统或程序运行中的数据文件
mtime
:文件内容被修改会更新;ctime
:文件的状态改变会更新;atime
:读文件时会更新mkdir -p
递归创建目录umask
通过掩码表示设置默认权限,文件默认权限为666,目录默认权限为777。umask 0077
,之后创建的目录默认权限为700,文件默认权限是600。ln
实体链接在目录下创建一个条目,记录文件名与inode编号,不能跨越文件系统、不能对目录进行链接ln -s
符号链接保存着源文件所在的绝对路径,可以理解为Windows的快捷方式head
:获取文件前几行;tail
获取文件后几行whereis
:搜寻相关的的可执行文件、源代码文件、帮助文件locate
利用数据库进行搜索,使用updatedb
来立即更新数据库find[basedir] [option]
-mtime n
列出在n天前的那一天修改过内容的文件-mtime +n
列出在n天之前修改过内容的文件-mtime -n
列出在n天之内修改过内容的文件-user name
;-group name
;-nouser
;-nogroup
-name filename
gzip
、bzip2
、xz
的压缩比不断优化,不过要注意的是,压缩比越高,压缩的世家就越长tar
- 打包压缩
tar -zvcf filename.tar.gz
- 查看
tar -ztvf filename.tar.gz
- 解压缩
tar -zvxf filename.tar.gz
- 打包压缩
- 对一个变量赋值直接使用
=
- 对变量的使用需要早变量前加上
$
,也可以用${}
的形式 - 变量内容中如果有空格,必须使用双引号或者单引号,双引号中的特殊字符可以保留原本特性,单引号内的特殊字符就是特殊字符本身
- 可以使用`指令`或者${指令}的方式将指令的执行结果赋值给变量
- 可以使用
export
命令将自定义变量转为环境变量,环境变量可以在子程序也就是当前bash产生的子bash中使用 - 指令搜索顺序
- 绝对或相对路径
- 别名
- Bash内置指令
- $PATH指定的路径搜索找到的第一个指令
- 数据量重定向
- 标准输入 0
<
或<<
- 标准输出 1
>
或>>
- 标准错误输出 2
2>
或2>>
- 标准输入 0
2>&1
表示将标准错误输出转换为标准输出:find /home -name .bashrrc > list 2>&1
cut
对数据进行切分,取出想要的部分,切分过程一行一行地进行。取出登入者的用户名:last | cut -d ' ' -f 1
- 以
/etc/passwd
的第三列进行排序:cat /etc/passwd | sort -t ':' -k 3
- 取得每个人的登录总次数:
last|cut -d ' ' -f 1 |sort| uniq -c
awk
每次只处理一行,处理的最小单位是字段,每个字段的命令方式为$n
,n从1开始,$0
表示一整行,具体:awk '条件类型 {动作1} 条件类型 {动作2} ...' filename
awk
变量:NF
(每一行拥有的字段数);NR
(目前所处理的是第几行数据);FS
(目前的分隔字符,默认是空格)awk
示例:/etc/passwd
文件的第三个字段为UID,对UID小于10的数据进行处理:cat /etc/passwd|awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'
pstree -A
查看进程树- 查看特定端口的进程:
netstat -anp|grep port
- 一个父进程退出,它的一个或者多个进程还在运行,这些子进程将称为孤儿进程,孤儿进程将会被init进程收养
- 如果子进程退出,父进程并没有调用
wait()
或者waitpid()
,那么子进程的进程描述符仍然保存在系统中,这种进程被称之为僵尸进程,僵尸进程有可能对系统造成危害,消灭僵尸进程只需要将其父进程杀死即可。