一、Linux文件权限
1. Linux文件属性
1.1 第一部分为文件的类型与权限:
-
第一个字符为文件类型:[d]表示目录、[-]表示文件、[l]表示链接文件、[b]表示设备文件里面的可供存储的周边设备、[c]表示设备文件里的序列埠设备;
-
后面的字符三个为一组,第一组为文件拥有者可具备的权限,第二组为加入此群组的账号的权限,第三组为非本人且没有加入本群组的其他账号的权限,每一组的第一个字符表示是否可读[r],每一组的第二个字符表示是否可写[w],每一组的第三个字符表示是否可执行[x];
1.2 第二部分表示有多少文件名链接到此节点;
1.3 第三部分表示这个文件或目录的拥有者账号;
1.4 第四部分表示这个文件的所属群组;
1.5 第五部分表示这个文件的容量大小,单位为Bytes;
1.6 第六部分为这个文件的创建日期或最近的修改日期,如果未变动时间太久则只显示年份;
1.7 第七部分为这个文件的文件名,文件名前有一个[.]为隐藏文件;
2. 修改文件属性与权限
2.1 改变所属群组,chgrp
chgrp user1 test.txt #第二个字段为群组名,需在etc/group文件中,最后一个字段为文件名
2.2 改变文件拥有者,chown
chown user1 test.txt #第二个字段为用户名,需在etc/passwd文件中,最后一个字段为文件名
chown user1:user1 text.txt #同时改变群组 chown user1.user1 text.txt
chown .user1 text.txt #只改群组 chown :user1 text.txt
-R:进行递回的持续变更,亦即连同次目录下的所有文件都变更。
2.3 改变权限,chmod
-
数字类型改变文件权限,r对应为4,w对应为2,x对应为1
chmod 777 test.txt #第二个字段中的每个数字对应为owner/group/other各自的rwx的累加,后面接文件名
-
符号类型改变文件权限,user对u,group对应g,other对应o,a对应all所有身份,可以使用+、-、=来操作权限rwx
chmod u=rwx,go=rx text.txt #第二个字段设置权限,后接文件名 chmod a+x test.txt chmod a-x test.txt
3. 目录与文件的权限
3.1 文件的权限
-
r权限表示可读取该文件的实际内容;
-
w权限表示可以编辑、新增或修改该文件的内容;
-
x权限表示可以该文件具有可以被执行的权限;
3.2 目录的权限
-
r表示具有查询该目录下的文件名数据的权限;
-
w表示具有变动该目录结构清单的权限,包括创建、删除、更名、移动;
-
x表示使用者能否进入该目录的权限;
4. Linux文件种类与扩展名
4.1 文件种类
-
正规文件(regular file):用[-]表示,包括纯文本文件(ASCLL)、二进制文件(binary)、数据格式文件(data);
-
目录(directory):用[d]表示;
-
链接文件(link):用[l]表示;
-
设备与设备文件(device):通常集中在/dev目录下,分为区块(block)设备文件(用[b]表示,随机存取的周边设备,如硬盘)和字符(character)设备文件(用[c]表示,一次性读取的周边设备,如键盘);
-
数据接口文件(sockets):用[s]表示,一般在/run和/tmp目录中出现;
-
数据输送档(FIFO,pipe):用[p]表示,first-in-first-out缩写,用于解决多个程序同时存取一个文件所造成的错误问题;
4.2 文件扩展名
-
.sh:脚本或批处理文件(script);
-
Z、.tar、.tar.gz、.zip、.tgz:经过打包的压缩文件;
-
.html、.php:网页相关文件;
-
linux文件是否可执行只取决于是否拥有x权限,文件扩展名仅用于了解文件的可能用途;
4.3 文件长度限制
-
单一文件或目录的最大容许文件名为255Bytes,以一个ASCLL英文占用一个Bytes来说可有大约255个字符长度,以一个中文占用2Bytes来说可有大约128个中文字符;
4.4 文件名称限制
-
文件名称避免使用*?<>;&![]|'"'(){}\等;
二、Linux目录配置
1. Linux目录配置依据
-
Filesystem Hierarchy Standard(FHS);
2. 目录树
-
目录树起始点为根目录(/,root);
-
每一个目录不仅能使用本地partion的文件系统,还能使用网络上的filesystem;
-
每一个文件在此目录树中的文件名都是独一无二的;
3. 绝对路径与相对路径
-
绝对路径:由根目录开启写起的文件名或目录名称;
-
相对路径:相对于目前路径的文件名写法;
-
.代表当前目录,也可用./表示;
-
..代表上一层目录,也可用../表示;
4. CentOS的观察
-
查看核心版本
uname -r
-
查看操作系统的位版本
uname -m
三、Linux目录操作
1. 特殊目录
.代表此层目录,..代表上一层目录,-代表前一个工作目录,~代表目前使用者身份所在的主文件夹,~[account]代表account这个使用者的主文件夹。
2. 变换目录
-
change directory,cd;
3. 显示目前所在目录
-
Print Working Directory,pwd;
-
加-P参数显示链接文件的完整路径;
4. 创建新目录
-
Make Directory,mkdir;
-
-m参数设置文件权限,不加为默认权限;
-
-p参数能够递回创建目录;
5. 删除空目录
-
Remove Directory,rmdir;
-
-p参数能连同上层的空目录一起删除;
6. 可执行文件路径的变量:$PATH
-
不同身份使用者默认的PATH不同,默认能够随意执行的指令也不同;
-
PATH这个变量的内容由一堆目录所组成的,每个目录中间用:分隔,每个目录也有顺序之分。
四、Linux文件与目录管理操作
1. 文件与目录的检视
ls [-aAdfFhilnrRSt] 文件名或目录名称..
-a:显示全部文件包括隐藏文件; -A:显示全部文件包括隐藏文件,但不包括.和..这两个目录; -d:仅列出目录本身,而不是列出目录内的文件数据; -f:直接列出结果,而不进行排序; -F:根据文件、目录等信息,给予附加结构数据; -h:将文件大小以易读方式显示; -i:列出inode号码; -l:长数据串行出,包含文件的属性与权限等数据; -n:列出UID与GID而非使用者与群组的名称; -r:将排序结果反向输出; -R:连同子目录内容一起列出来; -S:以文件大小排序; -t:以时间排序; --color=never:不依据文件特性给予颜色显示; --color=always:显示颜色; --color=auto:让系统自行依据设置来判断是否给予颜色; --full-time:以完整时间模式输出; --time={atime,ctime}:输出access时间或改变权限属性时间ctime而非内容变更时间;
2. 复制文件或目录
cp [-adfilprsu] 来源文件(source) 目标文件(destination) 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 等也复制了。 如果来源文件有两个以上,则最后一个目的文件一定要是“目录”。
3. 移除文件或目录
rm [-fir] 文件或目录
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息; -i :互动模式,在删除前会询问使用者是否动作 -r :递回删除。
4. 移动文件与目录或更名
mv [-fiu] source destination mv [options] source1 source2 source3 .... directory
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会更新 (update)
5. 取得路径的文件名称与路径名称
basename 文件名 dirname 文件名
五、文件内容查询
1. 直接检视文件内容
-
cat(concatenate)
cat [-AbEnTv] 文件名
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字符 $ 显示出来; -n :打印出行号,连同空白行也会有行号,与 -b 的选项不同; -T :将 [tab] 按键以 ^I 显示出来; -v :列出一些看不出来的特殊字符
-
tac(反向列示)
tac 文件名
-
nl(添加行号打印)
nl [-bnw] 文件
-b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值); -n :列出行号表示的方法,主要有三种: -n ln :行号在屏幕的最左方显示; -n rn :行号在自己字段的最右方显示,且不加 0 ; -n rz :行号在自己字段的最右方显示,且加 0 ; -w :行号字段的占用的字符数。
2. 可翻页检视
-
more(一页一页翻动)
more 文件名
空白键 (space):代表向下翻一页; Enter :代表向下翻“一行”; /字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字; :f :立刻显示出文件名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
-
less(一页一页翻动)
less 文件名
空白键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字串 :向下搜寻“字串”的功能; ?字串 :向上搜寻“字串”的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) g :前进到这个数据的第一行去; G :前进到这个数据的最后一行去 (注意大小写); q :离开 less 这个程序;
3. 数据撷取
-
head(取出前面几行)
head [-n number] 文件
-n :后面接数字,代表显示几行的意思
-
tail(取出后面几行)
tail [-n number] 文件
-n :后面接数字,代表显示几行的意思 -f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测
4. 非纯文本文件
-
od
od [-t TYPE] 文件
-t :后面可以接各种“类型 (TYPE)”的输出,例如: a :利用默认的字符来输出; c :使用 ASCII 字符来输出 d[size] :利用十进制(decimal)来输出数据,每个整数占用 size Bytes ; f[size] :利用浮点数值(floating)来输出数据,每个数占用 size Bytes ; o[size] :利用八进位(octal)来输出数据,每个整数占用 size Bytes ; x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size Bytes ;
5. 修改文件时间或新文件
-
modification time (mtime):文件内容数据变更时会更新时间;
-
status time(ctime):文件状态(权限与属性)变更时会更新时间;
-
access time(atime):文件内容被读取时会更新时间。
touch [-acdmt] 文件
-a :仅修订 access time; -c :仅修改文件的时间,若该文件不存在则不创建新文件; -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间" -m :仅修改 mtime ; -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
六、文件与目录的默认权限与隐藏权限
1. 文件默认权限
-
umask:指定目前使用者在创建文件或目录时的权限默认值;
umask #查询数字体态的权限设置分数,该分数指的是该默认值需要减掉的权限 umask -S #以符号类型显示权限
-
创建为文件时默认没有可执行(x)权限;
-
创建为目录时默认所有权限均开放;
2. 文件隐藏属性
-
显示文件隐藏属性
lsattr [-adR] 文件或目录
-a :将隐藏文件的属性也秀出来; -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名; -R :连同子目录的数据也一并列出来!
-
设置文件隐藏属性
chattr [+-=][ASacdistu] 文件或目录名称
+ :增加某一个特殊参数,其他原本存在参数则不动。 - :移除某一个特殊参数,其他原本存在参数则不动。 = :设置一定,且仅有后面接的参数 A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目) S :一般文件是非同步写入磁盘的(原理请参考前一章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。 a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性 c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!) d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份 i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”,对于系统安全性有相当大的助益!只有 root 能设置此属性 s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔! u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
3. 文件特殊权限
-
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 SGID,t在其他人的x时称为SBIT。
-
Set UID:
只对文件有效:
-
SUID 权限仅对二进制程序(binary program)有效;
-
执行者对于该程序需要具有 x 的可执行权限;
-
本权限仅在执行该程序的过程中有效 (run-time);
-
执行者将具有该程序拥有者 (owner) 的权限。
-
-
Set GID:
对于文件:
-
SGID 对二进制程序有用;
-
程序执行者对于该程序来说,需具备 x 的权限;
-
执行者在执行的过程中将会获得该程序群组的支持!
对于目录:
-
使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
-
使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
-
用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
-
-
Sticky Bit:
只对目录有效:
-
当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
-
当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
-
4. 观察文件类型
file 文件名 #判断文件格式
七、指令与文件的搜寻
1. 指令文件名的搜寻
which [-a] command
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
2. 文件文件名的搜寻
-
whereis:由一些特定的目录中寻找文件文件名;
whereis [-bmsu] 文件或目录名
-l :可以列出 whereis 会去查询的几个主要目录而已 -b :只找 binary 格式的文件 -m :只找在说明文档 manual 路径下的文件 -s :只找 source 来源文件 -u :搜寻不在上述三个项目当中的其他特殊文件
-
locate/updatedb:在已创建的数据库中搜寻
locate [-ir] keyword #依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名
-i :忽略大小写的差异; -c :不输出文件名,仅计算找到的文件数量 -l :仅输出几行的意思,例如输出五行则是 -l 5 -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等 -r :后面可接正则表达式的显示方式
updatedb #根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件
-
find
find [PATH] [option] [action]
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明 -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件; -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名; -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。 -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
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.... 的属性存在!