qidao123.com技术社区-IT企服评测·应用市场

标题: 鸟哥Linux基础笔记 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2025-3-28 16:33
标题: 鸟哥Linux基础笔记
Linux基础

在Linux中,挂载点指的是一个目录,用于将一个文件体系连接到Linux的目录布局中。当在Linux中添加一个新的硬盘分区或其他存储设备时,必要将它挂载到一个已经存在的目录上,这个目录就是挂载点
设备类型
文件类型
在Linux中,只要文件名是以小数点开头就是隐蔽文件
Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式是使用:[Ctrl] + [Alt] + [F1] ~ [F6]的组合按钮
体系会将[F1] ~ [F6]命名为tty1 ~ tty6的操作接口情况,假如安装的是图形界面,那么tty1就是图形接口界面
exit是登出Linux,但不是关机,,Linux本身已经有相当多的工作在进行,登陆仅是其中的一个工作, 所以当离开时,这次这个登陆的工作就停止了,但此时Linux其他的工作还是继续在进行
笔墨模式紧张的三个键
关机
上述命令都是调用systemmctl指令,目前体系中所有服务的管理都是该指令,是一个非常复杂的指令,有关关机的语法如下:
<img alt="image-20240110164908332" loading="lazy">

文件权限与权限配置

使用su切换到root,使用ls -al指令
  1. -rw-r--r--.  1 xwj  xwj   193 4月   1 2020 .bash_profile
复制代码
目录与文件的权限意义并不相同,这是因为目录与文件所记载的数据内容不相同
文件是存放现实数据的所在,目录主要的内容在记载文件名清单
针对目录时:
文件是一堆文件数据夹,目录是一堆抽屉,可以将数据夹分类放置到不同的抽屉去,因此抽屉最大的目的是拿出/放入数据夹

仅拥有r权限,没有x权限是无法实行文件或进入目录的

有x就可以实行了,r是可选的,假如没有r,按Tab无法自动补齐文件名
改变文件属性与权限

文件种类与扩展名

任何设备在Linux下面都是文件
扩展名
Linux文件没有所谓的扩展名,一个Linux能不能实行与它的权限有关,只要权限具有x,这个文件就可以被实行,不过,可以被实行不代表可以实行成功
通常还是会以适当的扩展名来表示该文件是什么种类,以下是常见的扩展名:
Linux体系上的文件名只是让你了解该文件大概的用途而已,真正的实行与否仍然必要权限的规范才行
在设置Linux下面的文件名称时,最好可以避免一些特别字符比力好,例如下面这些:
? > < ; & ! [ ] | \ ' "  () { }
因为这些符号在命令行下,是有特别意义的
同时由于指令下达当中,常常会使用到 -option 之类的选项,所以你最好也避免将文件文件名的开头以 - 或 + 来命名
Linux目录配置

Filesystem Hierarchy Standard (FHS)标准的重点在于规范每个特定的目录下应该要放置什么样子的数据,避免每个人使用自己的想法来配置文件放置的目录,由此造成很多管理上的困扰
FHS根据文件体系使用的频繁程度和是否答应使用者随意变更两点将目录定义为4种交互作用的形态:
究竟上FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面这三个目录的定义:
FHS要求根目录( / )必须存在的次目录:
即使没有实体目录,FHS也希望至少有链接文件存在
FHS发起根目录( / )可以存在的次目录:
FHS针对根目录所定义的标准就仅有上面几种,下面是几个是在Linux当中非常紧张的目录:
/proc 主要用于获取体系和进程信息,而 /sys 主要用于访问设备和驱动程序的信息和配置
/usr
所有体系默认的软件(distribution发布者提供的软件)都会放置到/usr下面,因此这个目录有点类似Windows 体系的“C:\Windows\ (当中的一部份) + C:\Program files\”这两个目录的综合体,体系刚安装完毕时,这个目录会占用最多的硬盘容量
放置的数据属于可分享的与不可变动的(shareable,static),假如通过网络进行分区的挂载,那么/usr确实可以分享给区域网络内的其他主机来使用
usr是Unix Software Resource的缩写,也就是Unix操作体系软件资源,而不是使用者的数据
FHS发起所有软件开发者,应该将他们的数据公道的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录
FHS要求/usr必须存在的次目录
FHS发起/usr可以存在的次目录
/var
/usr是安装时会占用较大硬盘容量的目录,/var是在体系运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包罗高速缓存cache、登录文件log file以及某些软件运行所产生的文件,包罗程序文件(lock file, run file),或者例如MySQL数据库的文件等等
FHS要求/var必须存在的次目录
FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据,因此,在其他次目录层级内,就可以随开发者自行来配置
所有的文件与目录都是由根目录开始的
绝对路经和相对路径
Linux文件与目录管理

根目录的上一层(..)与根目录自己(.)是同一个目录
常见的处理目录指令
PATH
情况变量用于指定一系列目录或位置,体系在其中查找要实行的命令或程序
  1. echo $PATH
  2. /*查看目前的环境变量,目录是有顺序的,每个目录中间使用冒号来隔开*/
  3. PATH="${PATH}:/root"
  4. /*将/root加入到可执行文件搜寻路径PATH中*/
复制代码
文件与目录管理

文件与目录的检视:ls(list)
  1. ls [选项与参数] 文件名或目录名
  2. -a:全部的文件,连同隐藏文件一起列出
  3. -A:全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
  4. -d:仅列出目录本身,而不是列出目录内的文件数据
  5. -f:直接列出结果,而不进行排序(ls默认会以文件名排序)
  6. -F:根据文件、目录等信息,给予附加数据结构
  7.         *:代表可可执行文件
  8.         /:代表目录
  9.         =:代表socket文件
  10.         &#124:代表FIFO文件
  11. -h:将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来
  12. -i:列出inode号码
  13. -l:长数据串行出,包含文件的属性与权限等等数据
  14. -n:列出UID与GID而非使用者与群组的名称
  15. -r:将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小
  16. -R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
  17. -S:以文件大小大小排序,而不是用文件名排序
  18. -t:依时间排序,而不是用文件名
  19. --color=never:不要依据文件特性给予颜色显示
  20. --color=always:显示颜色
  21. --color=auto:让系统自行依据设置来判断是否给予颜色
  22. --full-time:以完整时间模式(包含年、月、日、时、分)输出
  23. --time={atime,ctime} :输出 access 时间或改变权限属性时间(ctime)而非内容变更时间
复制代码
选项可以叠加
复制:cp(copy)
  1. cp [选项] 源文件或目录 目标文件或目录
  2. -a:相当于-dr --preserve=all的意思
  3. -d:若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身
  4. -f:为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次
  5. -i:若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行
  6. -l:进行硬链接(hard link)的链接文件创建,而非复制文件本身
  7. -p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
  8. -r:递回持续复制,用于目录的复制行为
  9. -s:复制成为符号链接文件(symbolic link)
  10. -u:destination比source旧才更新destination,或destination不存在的情况下才复制
  11. --preserve=all:除了-p的权限相关参数外,还加入SELinux的属性, links,xattr等也复制了。如果来源文件有两个以上,则最后一个目的文件一定是目录
复制代码
-r可以复制目录,但文件与目录的权限大概会改变,使用-a则不会
某些必要特别注意的特别权限文件,例如暗码档(/etc/shadow)以及一些配置文件,就不能直接以cp来复制,而必须要加上-a或者是-p等可以完整复制文件权限的选项,另外假如想要复制文件给其他的使用者,也必须要注意到文件的权限,包含读、写、实行以及文件拥有者等等
使用-l及-s都会创建所谓的链接文件(link file),但是这两种链接文件不一样
-l是实体链接(hard link), -s则是符号链接(symbolic link),简单来说,bashrc_slink 是一个“捷径”,这个捷径会链接到bashrc去,所以文件名右侧会有个指向(->)的符号
删除:rm(remove)
  1. rm [选项] 文件或目录
  2. -f:force的意思,忽略不存在的文件,不会出现警告讯息
  3. -i:互动模式,在删除前会询问使用者是否动作
  4. -r:递回删除,最常用在目录的删除,这是非常危险的选项
  5. 可以使用*来代替n个字符
复制代码
移动:mv(move)
  1. mv [选项] 源文件或目录 目标文件或目录
  2. -f:force的意思,如果目标文件已经存在,不会询问而直接覆盖
  3. -i:若目标文件(destination)已经存在时,就会询问是否覆盖
  4. -u:若目标文件已经存在,且源文件比较新,才会更新
  5. mv mvtest mvtest
  6. 可以使用mv来更名
  7. 使用另一个指令rename可以更改大量文件的文件名
复制代码
文件内容查询

管线(|)的意思是:前面的指令所输出的讯息,通过管线交由后续的指令继续使用
  1. cat -n /etc/man_db.conf | head -n 20 |tail -n 10
  2. /*使用-n列出前20行及行号后,交由tail显示后10行*/
复制代码
修改文件时间或创建新文件
每个文件在linux下面都会记载很多的时间参数,有三个主要的变动时间:
默认的情况下,ls表现出来的是该文件的mtime
touch命令可用于修改文件或者目录的时间属性,包罗存取时间和更改时间。若文件不存在,体系会创建一个新的文件
  1. touch [选项] 文件或目录
  2. -a:仅修改access time
  3. -c:仅修改文件的时间,若该文件不存在则不创建新文件
  4. -d:后面可以为修改日期,也可以使用--date="日期或时间"
  5. -m:仅修改mtime
  6. -t:后面可以为修改日期,格式为[YYYYMMDDhhmm]
  7. #touch test
  8. 直接创建该文件
复制代码
文件与目录的默认权限&隐蔽权限&特别权限

  1. #umask
  2. 0022
  3. 指定目前使用者在创建文件或目录时的权限默认值
  4. umask的数字是该默认值需要减掉的权限
  5. 加-s以符号类型显示
  6. #umask -s
  7. u=rwx,g=rx,o=rx
复制代码
更改权限直接在umask后输入数字即可
chattr指令只能在Ext2/Ext3/Ext4的传统文件体系上完整生效,其他文件体系大概无法完整支持该指令
chattr:设置文件隐蔽属性
  1. # chattr [选项] 文件名或目录名
  2. +:增加某一个特殊参数,其他原本存在参数不变
  3. -:移除某一个特殊参数,其他原本存在参数不变
  4. =:将文件的属性设置为指定的参数,并且只有后面接的参数会被设置,其他属性将被移除
  5. 参数:
  6. A:若存取此文件(或目录)时,它的存取时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘(目前建议使用文件系统挂载参数处理这个项目)
  7. a:这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这属性
  8. S:一般文件是非同步写入磁盘的,加上这个属性时,当你进行任何文件的修改,该更动会同步写入磁盘中
  9. s:如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法找回
  10. u:与s相反,如果该文件被删除了,则数据内容其实还存在磁盘中
  11. c:将会自动的将此文件压缩,在读取的时候将会自动解压缩,在储存的时候,将会先进行压缩后再储存(对于大文件似乎有用的)
  12. d:当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被 dump备份
  13. i:不能被删除、改名、设置链接也无法写入或新增数据,对于系统安全性有相当大的帮助,只有root能设置此属性
复制代码
lsattr:表现文件隐蔽属性
  1. -a :隐藏文件的属性也列出
  2. -d :如果是目录,仅列出目录本身的属性而非目录内的文件名
  3. -R :连同子目录的数据也一并列出来
复制代码
文件特别权限
除了rwx读写实行三种权限,另有两种特别权限s和t,这两个权限的意义与体系账号和体系程序相关
当s这个标志出如今文件拥有者的x权限上时,此时就被称为Set UID,简称为SUID的特别权限
SUID
s在群组的x时则为Set UID,SGID可以针对文件或目录来设置
SGID
当一个目录设置了SGID的权限后,将具有如下的功能:
SBIT
Sticky Bit只对目录有用:
特别权限设置
依旧使用chmod改变权限
第一位就是文件特别权限设置位,SUID不能在目录上设置,SBIT不能在文件上设置
  1. #chmod 7666 test; ls -l test <
  2. -rwSrwSrwT 1 root root 0 Jun 16 02:53 tes
  3. 普通权限是6,此处的大写S和T表示的是空
  4. 同样可以使用符号类型表示
  5. SUID为u+s
  6. SGID为g+s
  7. SBIT为o+t
复制代码
file
用于识别文件类型
  1. #file ./adjtime
  2. ./adjtime: ASCII text
复制代码
指令与文件的搜寻

which:在PATH中搜寻指定的命令
  1. which [-a] commond
  2. -a:将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
复制代码
whereis:在一些特定目录中探求文件名
  1. -l:列出whereis会去查询的几个主要目录
  2. -b:只找binary格式的文件
  3. -m:只找在说明文档manual路径下的文件
  4. -s:只找source来源文件
  5. -u:搜寻不在上述三个项目当中的其他特殊文件
复制代码
locate
  1. -i:忽略大小写的差异
  2. -c:不输出文件名,仅计算找到的文件数量
  3. -l:输出几行,输出五行则是-l 5
  4. -S:输出locate所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
  5. -r:后面可接正则表达式的显示方式
复制代码
只需在后面输入文件部分名称就能得到结果
虽然探求数据特别块,但因为locate探求的数据是由已创建的数据库/var/lib/mlocate/里面的数据所搜寻到的,而数据库的创建是在天天实行一次,所以当新创建起来的文件,却还在数据库更新之前搜寻该文件,那么locate将搜寻不到
可以手动更新,直接输入updatedb即可,大概等待数分钟时间
whereis只找体系中某些特定目录下面的文件,locate则是利用数据库来搜寻文件名
find
  1. find [路径] [选项]
  2. /*某个时间段的文件*/
  3. -mtime  n :n 为数字,意义为在n天之前的一天之内被更动过内容的文件
  4. -mtime +n :列出在n天之前(不含n天)被更动过内容的文件文件名
  5. -mtime -n :列出在n天之内(含n天本身)被更动过内容的文件文件名
  6. -newer file :file为一个存在的文件,列出比file还要新的文件文件名
  7. /*属于*的文件*/
  8. -user name :name为使用者帐号名
  9. -group name:name为群组名
  10. -nouser:拥有者不存在/etc/passwd的文件
  11. -nogroup:拥有群组不存在于/etc/group的文件
  12. 当自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这个时候就可以使用-nouser与-nogroup搜寻
  13. /*文件权限和属性*/
  14. -name filename:搜寻文件名称为filename的文件,可以使用*通配符
  15. -size [+-]SIZE:搜寻比SIZE还要大(+)或小(-)的文件
  16.         SIZE的规格有:
  17.         c: 代表Byte
  18.         k: 代表1024B
  19.         要找比50KB还要大的文件,就是#-size +50k
  20. -type TYPE:搜寻文件的类型为TYPE的
  21.         类型主要有:一般文件(f), 设备文件(b, c),目录(d), 链接文件(l), socket (s), FIFO (p)等属性
  22. -perm mode  :搜寻文件权限为mode的文件
  23.         搜寻-rwxr--r-- ,亦即0744的文件,使用-perm -0744
  24.         当一个文件权限为-rwsr-xr-x ,亦即4755时,也会被列出来,因为-rwsr-xr-x的属性已经包括-rwxr--r--的属性
  25. -perm /mode :搜寻文件权限包含任一mode的权限的文件
  26.         搜寻-rwxr-xr-x ,亦即 -perm /755 时
  27.         一个文件属性为-rw-------也会被列出来,因为他有-rw....的属性存在
  28. /*额外操作*/
  29. -exec command :command为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果
  30.         {}代表的是由 find 找到的内容,find的结果会被放置到{}位置中
  31.         从-exec一直到\;是关键字,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是 find 指令内的额外动作
  32.         ; 在bash环境下是有特殊意义的,可以使用反斜线(\)来转义
  33. -print:将结果打印到屏幕上,这个动作是默认动作
复制代码
find本身就会搜寻次目录
假如要找的文件是具有特别属性的,例如 SUID 、文件拥有者、文件大小等等,那么利用locate是没有办法达成搜寻,只能使用find,不过find在探求数据后相当的操硬盘,所以只管不要使用find
磁盘与文件体系管理

磁盘分区完毕后还必要进行格式化,之后操作体系才气够使用这个文件体系。进行格式化是因为每种操作体系所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就必要将分区进行格式化,以成为操作体系能够利用的文件体系格式file system
Linux操作体系Ext文件格式的文件体系通常会将文件权限(rwx)与文件属性(拥有者、群组、时间参数等)这两部份的数据分别存放在不同的区块:
每个inode与block都有编号,每个文件都会占用一个inode ,inode内则有文件数据放置的block号码。假如能够找到文件的inode的话,那么自然就会知道这个文件所放置数据的block号码,当然也就能够读出该文件的现实数据

文件体系先格式化出inode与block的区块,假设某一个文件的属性与权限数据是放置到inode4 号(小方格内),而这个inode记载了文件数据的现实放置点为 2, 7, 13, 15 这四个 block 号码,此时我操作体系就能够据此来排列磁盘的读取次序,可以一次性将四个block内容读出,数据读取就如同图中箭头所指
这种数据存取的方法称为索引式文件体系indexed allocation,U盘使用的文件体系一样平常为FAT格式,该格式的文件体系没有inode存在,所以FAT无法将这个文件的所有block在一开始就读取出来。每个block号码都记载在前一个block当中

磁盘重组的缘故原由就是文件写入的block太过于离散了,此时文件读取的性能将会变的很差所致。这个时候可以通过磁盘重组将同一个文件所属的blocks汇整在一起
每个文件都会占用一个inode,且可依据文件内容的大小来分配多个block给该文件使用
目录记载文件名,文件记载数据内容
目录与文件在文件体系中如何记载数据:
非同步处理:当体系载入一个文件到内存后,假如该文件没有被更动过,则在内存区段的文件数据会被设置为clean,假如内存中的文件数据被更改过,此时该内存中的数据会被设置为Dirty。此时所有的动作都还在内存中实行,并没有写入到磁盘中。体系会不定时的将内存中设置为Dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。以此来进步编辑大型文件频繁写入/读取磁盘的服从标题
Linux体系的文件体系与内存有很大关系:
挂载点的意义
每个filesystem都有独立的 inode / block / superblock 等信息,这个文件体系要能够链接到目录树才气被使用。将文件体系与目录树结合的动作称为挂载
挂载点一定是目录,该目录为进入该文件体系的入口。因此并不是你有任何文件体系都能使用,必须要挂载到目录树的某个目录后,才气够使用该文件体系
文件体系的简单操作

Linux的链接文件有两种:
符号链接(软链接):类似Windows的捷径功能的文件,可以快速的链接到目的文件或目录
实体链接(硬链接):通过文件体系的inode链接来产生新文件名,而不是产生新文件
可以通过1或2的目录之inode指定的block找到两个不同的文件名,而不管使用哪个文件名均可以指到real那个inode去读取到终极数据,(就像是创建C++里的引用)
hard link不能跨file system,也不能link目录
磁盘的分区、格式化、检验与挂载

lsblk:列出体系上所有磁盘
  1. #lsblk [options] device
  2. -d:仅列出磁盘本身,不会列出该磁盘的分区数据
  3. -f:同时列出该磁盘内的文件系统名称
  4. -i:使用ASCII的线段输出,不使用复杂的编码(某些环境下很有用)
  5. -m:同时输出该设备在/dev下面的权限数据(rwx的数据)
  6. -p:列出该设备的完整文件名,而不是仅列出最后的名字
  7. -t:列出该磁盘设备的详细数据,包括磁盘队列机制、预读写的数据量大小等
复制代码
默认输出信息:
blkid:列出设备的UUID等参数
universally unique identifier是全域单一识别码,Linux会将体系内所有的设备都给予一个独一无二的识别码,这个识别码就可以拿来作为挂载或者是使用这个设备/文件体系
parted:列出磁盘的分区表类型与分区信息
文件体系挂载与卸载
  1. #mount -t 文件系统类型 -o 选项 设备文件名 挂载点
  2. -o:后面可以接一些挂载时额外加上的参数,比方说帐号、密码、读写权限等:
  3.         async, sync:此文件系统是否使用同步写入(sync)或非同步(async)的内存机制,默认为async
  4.         atime,noatime: 是否修订文件的读取时间(atime),为了性能某些时刻可使用noatime
  5.         ro, rw:挂载文件系统成为只读(ro)或可读写(rw)
  6.         auto, noauto:是否允许此filesystem被以mount -a自动挂载(auto)         
  7.         dev, nodev:是否允许此filesystem上可创建设备文件,dev为可允许     
  8.         suid, nosuid:是否允许此filesystem含有suid/sgid的文件格式       exec, noexec:是否允许此filesystem上拥有可执行binary文件         user, nouser:是否允许此filesystem让任何使用者执行mount,一般来说,mount仅有root可以进行,但下达user参数,则可让一般user也能够对此partition进行mount
  9.         defaults:默认值为:rw, suid, dev, exec, auto, nouser, and async
  10.         remount:重新挂载,在系统出错或重新更新参数时很有用
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4