- Linux基础
- Linux发行版
- Linux硬盘和磁盘分区
- Linux文件系统类型
- inode节点和块
- 元数据和数据块
- 读取文件流程
- 创建文件流程
- 删除文件流程
- Linux系统开机自检,系统引导过程
- init进程
- Systemd进程
- 系统服务控制
- Linux命令
- Shell介绍
- Linux命令分类
- Linux命令快捷键
- 获取命令帮助方式
- 管道符
- 常用命令
Linux基础 Linux发行版
Linux本身是指Linux内核,Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux发行版主要有两大类:
- RedHat系列
包括Centos - Debian系列
包括kali、Ubuntu
Linux中所有东西都以文件方式存储。
示例:/dev/hda5(第一块IDE硬盘的第五个分区)
/dev是硬盘设备文件、所有外部设备所在目录。
hd表示IDE类型设备,sd表示SCSI类型设备。
硬盘的顺序号,以字母a、b、c、d。。。。表示,按硬盘的个数来排序。
分区的顺序号,以数字1、2、3 。。。表示。
硬盘分区有三种,主分区、扩展分区、扩展分区里的逻辑分区。
- 主分区至少一个,最多四个。顺序号为1-4。
- 扩展分区最多一个。
- 逻辑分区顺序号从5开始。
文件系统类型不一样可能无法复制文件。例如移动硬盘和服务器的不一致,无法交换文件。
目前Centos8默认使用的文件系统类型:
- XFS,日志文件系统。(单个系统文件的最大支持量特别大,适合巨型文件单个操作,操作大型文件非常有效)
- SWAP,交换分区。(将硬盘的一部分空间虚拟成内存来使用,可以缓解物理内存不足的问题)
Centos7以前是用的是EXT4。
Linux支持的其他文件系统类型:EXT3、EXT4、FAT16、FAT32、NTFS、XFS、JFS等。
文件是由元数据和数据块组成。
文件存储在硬盘上,最小的存储单位叫扇区。每个扇区512字节。每次文件读取时读1个数据块。
inode节点用光了以后不能存文件了。
- 元数据:创建者,创建日期,大小等,也称为索引节点。
inode表:存储元数据的区域,文件字节数,权限,归属,时间戳,连接,数据块位置
inode bitmap:inode使用情况,比如空闲inode
block bitmap:块的使用情况,比如空闲inode与空闲块等信息
inode区域包含了inode表、inode bitmap、block bitmap,大小为128b或者256b。 - 数据块:由多个扇区组成,常见4KB一块,也就是8个扇区,存放文件数据和目录数据。
查看/var/log/message文件过程:
- 根目录自引用,从/的inode信息中找到var对应块的信息。
- 得到var对应块的信息,找到var目录。
- 从var目录的inode信息中,找到log对应块的信息。
- 从log目录的inode信息中,找到message文件。
- 最后回到log目录的inode信息中,找到存储的数据块地址。
stat messages可以查看到整个文件的inode信息,时间、权限、归属、权限、数据块等。
创建文件流程创建/root/chaitin.txt文件:
1、创建文件时,先找到当前目录的inode区域中inode bitmap的空闲inode号和block bitmap的空闲block。
2、根据空闲的inode号找到空闲的块(也就是root目录块),然后将空闲inode号和空闲的块进行连接。
3、创建好连接以后,去空闲的块中进行创建,inode号就是最开始查到的空闲inode号。
1、先去找inode表,把文件对应的块的区域,在inode区域里的block bitmap中标注为空闲block。(这时数据依然存在)
2、下次创建文件时,覆盖掉上次占用这个inode号的文件。
1、开机自检(BIOS),根据电脑主板配置,对CPU、内存、显卡硬件设备进行检查是否有问题。
2、MBR引导,也就是从硬盘中启动系统。
3、GRUB菜单,也就是虚拟机启动时,让选择系统内核的菜单。
4、加载内核(kernel),内核是一个特殊的二进制文件,介于硬件和系统之间,负责系统资源分配和调度。
5、init进程初始化,也就是/sbin/init,完成以后,跳入登录界面。
由Linux内核加载运行/sbin/init程序,是系统中第一个进程,PID号永远为1。
Systemd进程代替init进程,成为主流。例如systemctl命令。
程序位于/usr/lib/systemd/systemd
优势:向下兼容、更快的启动速度、集中化命令管理、更合理的命令结构。
Systemd单元类型:
- 单元类型:Service 扩展名:.service 说明:描述一个系统服务。
- 单元类型:Target 扩展名:.target 说明:描述一组systemd的单元。
- 还有更多。。。。
Systemd的Target(Linux运行级别):
systemctl get-default查看默认的运行级别。
systemctl set-default multi-user.target设置默认运行级别。
init 6重启。
runlevel查看运行级别。
- 0(target):系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。
- 1(rescue.target):单用户工作状态,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
- 2(multi-user.target):多用户状态,没有NFS支持。
- 3(multi-user.target):完整的多用户模式,有NFS,登陆后进入控制台命令行模式。
- 4(multi-user.target):系统未使用。
- 5(graphical.target):X11控制台,登陆后进入图形GUI模式,XWindow系统。
- 6(reboot.target):系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。运行init6机器就会重启。
systemctl start/stop/restart/reload/status 服务名称
systemctl enable/disable 服务名称设置服务开机自启动
Linux命令对英文区分大小写。
Shell介绍Shell就是黑窗口,执行Linux命令的地方。
接收用户命令 -> 解释命令,转为二进制 -> 传递给系统内核运行
- 内部命令
属于Shell一部分,没有单独对应的系统文件,自动载入内存,可以直接使用。 - 外部命令
不属于Shell一部分,每个外部命令对应了系统的一个文件,必须知道其对应的文件位置,由Shell加载以后使用。
$PATH下面存的外部命令地址
type 命令可以查看命令属于内部还是外部。
- Tab 补全
- 换行
- Ctrl +u 直接到命令行首
- Ctrl + k 删除光标以后的内容
- Ctrl + l 清屏
- Ctrl + c 强制停止
- help 查看内部命令文档
- –help 软件开发者写的
- man 查看外部命令文档
管道符:将前面命令的输出结果作为后面命令的参数使用。
常用命令mkdir 目录名 #创建目录 mkdir 目录名1 目录名2 #在同一级下批量创建目录 mkdir -p 目录名1/目录名1.1/目录名1.1.1 #创建多级目录,如果目录不存在,就新建一个 ls #列出目录下的内容 ls -a #显示所有文件及目录(.开头的隐藏文件也会列出) ls -l #除文件名称外,也将文件形态、权限、拥有者、文件大小等详细列出。等同于ll ls -h #以K,M,G为单位列出文件大小 pwd #以绝对路径展示用户当前工作目录 cd 目录名 #切换当前工作目录 cd 绝对路径 #切换到目标目录 cd . .. ~ - #.代表当前目录,..代表上一级目录,~切换至用户家目录(root家目录在/root,其他用户在/home下),-回到上一个目录 touch 文件名 #创建一个空白的新文件,如果同名文件已存在,则修改期时间属性。 cp 源文件 目录 #复制文件到目录 cp -r 源目录 目录 #-r表示若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。(递归) cp -p 源文件 目录 #-p除了复制文件的内容以外,还把修改时间和访问权限也复制到新文件中(保持默认属性) mv 源文件名/目录 文件名/目录名 #用来为文件或者目录改名、或者将文件或者目录移入其他位置 mv -f 源文件名/目录 文件名/目录名 #-f如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。 mv -n 源文件名/目录 文件名/目录名 #-n不要覆盖任何已存在的文件或目录。 cat 文件名 #查看文件内容 nl 或者 -n显示行号 echo '文本' #用于输出指定内容 echo '文本'> 文件 #将输出内容覆盖到文件中 echo '文本'>> 文件 #将输出内容追加到文件中 more 文件名 #查看文件内容,空格键是下一页,回车键是显示文本的下一行内容,b键会往回一页显示,q键退出 less 文件名 #查看文件内容,可以进行内容搜索,读取文件速度快,因为不像more那样把整个文件打开 head -n 行数 文件名 #查看文件的开头几行的内容,如果不加-n默认是10行内容 tail -n 行数 文件名 #查看文件的末尾几行的内容,如果不加-n默认是10行内容 tail -f 文件名 #循环读取文件新增的内容 wc -l 文件名 #显示文件的行数 wc -c 文件名 #显示文件的Bytes数 wc -w 文件名 #显示文件的字数 du -h 文件名 #显示文件的使用空间,-h是用K,M,G为单位,提高信息的可读性 df -h #显示硬盘被占用多少空间,目前还剩下多少空间。默认显示单位KB,-h是用K,M,G为单位,提高信息的可读性 getenforce #查看selinux状态 apt-cache search linux-image命令可检索kali系统最新版本内核 apt-get install linux-image-xxx linux-header-xxx命令以安装kali最新版本内核,其中xxx代表内核版本,安装新的内核以后需要重启电脑 alias #起别名 alias -p #查看当前系统存在的别名 du #统计目录或者文件所占空间的大小 ln file1 lnk1 #创建指向⽂件/⽬录的硬链接,删除原始文件后可用,只能用于文件 ln -s file1 lnk1 #创建指向⽂件/⽬录的软链接,删除原始文件后失效,可以用于文件和目录 which 查找命令所在位置 which -a 查找命令所在的所有位置 find #查找文件 -name 根据名称 -size 根据大小 -user 根据属主 -type 根据文件类型 group #查找文件内容 -i忽略大小写 -v反转查 ------------------------------------------------------------------------------------------------ tar #归档或者打包 tar -cvf xxx.tar file #创建⾮压缩tar包 tar -cvf xxx.tar file1 file2 dir1 #将多个⽂件+⽬录打tar包 tar -tf xxx.tar #查看tar包的内容 tar -xvf xxx.tar #解压tar包 tar -xvf xxx.tar -C /dir #将tar包解压⾄指定⽬录 tar -cvfj xxx.tar.bz2 dir #创建bz2压缩包 tar -jxvf xxx.tar.bz2 #解压bz2压缩包 tar -cvfz xxx.tar.gz dir #创建gzip压缩包 tar -zxvf xxx.tar.gz #解压gzip压缩包 ----------------------------------------------------------------------------------------------------------------------------------------------- vi 一般模式下: set nu #显示行号 /qqq #搜索“qqq”内容 gg #光标立马回到第一行 2 #光标向下跳2行,以此类推 G #移动到最后一行 dd #删除当前行 d2j #删除当前行和下两行 yy #复制一行 y2y #复制2行 p(小写) #粘贴到光标之后 P(大写) #粘贴到光标之前 ------------------------------------------------------------------------------------------------------------------------------------------------



