Linux学习笔记 知识点 《鸟哥的Linux私房菜》

## Linux学习笔记
整理自《鸟哥的Linux私房菜》
### 1、Linux的文件权限和目录配置
在Linux中一切皆文件,文件的身份分为三种:owner/group/others,每种身法有各自的权限:read/write/execute。
#### 1.1 文件身份的划分
1、文件所有者
每个文件都有自己的所有者,比如“我”创建了一个文件,这个文件的所有者就是“我”。
2、群组
每个文件又有所属的群组,类似于一个家庭,小王属于家庭A,小红属于家庭B。
3、其他所有人
对于不属于这个群组的其他人则可以归到其他所有人这个范畴,如上所属,小王对于家庭B就是其他人的身份。
#### 1.2 文件权限概念
不同身份对于一个文件所具有的权限是不同的,当我们使用命令ls -al查看目录下的所有文件时,可以看到每个文件对应的权限。
文件权限
- 第一栏代表的是文件的类型和权限
第一栏有十个字符,一个字符代表文件的类型:若为d则是目录,为-则是文件,为l则表示链接文件,为b则是设备文件里的可随机存储设备,为c则表示一次性读取设备;接下来的字符,三个为一组(rwx)共有三组,分别为可读、可写、可执行,如果没有权限则为-。第一组为文件拥有者具有的权限,第二组为加入此群组的帐号的权限,第三组为其他所有人的权限。
- 第二栏表示有多少个文件名链接到此节点(链接类似于Windows里的快捷方式)
- 第三栏表示文件的所有者
- 第四栏表示文件所属的群组
- 第五栏是文件的大小
- 第六栏是这个文件的创建日期或者是最近修改的日期
- 第七栏为文件的文件名,如果前面有个.,则代表这个文件是“隐藏文件”。
#### 1.3 改变文件的属性和权限
- chown:改变文件的所有者
改变文件的所有者,即change owner,所有者必须存在,即在/etc/passwd文件中有记录的使用者。
```bash
[root@study ~]# chown [-R] 帐号名称 文件或目录 [root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录 选项与参数: -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
```
- chgrp:改变文件的所属群组
change group的缩写,和改变文件的所有者一样,所属群组也需要存在于/etc/group。
```bash
[root@study ~]# chgrp [-R] dirname/filename ... 选项与参数: -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
```
- chmod:改变文件的权限
文件权限的改变使用的是chmod指令,权限的设置有两种:第一种是使用数字,第二种是使用符号。
1、数字类型改变文件权限
在数字类型中,每个权限对应一个数字:r>4,w>2,x>1。
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权 限为: [-rwxrwx---] 分数则是: owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= --- = 0+0+0 = 0 。所以该文件的权限范围是770。
```bash
[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
```
2、字符类型改变文件权限
在字符类型中,使用u(user),g(group),o(others),a(all)来代表三种身份的权限。
```bash
```
```bash
[root@study ~]# chmod u=rwx,go=rx .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# chmod a-x .bashrc
```
+是添加上权限,-是除去权限,可以在只修改某个特定的权限使用。
#### 1.4 目录与文件的权限意义
文件有权限很好理解,但是目录的权限定义却不大相同。
- 文件权限
文件是指实际含有数据的地方,包括一般文本文件,数据库内人档,二进制可执行文件等,在文件中:
- r(read):可以读取此一文件的实际内容,如读取文本文件的文字内容。
- w(write):可以编辑、修改该文件的内容。(但是不能删除该文件
- e(execute):该文件具有可以被系统执行的权限。
在Windows中,文件的可执行是通过后缀名来区分的(比如.exe),但是linux中文件是否可以被执行仅取决于x的设置,跟文件名没有绝对的关系。
- 目录权限
在目录中,存放的是文件树,比如/ect/x1/x2,ect存放x1和x2文件(可以联想Windows中的文件系统)。
- r(read contents in directory):表示具有读取目录结构清单的权限,当你拥有读取一个目录的权限时,表示你可以查询该目录下的文件名数据。
- w(modify contents of directory):w表示具有修改目录结构的权限,也就是
- 创建新的文件与目录
- 删除已经存在的文件和目录
- 将已存在的文件或目录进行更名
- 移动该目录内的文件、目录位置
- x(access[接近] directory):目录的x代表的是使用者内容进入该目录成为工作目录的用途,所谓的工作目录就是当前所在的目录。简单来说,就是进入该目录的权限(在Windows中,有些系统文件夹没有权限就不能进入)。
总结:
#### 1.5 Linux文件种类与扩展名
文件种类
- 常规文件(regular file):一般就是我们进行存取的类型的文件,在ls -al命令下第一个字符为-,根据内容的不同,又大略可以分为:
- 纯文本文件(ASCII):称为纯文本文件是因为内容是我们人类可以直接读到的数据,例如数字、字母等等。几乎只要可以用来做为设置的文件都属于这一种文件类型。
- 二进制文件:计算机只认识二进制文件。
- 数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件。
- 目录(directory):第一个字符为d
- 链接文件(link):类似于Windows系统的快捷方式,第一个字符为l
- 设备与接口文件(device):与系统周边及储存等相关的一些文件,通常集中在/dev中,又分为两种:
- 区块(block)设备文件:按区块存储,例如硬盘与软盘等。
- 字符(character)设备文件:一次性读取,不能截断输出,例如键盘、鼠标。
- 数据接口文件(sockets):通常被用于网络中的数据承接。
- 数据输送文件(FIFO,pipe):管道,先进先出,是一种特殊的文件类型。
常用的扩展名:
- *.sh:脚本或批处理文件。
- .tar,.tar.gz,.zip,.tgz:经过打包的压缩文件。
- .html,.php:网页相关文件。
#### 1.6 Linux目录配置
linux目录配置有一套标准的依据。
### 2、Linux的文件和目录管理
#### 2.1 目录与路径
##### 2.1.1 相对路径与绝对路径
- 绝对路径:绝对路径的写法“一定是由根目录/写起”,例如:/usr/share/doc这个目录。
- 相对路径:相对路径不是又/写起,而是相对目前工作目录的路径写起,如果要从/usr/share/doc到/usr/share/man下面时,可以写成:“cd ../man”。
- . 当前目录
- ..上一层目录(根目录的上一层目录与根目录自己是同一个目录)
##### 2.1.2 目录的相关操作
```bash
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹(account是个帐号名称)
```
下面是常见的处理目录的指令:
- cd:变换目录
- pwd:显示目前的目录
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
cd(change directory):切换目录
```bash
[root@study ~]# cd [相对路径或绝对路径]
```
pwd(print working directory):显示当前所在的目录
```bash
[root@study ~]# pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用链接 (link) 路径。
```
mkdir(make directory):创建新目录
```bash
[root@study ~]# mkdir [-mp] 目录名称
选项与参数:
-m :设置文件的权限喔!直接设置,不需要看默认权限 (umask) 的脸色~
[root@study tmp]# mkdir -m 711 test2
-p :帮助你直接将所需要的目录(包含上层目录)递回创建起来!
[root@study tmp]# mkdir -p test1/test2/test3/test4
```
rmdir:删除“空”的目录
```bash
[root@study ~]# rmdir [-p] 目录名称
选项与参数:
-p :连同“上层”“空的”目录也一起删除
```
注意目录需要一层一层的删除,被删除的目录里面也不能存在其他的目录或文件,只能删除空的目录。
#### 2.2 文件与目录管理
ls:文件与目录的检视
```bash
[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称.. [root@study ~]# ls [--full-time] 文件名或目录名称.. 选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用) -f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
-F :根据文件、目录等信息,给予附加数据结构,例如: *:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件大小大小排序,而不是用文件名排序;
-t :依时间排序,而不是用文件名。
--color=never :不要依据文件特性给予颜色显示; --color=always :显示颜色
--color=auto :让系统自行依据设置来判断是否给予颜色 --full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 而非内容变更时间 (modification time)
```
cp(copy):复制文件或目录
cp指令除了复制之外,还可以创建链接文件,对比两文件的新旧而予以更新,以及复制整个目录等等的功能。
```bash
[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory 选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-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 等也复制了。 最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
```
复制(cp)这个指令是十分重要的,不同身份者执行这个指令会有不同的结果,尤其是-a,-p的选项,对于不同身份,差异非常大。
rm(remove):移除目录或文件
```bash
[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
```
mv(move):移动文件与目录,或更名
```bash
[root@study ~]# mv [-fiu] source destination [root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u(update) :若目标文件已经存在,且 source 比较新,才会更新 (update)
```
#### 2.3 文件内容查阅
- cat:由第一行开始显示文件内容
- tac:从最后一行开始显示文件内容
- nl:显示的时候,顺道输出行号
- more:一页一页的显示文件内容
- less:一页一页显示内容,但是可以翻页
- head:只看头几行
- tail:只看尾巴几行
- od:以二进制的方式读取文件内容
##### 2.3.1 直接查看文件内容
直接查看文件内容可以通过/cat/tac/nl这几个常用指令。
- cat(concatenate连续)
```bash
[root@study ~]# cat [-AbEnTv]
选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
```
cat不常使用,如果文件内容的行数过多,来不及显示。
- tac(反向):同上
```bash
[root@study ~]# tac /etc/issue
```
- nl(添加行号输出)
```bash
[root@study ~]# nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-n :列出行号表示的方法,主要有三种:
-w :行号字段的占用的字符数。
```
##### 2.3.2 可翻页检视
- more(一页一页翻动)
```bash
[root@study ~]# more /etc/man_db.conf
```
在more程序运行的过程中,有几个按键可以使用:
```bash
- 空格(space):向下翻一页
- 回车(enter):向下翻一行
- /子串:代表当前显示的内容中,向下搜寻“子串”这个关键字,n为下一个;
- :f:立即显示出文件名以及当前显示的行数;
- q:quit,代表立即离开more,
- b或[ctrl]+b:代表返回翻页,(只对文件有用,对pipe无用)
```
- less(同上):可以向前翻页
和more不同的是,在用了less后,可以使用pageup/pagedown等按键上下翻页
```bash
[root@study ~]# less /etc/man_db.conf
```
在less程序运行中,同样有几个按键可以使用:
```bash
space:向下翻动一页
pagedown:向下翻动一页
pageup:向上翻动一页
/字串:向下搜索“字串”
?字串:向上搜索“字串”
n:重复前一个搜寻 (与 / 或 ? 有关!)
N:反向的重复前一个搜寻 (与 / 或 ? 有关!)
g:前进到这个数据的第一行去;
G:前进到这个数据的最后一行去 (注意大小写);
q:离开 less 这个程序;
```
##### 2.3.3 数据摘取
我们可以将输出的数据做一个简单的摘取,使用headtail,这两个命令都是以“行”为单位的。
- head(取出前面几行)
```bash
[root@study ~]# head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思(当n为负数时,除了最后n行都显示,)
```
- tail(去除后面几行)
```bash
[root@study ~]# tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测
```
##### 2.3.4 非纯文本文件:od
当文件内容不是纯文本的时候,比如二进制文件,可以使用od指令来查看文件内容。
```bash
[root@study ~]# od [-t TYPE] 文件
选项或参数:
-t :后面可以接各种“类型 (TYPE)”的输出,例如:
```
##### 2.3.5 修改文件时间或创建新文件:touch
Linux中主要有三个事件:
- modification timemtime): 当该文件的“内容数据”变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
- status timectime): 当该文件的“状态 (status)”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
- access timeatime): 当“该文件的内容被取用”时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man_db.conf , 就会更改该文件的 atime 了。
touch主要有下面两个作用:
- 创建一个空的文件;
- 将某个文件日期修订为当前时间(mtime与atime)
#### 2.4 文件与目录的默认权限和隐藏权限
除了基本r, w, x权限外,在Linux传统的Ext2/Ext3/Ext4文件系统下,我们还可以设置其他的系 统隐藏属性,这部份可使用 chattr 来设置,而以 lsattr 来查看,最重要的属性就是可以设置 其不可修改的特性!让连文件的拥有者都不能进行修改! 这个属性可是相当重要的,尤其是 在安全机制上面 (security)!比较可惜的是,在 CentOS 7.x 当中利用 xfs 作为默认文件系统,但是 xfs 就没有支持所有的 chattr 的参数了!仅有部份参数还有支持而已!
##### 2.4.1 文件默认权限:umask
在Linux中,默认权限与umask有关,umask就是指定“目前使用者在创建文件或目录时候的权限默认值”。
```bash
[root@study ~]# umask
0022
[root@study ~]# umask -S
u=rwx,g=rx,o=rx
```
查阅默认权限的方式有两种,第一种直接输入umask,就可以以数字方式显示默认权限,第二种是加入-S(symbolic)选项,加入后就以符号方式来显示出默认权限。
在默认权限上,目录与文件是不一样的,通常区分在x上。x权限对于目录是非常重要的,但是一般的文件创建则不应该有执行的权限,因为一般的文件通常只用于数据的记录,并不是执行。默认的情况下:
- 若使用者创建“文件”,则默认没有“可执行x”权限,只有rw两个,也就是666,-rw-rw-rw-
- 若使用者创建为“目录”,则由于x与能否进入目录有关,所以默认为开启,所以默认权限为777,drwxrwxrwx
在umask中的数字表示的,拿掉的权限,所以上面后面三个数字表示go要拿掉w权限。
##### 2.4.2 文件隐藏属性
由于在CentOS7.x的xfs文件系统仅支持部分参数,所以不想写了。
##### 2.4.3 文件特殊权限:SUID,SGID,SBIT。
在Linux帐号管理中讲解。
##### 2.4.4 观察文件类型:file
如果想要知道某个文件的基本数据,是属于ASCII还是data文件还是二进制,可以使用file指令。
```BAS
[root@study ~]# file ~/.bashrc
/root/.bashrc: ASCII text ==告诉我们是 ASCII 的纯文本文件啊!
```
#### 2.5 指令与文件的搜寻
在Linux中可以使用多种方式搜寻文件。通常find不常用,一般都是先使用whereis或者是locate
- whereis(由一些特定的目录中寻找文件文件名)
```Bash
[root@study ~]# whereis [-bmsu]
文件或目录名 选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
```
whereis只在一些特定的目录中寻找文件,主要正对/bin/sbin下面的可执行文件,以及/usr/share/man下面的man page文件 跟几个比较特定的文件来处理。
- locate/updatedb
```bash
[root@study ~]# locate [-ir] keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正则表达式的显示方式
```
locate是在数据库中查询文件,如果创建的文件没有更新到数据库中,则可能查询不到,但是可以通过updatedb指令来更新数据库。
```bash
updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;
locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名。
```
- find:在磁盘中查询文件,最耗时间
```bash
[root@study ~]# find [PATH] [option] [action] 选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
2. 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在 /etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者帐号名称喔!例如 dmtsai -group name:name 为群组名称喔,例如 users ;
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人! -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件! 当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者, 这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与文件权限及名称有关的参数:
-name filename:搜寻文件名称为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有: c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB 还要大的文件,就是“ -size +50k ”
-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c), 目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
-perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod 的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-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.... 的属性存在
4. 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果打印到屏幕上,这个动作是默认动作!
```
### 3、Linux磁盘与文件系统管理
### 4、文件与文件系统的压缩、打包与备份
### 5、vim编辑器
posted @ 2021-11-09 15:46  exile464  阅读(74)  评论(0)    收藏  举报