Linux 操作系统的组件
Linux 内核 : 内核(内核空间)是 Linux 系统的最底层,提供了系统的核心功能并允许进程以⼀种有序的⽅式访问硬件。用于控制进程、输⼊、输出设备、文件系统操作、管理内存。这些都不需要⽤户参与,系统⾃⾏完成。
Shell: Shell 是⼀个命令⾏解释器,它使得⽤户能够与操作系统进⾏交互。
文件系统:Linux 文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
实用程序:标准的 Linux 系统都有一套实用程序,它们是专门服务于用户对系统进行操作的程序,例如编辑器(用于编辑文件)、过滤器(用于接收数据并过滤数据)、交互程序、执行标准的计算操作等。
pwd(print work directory):显示当前目录的绝对路径
cd(change directory):切换目录
常用目录:(./ 当前目录)(…/ 上层目录)(- 上一次操作所在路径)(~ 当前用户用户名路径)
ls(list show):列出当前目录下的内容
mkdir(make directory):新建文件夹
touch :创建文件
rm :删除文件
rm -rf :删除文件夹
clear :清屏
cp :复制文件
cp -a :复制文件夹
mv :
find:搜索指定文件,格式:find 路径 -name ⽂件名
grep:搜索指定内容,格式:grep “字符串” ⽂件
管道: 是将⼀个命令的输出当作另⼀个命令的输⼊,通过 | 连接多个命令。即: 后⼀个命令的操作,是在前⼀个命令操作结束的基础上进⾏的。
cat:显示指定文件的所有内容
cut:指定分割字符,分割指定内容, 格式:cut -d “分割字符” -f 字段
head:显示文件开头的前几行( ⼀般与管道联合使⽤ ),head -⾏数 ⽂件
tail:显示文件结尾的后几行( ⼀般与管道联合使⽤ ), tail -⾏数 ⽂件
举些例子:
wc : 统计某个⽂件的⾏数 / 单词个数 / 字节数
符号 | 含义 | 举例 |
---|---|---|
星号 * | 匹配任意⻓度的字符串 | 输入:ls file_*.txt 输出:file_1.txt file_2.txt file_3.txt |
问号 ? | 匹配⼀个⻓度的字符串 | 输入:ls file_?.txt 输出:file_1.txt file_a.txt file.x.txt |
方括号 [ … ] | 匹配其中指定的⼀个字符 | 输入:ls file_[otr].txt 输出:file_o.txt file_r.txt file_t.txt |
方括号 [ - ] | 匹配指定的⼀个字符范围 | 输入:ls file_[a-z].txt 输出:file_a.txt file_b.txt file_z.txt |
方括号 [ ^… ] | 除了其中指定的字符, 其他均可匹配 | 输入:ls file_[^obt].txt 输出:除了 file_o.txt,file_b.txt,file_t.txt 外的其他文件 |
输出重定向 > | 把本来应该输出到屏幕上的正确的数据,修改输出到其他的地⽅ (比如⽂件)。 | echo “hello world” > log.txt 把hello world写⼊log.txt⽂件中,写⼊前会把log.txt⽂件内容清空,没有文件创建文件 echo “happy” >> log.txt 追加的⽅式写,不清空文件内容 |
输入重定向 < | 改变默认的输⼊源,把本来应该从键盘输⼊的信息该从其他位置获取 (比如文件)。 | cat < /etc/passwd > a.txt 通过重定向 /etc/passwd 作为输⼊设备,并输出重定向到 a.txt, 最终实现将 /etc/passwd ⽂件中内容复制到 a.txt 中 |
错误重定向 2> | 把本来应该输出到屏幕上错误的信息改输出到⽂件中 | bababa123 2> log.txt bababa作为一条错误的命令, 本来应该向屏幕上输出command not found ,这条命令现在会输出到log.txt⽂件中。 |
命令置换 |
将⼀个命令的输出当作另⼀个命令的参数 | command1 `command2` command2的输出当作command1的参数。 如 find `pwd` -name hello.c |
vim + hello.c 打开 hello.c 文件,此时不能编辑代码,只能进行命令操作。
模式 | 使用方法 |
---|---|
编辑模式 | 点击“ i ”键,终端的左下⻆会出现 insert 关键字,此时进入编辑模式 |
命令模式 | 代码编辑完毕后,按下 esc 键,退出编辑模式。 按下“ : ”键,在窗口底部出现冒号后便成功进入命令模式 |
gcc命令:
gcc编译过程:预处理——>编译——>汇编——>链接
gcc命令输入时可加参数:
简介:
- Vim 采⽤的是交互式⽂本编辑模式,可以⽤键盘命令来交互性地插⼊、删 除或替换数据中的⽂本。但 sed 命令不同,它采⽤的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供⼀组规则,sed 会按照此规则来编辑数据。
使⽤场景:
- 超⼤⽂件处理;
- 对⽂件进⾏批量增加,替换等。
- 有规律的⽂本,例如 以分号,空格等分隔的⽇志⽂件等;
sed 会根据脚本命令来处理⽂本⽂件中的数据,这些命令要么从命令⾏中输⼊,要么存储在⼀ 个⽂本⽂件中,此命令执⾏数据的顺序如下:
- 每次仅读取⼀⾏内容;
- 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源⽂件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
- 将执⾏结果输出。
当⼀⾏数据匹配完成后,它会继续读取下⼀⾏数据,并重复这个过程,直到将⽂件中所有数据处理完毕。
语法格式:sed [options] ‘{command}[flags]’ [filename]
[options]:
{command}:
[flags]:
一些例子:
显示 /etc/passwd 第三⾏的信息
在 / etc/passwd 中第⼀⾏前添加⼀⾏内容为”Good Good Study"
把 / etc/passwd 中所有名字为 root 的字符串改为 class
删除 / etc/passwd 中内容并列出⾏号,并且将第 2~5 ⾏删除
把 / etc/passwd ⽂件中 root ⽤户的信息以带⾏号的形式重定向到 log.txt ⽂件中, 要求把 log.txt⽂件中 root 替换为 linux,并且 log.txt 中保存替换后的⽂件内容。
AWK 语⾔的基本功能是在⽂件或者字符串中基于指定规则浏览和抽取信息。awk 抽取信息后,才能对其他⽂本操作。它是⼀个强⼤的⽂本分析⼯具。简单来说 awk 就是把⽂件逐⾏的读⼊,以空格为默认分隔符将每⾏切⽚,切开的部分再进⾏各种分析处理。
sed 命令常⽤于⼀整⾏的处理。⽽ awk 更倾向于把⼀⾏分为多个 “字段” 然后进⾏处理。
适⽤场景
- 超⼤⽂件处理;
- 输出格式化的⽂本报表;
- 执⾏算数运算;
- 执⾏字符串操作等。
语法格式: awk [options] ‘pattern {action}’ filename
[options]:
pattern:匹配规则,⼀般使⽤关系表达式作为条件,条件符合执⾏对应的动作。
{action}:某些计算操作/格式化数据/流控制语句
filename:⽂件名
举个例子:
新建⼀个 student.txt, 内容如下:
ID NAME PHP Linux MySQL Avereage
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
NAME
Liming
Sc
Gao
NAMEAvereage
Liming87.66
Sc85.66
Gao91.66
NAME Avereage
Liming 87.66
Sc 85.66
Gao 91.66
awk输出磁盘信息: df -Th | grep tmpfs | awk ‘{print $1"\t"$5}’
udev 921M
tmpfs 186M
tmpfs 945M
tmpfs 5.0M
tmpfs 945M
tmpfs 189M
默认情况下,awk 会从输⼊中读取⼀⾏⽂本,然后针对该⾏的数据执⾏程序脚本,但有 时可能需要在处理数据前运⾏⼀些脚本命令,这就需要使⽤ BEGIN 关键字。
[linux#linux] awk 'BEGIN{print "test start!"}{print $2 "\t" $5}' student.txt
test start!
NAME MySQL
Liming 86
Sc 87
Gao 93
和 BEGIN 关键字相对应,END 关键字允许我们指定⼀些脚本命令,awk 会在读完数据后执⾏它们。
[linux#linux] awk '{print $2 "\t" $5}END{print "test END!"}' student.txt
NAME MySQL
Liming 86
Sc 87
Gao 93
test END!
在 linux 中可以这么说,所有的设备都是⽂件。
例如,⼀块硬盘是⼀个⽂件,这个硬盘上的分区也是⼀个⽂件,声卡、网卡等硬件设备在操作系统看来也是⼀个⽂件。
我们可以通过 ls -ld命令查看文件的详细信息,此处为 bin 目录下的所有文件的详细信息。
以 -rwxr-xr-x 1 root root 1113504 Apr 18 2022 /bin/bash 为例进行说明。
首先第一位上的标识符表明了文件类型信息:
而后的九位”rwxr-xr-x“为文件权限信息,每三位分别表示了不同角色,分别为: ⽂件所有者权限、⽂件所有者所在组的组员权限、其他⼈权限。
其中: r 表示文件可读, w 表示文件可写入, x 表示文件可执⾏。
我们通常也将文件权限使用八进制数组合来进行方便记忆:
不同的权限使用八进制数表示为: r :4,w :2,x :1,在表示一个角色的权限时,使用加法来进行表示。
比如,当前文件的文件所有者权限为:rwx,使用八进制数通过加法后表示为”7“;⽂件所有者所在组的组员权限为:r-x,则表示为”5“;其他⼈权限同样表示为”5“。
如此,我们使用”755“就可以来表示这个文件的所有权限信息。
格式: chmod + 权限 + ⽂件名
比如:
linux ⽀持常⽤的两种压缩格式
- gzip : linux ⽀持的压缩格式的⼀种,优点是压缩速度较快
- bzip2 :linux ⽀持的压缩格式的⼀种,优点是压缩后存储空间占⽤较⼩。
使用 zip 命令进行文件压缩,unzip命令进行文件解压缩。
使用 tar 命令进行文件压缩及相关操作:
举例: