Linux基础
在Linux中,挂载点指的是一个目录,用于将一个文件体系连接到Linux的目录布局中。当在Linux中添加一个新的硬盘分区或其他存储设备时,必要将它挂载到一个已经存在的目录上,这个目录就是挂载点
设备类型
- 标准分区
- LVM:可以弹性增加/削减文件体系容量的设备设置
- LVM简单配置:使用多少容量才分配多少磁盘容量
文件类型
- ext2/ext3/ext4:Linux早期适用的文件体系类型,ext3/ext4文件体系多了日志的记载, 对于体系的复原比力快速,近来比力少使用ext4
- swap:交换分区,就是把磁盘充当为内存使用,swap不会使用到目录树的挂载,因此无需指定挂载点
- BIOS Boot:是一个特别的分区,它不包含文件体系,只用于存储引导加载程序所需的代码。它的作用是在使用BIOS引导方式的体系中,为引导加载程序提供一个额外的空间
- xfs:这个是目前CentOS默认的文件体系,对于 大容量的磁盘管理非常好,而且格式化的时候速度相当快
- vfat:同时被Linux与Windows所支持的文件体系类型。假如你的主机硬盘内同时存在 Windows与Linux操作体系,为了数据的交换, 确实可以创建一个vfat的文件体系
在Linux中,只要文件名是以小数点开头就是隐蔽文件
Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式是使用:[Ctrl] + [Alt] + [F1] ~ [F6]的组合按钮
体系会将[F1] ~ [F6]命名为tty1 ~ tty6的操作接口情况,假如安装的是图形界面,那么tty1就是图形接口界面
exit是登出Linux,但不是关机,,Linux本身已经有相当多的工作在进行,登陆仅是其中的一个工作, 所以当离开时,这次这个登陆的工作就停止了,但此时Linux其他的工作还是继续在进行
笔墨模式紧张的三个键
- [Tab]具有命令补全与文件补齐的功能
- 在一串指令的第一个字的后面,则为命令补全
- 在一串指令的第二个字以后时,则为文件补齐
- [Ctrl]+c是停止目前程序
- [Ctrl]+d是键盘输入竣事,和Windows体系下的[Ctrl]+z相似
- [shift]+[PageUP] || [Page Down]是前后翻页
关机
上述命令都是调用systemmctl指令,目前体系中所有服务的管理都是该指令,是一个非常复杂的指令,有关关机的语法如下:
<img alt="image-20240110164908332" loading="lazy">
文件权限与权限配置
使用su切换到root,使用ls -al指令
- ls是list的意思,表现文件的文件名与相关属性
- -al表示列出所有的文件详细的权限与属性,隐蔽文件也会表现
- -rw-r--r--. 1 xwj xwj 193 4月 1 2020 .bash_profile
复制代码
- 第1个字符代表:
- [ d ]是目录
- [ - ]是文件
- [ l ]是链接文件link file
- [ b ]是设备文件里面的可供储存的接口设备(可随机存取设备)
- [ c ]是设备文件里面的串行接口设备,例如键盘、鼠标(一次性读取设备)
- 接下来的字符以3个为一组,且均为rwx的组合
- r read:可读取此一文件的现实内容,如读取文本文件的笔墨内容等
- w write:可以编辑、新增或者是修改该文件的内容(但不含删除该文件)
- x execute:该文件具有可以被体系实行的权限
权限的位置不会改变,假如没有权限就是-
- 第1组为文件拥有者可具备的权限User
- 第2组为加入此群组账号的权限Group
- 第3组为非本人且没有加入本群组账号的权限Others
- 1表示有多少文件名硬链接到此文件,每个文件至少有一个硬链接,通常这个硬链接就是文件名本身
硬链接是一个特别的文件体系对象,它指向同一个索引节点(inode)的不同文件名,硬链接不能跨文件体系,且不能链接到目录
每个文件都有一个与之关联的索引节点,其中存储了文件的元数据(如权限、大小、修改时间等)和数据块指针
- 第1个xwj表示这个文件或目录的拥有者账号
- 第2个xwj表示这个文件的所属群组
- 193为文件的大小,单元为bytes
- 4月 1 2020为文件最近修改日期
内容分别为月 日 时间,假如这个文件被修改的时间距离如今太久,那么时间部分仅表现年份
假如想要表现完整的时间格式,ls -l --full-time就能够表现出完整的时间格式
- .bash_profile为文件名
目录与文件的权限意义并不相同,这是因为目录与文件所记载的数据内容不相同
文件是存放现实数据的所在,目录主要的内容在记载文件名清单
针对目录时:
- r read contents in directory:表示具有读取目录布局清单的权限,所以当你具有读取一个目录的权限时,表示你可以查询该目录下的文件名数据。就可以利用 ls 这个指令将该目录的内容列表表现出来
- w modify contents of directory:它表示你具有异动该目录布局清单的权限,也就是下面这些权限:
- 创建新的文件与目录
- 删除已经存在的文件与目录(不论该文件的权限为何)
- 将已存在的文件或目录进行更名
- 搬移该目录内的文件、目录位置。总之,目录的w权限就与该目录下面的文件名异动有关
- x access directory:目录不可以被实行,目录的x代表的是使用者能否进入该目录成为工作目录的用途,所谓的工作目录work directory就是你目前所在的目录,当你登陆Linux时,你所在的主文件夹就是你当下的工作目录
文件是一堆文件数据夹,目录是一堆抽屉,可以将数据夹分类放置到不同的抽屉去,因此抽屉最大的目的是拿出/放入数据夹
仅拥有r权限,没有x权限是无法实行文件或进入目录的
有x就可以实行了,r是可选的,假如没有r,按Tab无法自动补齐文件名
改变文件属性与权限
- chgrp :改变文件所属群组
change group,被改变的群组名称必须要在/etc/group文件内存在,否则就会表现错误选项包罗:
- -R:递归地更改文件和目录的所属组,包罗子目录和文件
- --reference=参考文件或目录:将文件或目录的所属组设置为参考文件或目录的所属组
- -c 或 --changes:结果类似 -v 参数,但仅回显更改的部分
- -f 或 --quiet 或 --silent:不表现错误信息
- -h 或 --no-dereference:只对符号连接的文件作修改,而不更动其他任何相关文件
- -v 或 --verbose:表现指令实行过程
- --dereference:作用于符号链接的指向,而不是符号链接本身
- chown :改变文件拥有者
change owner,在/etc/passwd这个文件中有纪录的使用者名称才气改变chown可以只更改拥有者,也可以同时修改拥有者和群组
- chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
- 数字类型改变文件权限
r:4,w:2,x:1 - 符号类型改变文件权限
u:user,g:group,o:others,a:all- chmod u=rwx,go=rx .bashrc
- 也可以使用+来加上某个权限
- a+r
- 也可以使用-来 减去某个权限
- a-r
复制代码
文件种类与扩展名
任何设备在Linux下面都是文件
- 平凡文件regular file
最基本的一类文件,通常访问的文件,由ls -la表现出来的属性中,第一个属性为-,根据文件内容可以分为:
- 纯文本文件ASCLL
- 二进制文件binary
- 数据格式文件data
有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件
- 目录directory,第一个属性为d
- 链接文件link
类似Windows的快捷方式,第一个属性为I
- 设备与设备文件device
与体系外设相关的一些文件,通常都集中在/dev这个目录之下,通常分为:
- 区块block设备文件
就是存储数据以供体系存取的接口设备,如硬盘和软盘,第一个属性为b
- 字符character设备文件
串行端口的接口设备,如键盘、鼠标,第一个属性为c
- 数据接口文件(套接字)sockets
通常用在网络数据连接,可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信。第一个属性为s,最常在 /var/run目录中看到这种文件类型
- 数据输送档(管道)FIFO
- FIFO也是一种特别的文件类型,它的主要目的是办理多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写,第一个属性为p
扩展名
Linux文件没有所谓的扩展名,一个Linux能不能实行与它的权限有关,只要权限具有x,这个文件就可以被实行,不过,可以被实行不代表可以实行成功
通常还是会以适当的扩展名来表示该文件是什么种类,以下是常见的扩展名:
- .tar:用于表示一个tar归档文件,通常用于打包多个文件和目录
- .gz:用于表示一个gzip压缩文件,使用gzip压缩算法进行压缩
- .bz2:用于表示一个bzip2压缩文件,使用bzip2压缩算法进行压缩
- .tar.gz或.tgz:用于表示一个tar归档文件,同时使用gzip压缩算法进行压缩
- .tar.bz2:用于表示一个tar归档文件,同时使用bzip2压缩算法进行压缩
- .rpm:用于表示一个RPM软件包文件,通常用于Red Hat、Fedora等发行版中
- .deb:用于表示一个Debian软件包文件,通常用于Debian、Ubuntu等发行版中
- .so:Linux体系动态链接库文件,主要作用是在运行时提供运行情况
- .sh:脚本或批处理文件,是一系列shell命令的指令集,工作时sh文件会一行行实行脚本里的指令
Linux体系上的文件名只是让你了解该文件大概的用途而已,真正的实行与否仍然必要权限的规范才行
在设置Linux下面的文件名称时,最好可以避免一些特别字符比力好,例如下面这些:
? > < ; & ! [ ] | \ ' " () { }
因为这些符号在命令行下,是有特别意义的
同时由于指令下达当中,常常会使用到 -option 之类的选项,所以你最好也避免将文件文件名的开头以 - 或 + 来命名
Linux目录配置
Filesystem Hierarchy Standard (FHS)标准的重点在于规范每个特定的目录下应该要放置什么样子的数据,避免每个人使用自己的想法来配置文件放置的目录,由此造成很多管理上的困扰
FHS根据文件体系使用的频繁程度和是否答应使用者随意变更两点将目录定义为4种交互作用的形态:
- 可分享的:可以分享给其他体系挂载使用的目录,所以包罗可实行文件与使用者的邮件等数据,是能够分享给网络上其他主机挂载用的目录
- 不可分享的:自己机器上面运行的设备文件或者是与程序有关的socket文件等,由于仅与自身机器有关,当然就不适合分享给其他主机
- 稳定的:有些数据是不会经常变动的,跟随着distribution而稳定动。例如函数库、文件说明文档、体系管理员所管理的主机服务配置文件等等
- 可变动的:经常改变的数据,例如登录文件、一样平常用户可自行收受的消息群组等
究竟上FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面这三个目录的定义:
- / (root, 根目录):与开机体系有关
- /usr (unix software resource):与软件安装/实行有关
- /var (variable):与体系运行过程有关
FHS要求根目录( / )必须存在的次目录:
即使没有实体目录,FHS也希望至少有链接文件存在
- /bin
放置在单人维护模式下还能够被操作的指令。在/bin下面的指令可以被root与一样平常帐号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令
- /boot
要在放置开机会使用到的文件,包罗Linux焦点文件以及开机菜单与开机所需配置文件等等
- /dev
任何设备与周边设备都是以文件的型态存在于这个目录当中的。只要通过存取这个目录下面的某个文件,就等于存取某个设备
- /etc
体系主要的配置文件几乎都放置在这个目录内,例如职员的帐号暗码档、各种服务的启始档等等
一样平常来说,这个目录下的各文件属性是可以让一样平常使用者查阅的,但是只有root有权力修改。FHS发起不要放置可可实行文件(binary)在这个目录中
- /lib
放置在开机时会用到的函数库,以及在/bin或/sbin下面的指令会调用的函数库
某些指令必须要有这些函数库才气够顺利完成程序的实行
- /media
可移除的设备,包罗软盘、光盘、DVD等等设备都暂时挂载于此
- /mnt
假如想要暂时挂载某些额外的设备,一样平常发起放置到这个目录中
- /opt
存放第三方应用程序或软件包
- /run
用于存储在体系运行时天生的数据。通常包含一些暂时文件和程序运行时所需的信息
- /srv
一些网络服务启动之后,这些服务所必要取用的数据目录。常见的服务例如WWW, FTP等等
- /tmp
让一样平常使用者或者是正在实行的程序暂时放置文件的地方,这个目录是任何人都能够存取的
FHS发起根目录( / )可以存在的次目录:
- /home
存放用户的主目录,每个用户在 /home 目录下都有一个以其用户名命名的子目录,用于存储该用户的个人文件和配置信息
- /lib
用来存放与 /lib 不同的格式的二进制函数库
- /root
root的主文件夹,之所以放在这里,是因为假如进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的主文件夹,所以我们会希望root的主文件夹与根目录放置在同一个分区中
FHS针对根目录所定义的标准就仅有上面几种,下面是几个是在Linux当中非常紧张的目录:
- /lost+found
这个目录是使用标准的ext2/ext3/ext4文件体系格式才会产生的一个目录,当文件体系发生瓦解或不测断电时,大概会导致一些文件被损坏或丢失,这些文件就会被放置在该目录下
- /proc
是一个虚拟文件体系,它放置的数据都是在内存中,例如体系焦点、行程信息(process)、周边设备的状态及网络状态等等
- /sys
也是虚拟文件体系,主要也是记载焦点与体系硬件信息较相关的信息。包罗目前已载入的焦点模块与焦点侦测到的硬件设备信息等等
/proc 主要用于获取体系和进程信息,而 /sys 主要用于访问设备和驱动程序的信息和配置
/usr
所有体系默认的软件(distribution发布者提供的软件)都会放置到/usr下面,因此这个目录有点类似Windows 体系的“C:\Windows\ (当中的一部份) + C:\Program files\”这两个目录的综合体,体系刚安装完毕时,这个目录会占用最多的硬盘容量
放置的数据属于可分享的与不可变动的(shareable,static),假如通过网络进行分区的挂载,那么/usr确实可以分享给区域网络内的其他主机来使用
usr是Unix Software Resource的缩写,也就是Unix操作体系软件资源,而不是使用者的数据
FHS发起所有软件开发者,应该将他们的数据公道的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录
FHS要求/usr必须存在的次目录:
- /usr/bin/
所有一样平常用户能够使用的指令都放在这里,CentOS 7已经将全部的使用者指令放置于此,而使用链接文件的方式将 /bin 链接至此,也就是说, /usr/bin 与 /bin 是一模一样了,另外FHS要求在此目录下不应该有子目录
- /usr/lib/
与/lib功能相同,所以/lib就是链接到此目录中的
- /usr/local/
体系管理员在本机自行安装自己下载的软件,发起安装到此目录,这样会比力便于管理
- /usr/sbin/
非体系正常运行所必要的体系指令。最常见的就是某些网络服务器软件的服务指令,基本功能与 /sbin 也差不多,因此目前 /sbin 就是链接到此目录中的
- /usr/share/
主要放置只读架构的数据文件,也包罗共享文件,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据
FHS发起/usr可以存在的次目录:
- /usr/games/
放置与游戏比力相关的数据
- /usr/include/
通常用于存放标准C库的头文件
- /usr/libexec/
通常用于存放那些不被一样平常用户直接实行的程序或脚本
- /usr/lib/
与 /lib/功能相同,因此目前 /lib 就是链接到此目录中
- /usr/src/
一样平常源代码发起放置到这里,src有source的意思。至于焦点源代码则发起放置到/usr/src/linux/目录下
/var
/usr是安装时会占用较大硬盘容量的目录,/var是在体系运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包罗高速缓存cache、登录文件log file以及某些软件运行所产生的文件,包罗程序文件(lock file, run file),或者例如MySQL数据库的文件等等
FHS要求/var必须存在的次目录:
- /var/cache/
通常用于存放应用程序或服务在运行过程中缓存的文件
- /var/lib/
程序本身实行的过程中必要使用到的数据文件放置的目录,在此目录下各自的软件应该要有各自的目录
- /var/lock/
某些设备或者是文件资源同时只能被一个应用程序所使用,假如同时有两个程序使用该设备时,就大概产生一些错误的状态,因此就得要将该设备上锁,以确保该设备只会给单一软件所使用
- /var/log/
用于存放体系日志文件。这些日志文件记载了体系运行期间的各种事件、警告、错误等信息,以便管理员进行故障排除和监控,登录文件也放在这里
- /var/mail/
放置个人电子邮件信箱的目录,这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件
- /var/run/
某些程序或者是服务启动后,会将他们的PID放置在这个目录,与 /run 相同,这个目录链接到 /run
- /var/spool/
通常用于存放待处理的使命和数据。这些使命和数据通常是由体系或应用程序在背景异步处理,因此暂时存放在该目录下
FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据,因此,在其他次目录层级内,就可以随开发者自行来配置
所有的文件与目录都是由根目录开始的
- 目录树的启始点为根目录(/, root)
- 每一个目录不止能使用当地端的 partition 的文件体系,也可以使用网络上的 filesystem
- 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的
绝对路经和相对路径
- 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc
- 相对路径:相对于当前路径的文件名写法。例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
- . :代表当前的目录,也可以使用./来表示
- .. :代表上一层目录,也可以../来代表
Linux文件与目录管理
- . :当前目录
- ..:上一层目录
- - :前一个工作目录
- ~ :“目前使用者身份”所在的主文件夹
~account代表account这个使用者的主文件夹(account是帐号名称)
根目录的上一层(..)与根目录自己(.)是同一个目录
常见的处理目录指令
- cd:变换目录
没有加上任何路径和单独一个~一样,就是回到自己主文件夹
- pwd:表现目前的目录
加上-P选项:表现确定的路径,而不是链接路径,注意是大写
- mkdir:创建一个新的目录
默认情况下目录必要一层一层的创建,不能一次性输入多层
加上-p选项:帮助创建多层目录,假如该目录原来就已经存在时,体系也不会表现错误讯息
加上-m选项:设置文件的权限
- rmdir:删除一个空的目录
加上-p选项:将上层空的目录一并删除
PATH
情况变量用于指定一系列目录或位置,体系在其中查找要实行的命令或程序- echo $PATH
- /*查看目前的环境变量,目录是有顺序的,每个目录中间使用冒号来隔开*/
- PATH="${PATH}:/root"
- /*将/root加入到可执行文件搜寻路径PATH中*/
复制代码
- 不同身份使用者默认的PATH不同,默认能够随意实行的指令也不同
- 使用绝对路径或相对路径直接指定某个指令的文件名来实行,会比搜寻PATH更正确
- 本目录(.)最好不要放到PATH当中
文件与目录管理
文件与目录的检视:ls(list)- ls [选项与参数] 文件名或目录名
- -a:全部的文件,连同隐藏文件一起列出
- -A:全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
- -d:仅列出目录本身,而不是列出目录内的文件数据
- -f:直接列出结果,而不进行排序(ls默认会以文件名排序)
- -F:根据文件、目录等信息,给予附加数据结构
- *:代表可可执行文件
- /:代表目录
- =:代表socket文件
- |:代表FIFO文件
- -h:将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来
- -i:列出inode号码
- -l:长数据串行出,包含文件的属性与权限等等数据
- -n:列出UID与GID而非使用者与群组的名称
- -r:将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小
- -R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
- -S:以文件大小大小排序,而不是用文件名排序
- -t:依时间排序,而不是用文件名
- --color=never:不要依据文件特性给予颜色显示
- --color=always:显示颜色
- --color=auto:让系统自行依据设置来判断是否给予颜色
- --full-time:以完整时间模式(包含年、月、日、时、分)输出
- --time={atime,ctime} :输出 access 时间或改变权限属性时间(ctime)而非内容变更时间
复制代码 选项可以叠加
复制:cp(copy)- cp [选项] 源文件或目录 目标文件或目录
- -a:相当于-dr --preserve=all的意思
- -d:若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身
- -f:为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次
- -i:若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行
- -l:进行硬链接(hard link)的链接文件创建,而非复制文件本身
- -p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
- -r:递回持续复制,用于目录的复制行为
- -s:复制成为符号链接文件(symbolic link)
- -u:destination比source旧才更新destination,或destination不存在的情况下才复制
- --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)- rm [选项] 文件或目录
- -f:force的意思,忽略不存在的文件,不会出现警告讯息
- -i:互动模式,在删除前会询问使用者是否动作
- -r:递回删除,最常用在目录的删除,这是非常危险的选项
- 可以使用*来代替n个字符
复制代码 移动:mv(move)- mv [选项] 源文件或目录 目标文件或目录
- -f:force的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i:若目标文件(destination)已经存在时,就会询问是否覆盖
- -u:若目标文件已经存在,且源文件比较新,才会更新
- mv mvtest mvtest
- 可以使用mv来更名
- 使用另一个指令rename可以更改大量文件的文件名
复制代码 文件内容查询
- cat(concatenate):由第一行开始表现文件内容
- cat [选项] 文件名
- -A:相当于 -vET 的整合选项,可列出一些特殊字符而不是空白
- -b:列出行号,空白行不标行号
- -n:打印出行号,空白行也会有行号
- -E:将结尾的断行字符 $ 显示出来
- -T:将 [tab] 按键以 ^I 显示出来
- -v:列出一些看不出来的特殊字符
复制代码 - tac:从最后一行开始表现
- nl:添加行号打印
- nl [选项] 文件名
- b:指定行号指定的方式,主要有两种:
- -b a:空行同样列出行号
- -b t:空行不列出行号(默认值)
- -n:列出行号表示的方法,主要有三种:
- -n ln:行号在屏幕的最左方显示
- -n rn:行号在自己字段的最右方显示,且不加0
- -n rz:行号在自己字段的最右方显示,且加0
- -w:行号字段的占用的字符数
复制代码 - more:一页一页的表现文件内容
- more [选项] 文件名
- +:从指定行开始输出
- -:指定每屏显示的行数
- +n:显示文件中的第n行之后的内容
- -n:显示文件中的前n行内容
- 最后一行会显示出目前显示的百分比,而且还可以在最后一行输入一些有用的指令:
- space:代表向下翻一页
- Enter :代表向下翻一行
- /字符串:代表在这个显示的内容当中,向下搜寻这个字符串
- :f:立刻显示出文件名以及目前显示的行数
- q:离开more
- b或[ctrl]-b :代表往回翻页,只对文件有用
复制代码 - less与more类似,但是它可以往前翻页
- less [选项] [文件名]
- less更加灵活,有更多的指令:
- space:向下翻动一页
- pagedown:向下翻动一页
- pageup:向上翻动一页
- /字符串:向下搜寻字符串
- ?字符串:向上搜寻字符串
- n:重复上一个搜寻
- N:反向的重复上一个搜寻
- g:跳到文件开头
- G:跳到文件末尾
- q:离开less
复制代码 - head:表现文件前几行
- -n 100
- /*显示前100行*/
- -n -100
- /*最后100行不会显示*/
复制代码 - tail:表现文件后几行
- -n 20
- /*显示最后20行*/
- -n 20
- /*显示20行以后所有数据*/
- -f:在查看文件内容时实时追踪文件的变化,在文件更新时实时刷新输出,按下[ctrl]-c才会结束tail的追踪
复制代码 - od:以不同的格式表现文件内容
- -t:后面可以接各种类型的输出:
- a:默认的字符来输出
- c:使用ASCII字符来输出
- d[size]:利用十进制(decimal)来输出数据,每个整数占用size Bytes
- f[size]:利用浮点数值(floating)来输出数据,每个数占用 size Bytes
- o[size]:利用八进位(octal)来输出数据,每个整数占用size Bytes
- x[size]:利用十六进制(hexadecimal)来输出数据,每个整数占用size Bytes
复制代码 管线(|)的意思是:前面的指令所输出的讯息,通过管线交由后续的指令继续使用- cat -n /etc/man_db.conf | head -n 20 |tail -n 10
- /*使用-n列出前20行及行号后,交由tail显示后10行*/
复制代码 修改文件时间或创建新文件
每个文件在linux下面都会记载很多的时间参数,有三个主要的变动时间:
- modification time (mtime):当该文件的内容数据变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限
- status time (ctime):当该文件的状态(status)改变时,就会更新这个时间,权限与属性被更改都会更新这个时间
- access time (atime):当该文件的内容被取时,就会更新这个读取时间(access),使用cat去读取 /etc/man_db.conf ,就会更新该文件的atime
默认的情况下,ls表现出来的是该文件的mtime
touch命令可用于修改文件或者目录的时间属性,包罗存取时间和更改时间。若文件不存在,体系会创建一个新的文件- touch [选项] 文件或目录
- -a:仅修改access time
- -c:仅修改文件的时间,若该文件不存在则不创建新文件
- -d:后面可以为修改日期,也可以使用--date="日期或时间"
- -m:仅修改mtime
- -t:后面可以为修改日期,格式为[YYYYMMDDhhmm]
- #touch test
- 直接创建该文件
复制代码 文件与目录的默认权限&隐蔽权限&特别权限
- 创建文件默认权限为-rw-rw-rw-
- 创建目录默认权限为drwxrwxrwx
- #umask
- 0022
- 指定目前使用者在创建文件或目录时的权限默认值
- umask的数字是该默认值需要减掉的权限
- 加-s以符号类型显示
- #umask -s
- u=rwx,g=rx,o=rx
复制代码 更改权限直接在umask后输入数字即可
chattr指令只能在Ext2/Ext3/Ext4的传统文件体系上完整生效,其他文件体系大概无法完整支持该指令
chattr:设置文件隐蔽属性- # chattr [选项] 文件名或目录名
- +:增加某一个特殊参数,其他原本存在参数不变
- -:移除某一个特殊参数,其他原本存在参数不变
- =:将文件的属性设置为指定的参数,并且只有后面接的参数会被设置,其他属性将被移除
- 参数:
- A:若存取此文件(或目录)时,它的存取时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘(目前建议使用文件系统挂载参数处理这个项目)
- a:这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这属性
- S:一般文件是非同步写入磁盘的,加上这个属性时,当你进行任何文件的修改,该更动会同步写入磁盘中
- s:如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法找回
- u:与s相反,如果该文件被删除了,则数据内容其实还存在磁盘中
- c:将会自动的将此文件压缩,在读取的时候将会自动解压缩,在储存的时候,将会先进行压缩后再储存(对于大文件似乎有用的)
- d:当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被 dump备份
- i:不能被删除、改名、设置链接也无法写入或新增数据,对于系统安全性有相当大的帮助,只有root能设置此属性
复制代码 lsattr:表现文件隐蔽属性- -a :隐藏文件的属性也列出
- -d :如果是目录,仅列出目录本身的属性而非目录内的文件名
- -R :连同子目录的数据也一并列出来
复制代码 文件特别权限
除了rwx读写实行三种权限,另有两种特别权限s和t,这两个权限的意义与体系账号和体系程序相关
当s这个标志出如今文件拥有者的x权限上时,此时就被称为Set UID,简称为SUID的特别权限
SUID:
- 仅对二进制程序有用
- 实行者对于该程序必要具有x的可实行权限
- 实行者在实行该程序的过程中将具有该程序拥有者的权限
s在群组的x时则为Set UID,SGID可以针对文件或目录来设置
SGID:
- SGID对二进制程序有用
- 程序实行者对于该程序来说,需具备x的权限
- 实行者在实行的过程中将会获得该程序群组的支持
当一个目录设置了SGID的权限后,将具有如下的功能:
- 使用者若对于此目录具有r与x的权限时,该使用者能够进入此目录
- 使用者在此目录下的有用群组将会变成该目录的群组
用途:若使用者在此目录下具有w的权限,则使用者所创建的新文件的群组与此目录的群组相同
SBIT:
Sticky Bit只对目录有用:
- 当使用者对于此目录具有w, x权限,亦即具有写入的权限
- 当使用者在该目录下创建文件或目录时,仅有自己与root才有权力删除该文件
特别权限设置
依旧使用chmod改变权限
第一位就是文件特别权限设置位,SUID不能在目录上设置,SBIT不能在文件上设置- #chmod 7666 test; ls -l test <
- -rwSrwSrwT 1 root root 0 Jun 16 02:53 tes
- 普通权限是6,此处的大写S和T表示的是空
- 同样可以使用符号类型表示
- SUID为u+s
- SGID为g+s
- SBIT为o+t
复制代码 file
用于识别文件类型- #file ./adjtime
- ./adjtime: ASCII text
复制代码 指令与文件的搜寻
which:在PATH中搜寻指定的命令- which [-a] commond
- -a:将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
复制代码 whereis:在一些特定目录中探求文件名- -l:列出whereis会去查询的几个主要目录
- -b:只找binary格式的文件
- -m:只找在说明文档manual路径下的文件
- -s:只找source来源文件
- -u:搜寻不在上述三个项目当中的其他特殊文件
复制代码 locate- -i:忽略大小写的差异
- -c:不输出文件名,仅计算找到的文件数量
- -l:输出几行,输出五行则是-l 5
- -S:输出locate所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
- -r:后面可接正则表达式的显示方式
复制代码 只需在后面输入文件部分名称就能得到结果
虽然探求数据特别块,但因为locate探求的数据是由已创建的数据库/var/lib/mlocate/里面的数据所搜寻到的,而数据库的创建是在天天实行一次,所以当新创建起来的文件,却还在数据库更新之前搜寻该文件,那么locate将搜寻不到
可以手动更新,直接输入updatedb即可,大概等待数分钟时间
whereis只找体系中某些特定目录下面的文件,locate则是利用数据库来搜寻文件名
find- find [路径] [选项]
- /*某个时间段的文件*/
- -mtime n :n 为数字,意义为在n天之前的一天之内被更动过内容的文件
- -mtime +n :列出在n天之前(不含n天)被更动过内容的文件文件名
- -mtime -n :列出在n天之内(含n天本身)被更动过内容的文件文件名
- -newer file :file为一个存在的文件,列出比file还要新的文件文件名
- /*属于*的文件*/
- -user name :name为使用者帐号名
- -group name:name为群组名
- -nouser:拥有者不存在/etc/passwd的文件
- -nogroup:拥有群组不存在于/etc/group的文件
- 当自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这个时候就可以使用-nouser与-nogroup搜寻
- /*文件权限和属性*/
- -name filename:搜寻文件名称为filename的文件,可以使用*通配符
- -size [+-]SIZE:搜寻比SIZE还要大(+)或小(-)的文件
- SIZE的规格有:
- c: 代表Byte
- k: 代表1024B
- 要找比50KB还要大的文件,就是#-size +50k
- -type TYPE:搜寻文件的类型为TYPE的
- 类型主要有:一般文件(f), 设备文件(b, c),目录(d), 链接文件(l), socket (s), FIFO (p)等属性
- -perm mode :搜寻文件权限为mode的文件
- 搜寻-rwxr--r-- ,亦即0744的文件,使用-perm -0744
- 当一个文件权限为-rwsr-xr-x ,亦即4755时,也会被列出来,因为-rwsr-xr-x的属性已经包括-rwxr--r--的属性
- -perm /mode :搜寻文件权限包含任一mode的权限的文件
- 搜寻-rwxr-xr-x ,亦即 -perm /755 时
- 一个文件属性为-rw-------也会被列出来,因为他有-rw....的属性存在
- /*额外操作*/
- -exec command :command为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果
- {}代表的是由 find 找到的内容,find的结果会被放置到{}位置中
- 从-exec一直到\;是关键字,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是 find 指令内的额外动作
- ; 在bash环境下是有特殊意义的,可以使用反斜线(\)来转义
- -print:将结果打印到屏幕上,这个动作是默认动作
复制代码 find本身就会搜寻次目录
假如要找的文件是具有特别属性的,例如 SUID 、文件拥有者、文件大小等等,那么利用locate是没有办法达成搜寻,只能使用find,不过find在探求数据后相当的操硬盘,所以只管不要使用find
磁盘与文件体系管理
磁盘分区完毕后还必要进行格式化,之后操作体系才气够使用这个文件体系。进行格式化是因为每种操作体系所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就必要将分区进行格式化,以成为操作体系能够利用的文件体系格式file system
Linux操作体系Ext文件格式的文件体系通常会将文件权限(rwx)与文件属性(拥有者、群组、时间参数等)这两部份的数据分别存放在不同的区块:
- 权限与属性放置到inode中
- inode:记载文件的属性,一个文件占用一个inode,同时记载此文件的数据所在的block号码
- 现实数据则放置到data block区块中
- block:现实记载文件的内容,若文件太大时,会占用多个block
- 另有一个超级区块superblock会记载整个文件体系的整体信息,包罗inode与block的总量、使用量、剩余量等
- superblock:记载文件体系的整体信息,包罗inode/block的总量、使用量、剩余量,以及文件体系的格式与相关信息等
每个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给该文件使用
目录记载文件名,文件记载数据内容
目录与文件在文件体系中如何记载数据:
- 目录
在Linux下的文件体系创建一个目录时,文件体系会分配一个inode 与至少一块block给该目录。inode记载该目录的相关权限与属性,并记载分配到的那块block号码;而block则是记载在这个目录下的文件名与该文件名占用的inode号码数据
- 文件
在Linux下的ext2创建一个一样平常文件时,ext2会分配一个inode和相对于该文件大小的block数量给该文件。假设有一个block为4 KBytes ,而要创建一个100KBytes的文件,那么Linux将分配一个inode与25 个block来储存该文件
- 目录树读取
inode本身并不记载文件名,文件名的记载是在目录的block当中,当要读取某个文件时,就必会颠末目录的inode与block,然后找到那个待读取文件的inode号码,终极读到正确的文件的block内的数据。由于目录树是由根目录开始读起,因此体系通过挂载的信息可以找到挂载点的inode号码,此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层的往下读到正确的文件名
非同步处理:当体系载入一个文件到内存后,假如该文件没有被更动过,则在内存区段的文件数据会被设置为clean,假如内存中的文件数据被更改过,此时该内存中的数据会被设置为Dirty。此时所有的动作都还在内存中实行,并没有写入到磁盘中。体系会不定时的将内存中设置为Dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。以此来进步编辑大型文件频繁写入/读取磁盘的服从标题
Linux体系的文件体系与内存有很大关系:
- 体系会将常用的文件数据放置到内存的缓冲区,以加速文件体系的读/写
- 承上,因此Linux的实体内存最后都会被用光,这是正常的情况,可加速体系性能
- 可以手动使用sync来逼迫内存中设置为Dirty的文件回写到磁盘中
- 若正常关机时,关机指令会主动调用sync来将内存的数据回写入磁盘内;但若不正常关机(如跳电、死机或其他不明缘故原由),由于数据尚未回写到磁盘内,因此重新开机后大概会花很多时间在进行磁盘检验,乃至大概导致文件体系的损毁(非磁盘损毁)
挂载点的意义
每个filesystem都有独立的 inode / block / superblock 等信息,这个文件体系要能够链接到目录树才气被使用。将文件体系与目录树结合的动作称为挂载
挂载点一定是目录,该目录为进入该文件体系的入口。因此并不是你有任何文件体系都能使用,必须要挂载到目录树的某个目录后,才气够使用该文件体系
文件体系的简单操作
- df:列出文件体系的整体磁盘使用量
- -a :列出所有的文件系统,包括系统特有的/proc等文件系统
- -k:以KB的容量显示各文件系统
- -m:以MB的容量显示各文件系统
- -h:以人们较易阅读的GB,MB, KB等格式自行显示
- -H:以M=1000K取代M=1024K的进位方式
- -T:增加显示每个挂载点的文件系统类型
- -i:不用磁盘容量,而以inode的数量来显示
复制代码 输出的结果讯息:
- Filesystem:代表该文件体系是在哪个partition ,所以列出设备名称1k-blocks:说明下面的数字单元是1KB
- Used:使用掉的磁盘空间
- Available:剩下的磁盘空间大小
- Use%:就是磁盘的使用率,假如使用率高达 90% 以上时,最好必要注意一下了,免得容量不敷造成体系标题(例如最轻易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
- Mounted on:磁盘挂载的目录所在
- du:评估文件体系的磁盘使用量(常用在推估目录所占容量)
- -a:列出所有的文件与目录容量,默认仅统计目录下面的文件量
- -h:以人们较易读的容量格式(G/M)显示
- -s:列出总量,而不列出每个各别的目录占用容量
- -S:不包括子目录下的总计
- -k:以KB列出容量显示
- -m:以MB列出容量显示
复制代码 Linux的链接文件有两种:
符号链接(软链接):类似Windows的捷径功能的文件,可以快速的链接到目的文件或目录
实体链接(硬链接):通过文件体系的inode链接来产生新文件名,而不是产生新文件
可以通过1或2的目录之inode指定的block找到两个不同的文件名,而不管使用哪个文件名均可以指到real那个inode去读取到终极数据,(就像是创建C++里的引用)
hard link不能跨file system,也不能link目录
- symbolic link软链接
是创建了一个独立的文件,这个文件会让数据的读取指向它link的那个文件的文件名,由于只是利用文件来做为指向的动作,所以当来源文件被删除之后,将无法打开该文件(就像快捷方式)- #ln 目标文件或目录的路径 创建的软链接的路径
- -s:不加任何参数就是hard link, -s就是symbolic link
- -f:如果目标文件存在时,就将目标文件直接移除后再创建
复制代码
由1号inode读取到链接文件的内容仅有文件名,根据文件名链接到正确的目录去取得目的文件的inode,终极就能够读取到正确的数据
磁盘的分区、格式化、检验与挂载
lsblk:列出体系上所有磁盘- #lsblk [options] device
- -d:仅列出磁盘本身,不会列出该磁盘的分区数据
- -f:同时列出该磁盘内的文件系统名称
- -i:使用ASCII的线段输出,不使用复杂的编码(某些环境下很有用)
- -m:同时输出该设备在/dev下面的权限数据(rwx的数据)
- -p:列出该设备的完整文件名,而不是仅列出最后的名字
- -t:列出该磁盘设备的详细数据,包括磁盘队列机制、预读写的数据量大小等
复制代码 默认输出信息:
- NAME:设备的文件名,会省略/dev等前导目录
- MAJ:MIN:焦点熟悉的设备都是通过这两个代码来熟悉的!分别是主要:次要设备代码
- RM:是否为可卸载设备removable device,如光盘、USB 磁盘等等
- SIZE:容量
- RO:是否为只读设备
- TYPE:是磁盘disk、分区partition还是只读存储器rom等
- MOUTPOINT:挂载点
blkid:列出设备的UUID等参数
universally unique identifier是全域单一识别码,Linux会将体系内所有的设备都给予一个独一无二的识别码,这个识别码就可以拿来作为挂载或者是使用这个设备/文件体系
parted:列出磁盘的分区表类型与分区信息
文件体系挂载与卸载
- 单一文件体系不应该被重复挂载在不同的挂载点(目录)中
- 单一目录不应该重复挂载多个文件体系
- 要作为挂载点的目录,理论上应该都是空目录
- #mount -t 文件系统类型 -o 选项 设备文件名 挂载点
- -o:后面可以接一些挂载时额外加上的参数,比方说帐号、密码、读写权限等:
- async, sync:此文件系统是否使用同步写入(sync)或非同步(async)的内存机制,默认为async
- atime,noatime: 是否修订文件的读取时间(atime),为了性能某些时刻可使用noatime
- ro, rw:挂载文件系统成为只读(ro)或可读写(rw)
- auto, noauto:是否允许此filesystem被以mount -a自动挂载(auto)
- dev, nodev:是否允许此filesystem上可创建设备文件,dev为可允许
- suid, nosuid:是否允许此filesystem含有suid/sgid的文件格式 exec, noexec:是否允许此filesystem上拥有可执行binary文件 user, nouser:是否允许此filesystem让任何使用者执行mount,一般来说,mount仅有root可以进行,但下达user参数,则可让一般user也能够对此partition进行mount
- defaults:默认值为:rw, suid, dev, exec, auto, nouser, and async
- remount:重新挂载,在系统出错或重新更新参数时很有用
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |