Linux 学习
比较重要的知识点
能简单使用 cat,grep,cut 等命令进行一些操作;
文件系统相关的原理,inode 和 block 等概念,数据恢复;
硬链接与软链接;
进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。
Linux 目录结构
根目录是 /
。 底下有好几个目录文件夹。
bin : 存放系统的可执行文件
boot: 存放用于系统引导时使用的各种文件。
dev : 存放设备文件。
etc : 存放系统配置文件。
home : 存放所有用户的文件,是用户文件的根目录。
lib : 存放跟文件系统中的程序所需要的 共享库 及 内核模块。
mnt : 系统管理员安装临时文件的目录。
opt : 自己安装的一些应用程序包。一般放 部署的 API。
usr : 存放系统应用程序。 usr/local : 本地管理员的软件安装目录
文件的属性:
[root@hecs-x-medium-2-linux-20200703093020 ~]# ll
-rw-r--r-- 1 root root 26024 Apr 25 2019 mysql80-community-release-el7-3.noarch.rpm
就按顺序来看看显示出来的东西代表什么意思:
第一个字符代表文件的类型
d
: 这是一个目录-
: 这是一个文件l
: 这是一个链接文件,是一个软链接后面 3 * 3 个字符,代表各用户对文件的权限, 3 个为一组划分看。
r
: 读权限, 也可以用数字 4 表示, 2 的 2 次幂。w
: 写权限, 也可以用数字 2 表示, 2 的 1 次幂。x
: 可执行, 也可以用数字 1 表示, 2 的 0 次幂。前面 3 个字符,表示 文件拥有者 的权限。
中间 3 个字符,表示 所属用户组 的权限。
后面 3 个字符,表示 其他用户 的权限。
再之后 1 个数字, 代表 链接数。
再之后 2 串字符,代表名称。
第一个是 文件的拥有者 的用户名称。
第二个是 文件所属的 用户群组的名称。
再之后 是表示文件的大小。
再之后 表示 文件最后被修改的时间。
文件的时间有 3 中类型:
- modification time (mtime) : 文件的内容更新就会更新。
- status time (ctime) : 文件的状态更新(权限、属性),就会更新。
- acces time (atime) : 读取文件时就会更新。
再之后 就是文件名了。
修改文件的权限
使用 chown 命令, (change owner)。
# chmod [ugoa] [+-=] [rwx] dirname/filename - u:拥有者 - g:所属群组 - o:其他人 - a:所有人 - +:添加权限 - -:移除权限 - =:设定权限 # 示例:将 .bashrc 文件的权限修改为 -rwxr-xr--。 # chmod 754 .bashrc # 示例:为 .bashrc 文件的所有用户添加写权限。 # chmod a+w .bashrc # 示例: 所属用户、用户组、其他用户的设置。 # chmod u+x,g+w,o+w test.log //r 读,w 写 x 执行
默认权限
文件的默认权限:
没有可执行。 所以就是 666 , 也就是 rw-rw-rw-。
目录的默认权限:
目录要能进入,所以必须有可执行权限。 所以就是 777, 也就是 rwxrwxrwx。
一个目录的权限,也就是对其文件列表的权限。
拥有文件的 写权限(w) , 并不能对文件名进行修改操作。
因为文件名不是存储在文件的内容里的,而是存储在这个文件所属的目录里的。
可以通过 umask 设置或查看默认权限。
文件系统的简单介绍
Linux中,一切皆文件。
网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件、目录 都可以看成是一个文件。
把硬件系统看成是一个文件,就可以用读写文件的方式实现对硬件的访问。
-
inode
存储文件的元信息(metadata),比如文件拥有者、容量、权限、修改时间等等。
每个文件都仅有 1 个 inode,每个 inode 有 1 个编号。 使用 stat 命令可以查看文件的 inode 信息。
每个 inode 的大小固定在 128 bytes 。 (新的 ext4 与 xfs 可以设定到 236bytes)。
操作系统使用 inode 编号来区分不同的文件,而不是用文件名来区分。
-
block
磁盘的最小单位是 扇区(Secotr)。
读取的最小单位是 块(block),也就是一次读取 多个扇区。
文件的内容数据,都是存储在 block 中的。
在 ext2 文件系统中, block大小有 1k、2k、4k 三种。 常用的是 4k 的大小。
一个 block 只能被一个文件所用,没有使用到的空间就是浪费了。
主要的还是上面 2 种组成,另外还会有些其他的数据,比如:
-
superblock
记录文件系统的整体信息。
比如 inode 和 block 的总量、使用量、剩余量, 以及文件系统的格式与相关的信息等等。
-
block bitmap
记录 block 是否被使用的位图。
磁盘碎片的概念:
一个文件的 block 过于分散, 导致磁盘头移动距离过大,从而降低了磁盘的读写性能。
文件的类型:
-
普通文件
就是指 txt、html、md等等这样应用层面的文件类型。
-
目录文件
打开目录,实际上是打开目录文件。
目录文件 也是一个文件,包括 1 个 inode 和 至少 1 个 block。
block 包括了 目录下的文件名,和 指向这些文件的指针。
-
链接文件
-
硬链接(hard link):
硬链接的文件, 拥有相同的 inode 。 和源文件彼此间不影响。
只有当 所有相同的 inode 都删除了, 这个文件才算是 删除了。
-
软连接、符号链接(symbolic lick):
类似 Windows 系统上的
快捷方式
, 源文件删除,软链接也不能用,找不到源文件了。
-
-
设备文件
设备文件一般存放于 /dev 目录下。
-
字符设备文件
可按 字节/字符 来读取数据。
不支持随机存取。
比如: 键盘、 串口
理解: 键盘上敲单词时,是按照单词顺序来读取的,随机访问没有意义。
-
块设备文件
以块的方式,来读取数据。 在 Windows 系统下, 这也称为 簇。
支持随机存取,可以访问设备上任何一块位置。
不支持字符方式寻址。
比如: 硬盘、软盘、光碟
-
-
管道文件
用于进程间的通信。
可以用
mkfifo
命令创建一个管道文件。 -
Socket套接字文件
用于 网络进程间 的通信, 也就是可以使 2 台不同的机器通信。
也可以用于 本机的 Socket 网络程序。
常用的文件或目录的命令
ls、cd、mkdir、rmdir、touch、cp、mv、rm
获取文件的内容命令
cat : 获取文件内容
tac : cat 的方向操作,从最后一行开始打印。
more : 分页显示文件内容。
less :和 more 差不多,有往前翻页的功能。
head 、 tail
# head [-n number] filename -n :后面接数字,代表显示几行的意思 # tail 是 head 的反向操作,只是取得是后几行。
od : 以字符或十六进制数,显示二进制文件。
/usr/share/doc 存放着软件的一整套说明文件。
who : 看看有没有其他用户在线
环境变量: PATH
声明的都是一些可执行文件的路径, 路径与路径之间,用
冒号:
分割
BASH:
可以通过 shell 来调用内核的服务。 而 bash 是 shell 的一种。
数据流重定向:
重定向指的是使用文件代替标准输入、标准输出和标准错误输出。
1 | 代码 | 运算符 |
---|---|---|
标准输入 (stdin) | 0 | < 或 << |
标准输出 (stdout) | 1 | > 或 >> |
标准错误输出 (stderr) | 2 | 2> 或 2>> |
其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。
压缩与打包
- Linux 底下有很多压缩文件名,常见的如下:
扩展名 | 压缩程序 |
---|---|
*.Z | compress |
*.zip | zip |
*.gz | gzip |
*.bz2 | bzip2 |
*.xz | xz |
*.tar | tar 程序打包的数据,没有经过压缩 |
*.tar.gz | tar 程序打包的文件,经过 gzip 的压缩 |
*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 |
*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 |
- 打包
压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。
tar 不仅可以用于打包,也可以使用 gzip、bzip2、xz 将打包文件进行压缩。
$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename... ==打包压缩
$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件] ==查看
$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
-z :使用 zip;
-j :使用 bzip2;
-J :使用 xz;
-c :新建打包文件;
-t :查看打包文件里面有哪些文件;
-x :解打包或解压缩的功能;
-v :在压缩/解压缩的过程中,显示正在处理的文件名;
-f : filename:要处理的文件;
-C 目录 : 在特定目录解压缩。Copy to clipboardErrorCopied
使用方式 | 命令 |
---|---|
打包压缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |
查 看 | tar -jtv -f filename.tar.bz2 |
解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 |
进程管理
-
常用命令
ps : 查看自己的进程
ps aux : 查看系统所有进程
pstree : 查看进程树
top : 显示 实时的进程信息
netstat : 查看占用 端口 的进程。
-
孤儿进程
一个父进程退出了,他的子进程还在运行,这些子进程就变成了孤儿进程。
孤儿进程会被 init进程(进程号为 1 的进程)收养, 所以孤儿进程不会对系统造成危害。
-
僵尸进程
一个子进程的
进程描述符
在子进程退出时不释放。 也就是父进程 没有调用 wait() 、 waitpid() 方法。那么子进程的 进程描述符 仍然保存在系统中,这种进程就叫 僵尸进程。
如果有大量的僵尸进程(zombie), 则进程号会越来越少,导致系统不能产生新的进程。
干掉僵尸进程,就是把他父进程 kill 掉, 使其变成 孤儿进程。
VIM
-
按
i
进入编辑模式。 -
:wq
写入磁盘并离开。:wq!
强制写入磁盘,并离开。 至于能不能写进入,与用户对该文件的权限有关。:q
离开:q!
强制离开,不保存。