linux文件和目录管理(二)

linux文件和目录管理(二)

文件内容查看

cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出tac 是cat 的相反的!
nl 显示的时候,顺道输出行号!
more 一页一页的显示档案内容
less 与more 类似,但是比more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看末尾几行
od 以二进制的方式读取文件内容!

cat:查看文件

cat [-AbEnTv] 文件
选项与参数:
-A :相当于-vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字元$ 显示出来;
-n :列印出行号,连同空白行也会有行号,与-b 的选项不同;
-T :将[tab] 按键以^I 显示出来;
-v :列出一些看不出来的特殊字符

nl:添加行号

nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-ba :表示不论是否为空行,也同样列出行号(类似cat -n);
-bt :如果有空行,空的那一行不要列出行号(预设值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加0 ;
-n rz :行号在自己栏位的最右方显示,且加0 ;
-w :行号栏位的占用的字元数。

more:一页一页的显示档案内容

在more 这个程式的运作过程中,有几个按键可以按的:
空白键(space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出文件名以及目前显示的行数;
q :代表立刻离开more ,不再显示该档案内容。
b 或[ctrl]-b :代表往回翻页,不过这动作只对文件。

less:一页一页的显示档案内容

可以输入的指令有:

空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻(与/ 或? 有关!)
N :反向的重复前一个搜寻(与/ 或? 有关!)
g :前进到这个资料的第一行去;
G :前进到这个资料的最后一行去(注意大小写);
q :离开less 这个程式;

head :只看头几行

head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思

tail:只看末尾几行

tail和head一样,只是tail是取出末尾几行

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 ;

touch:修改文件时间或新建文件

linux文件有三个主要的变动时间,那么三个时间的意义是什么呢?

access time (atime):访问时间,显示的是文件中的数据最后被访问的时间。

modification time (mtime):修改时间,显示的是文件内容被修改的最后时间。

change time (ctime):状态修改时间,显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)

touch [-acdmt] 文件
选项与参数:
-a :仅修订atime;
-m :仅修改mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
-r file : 使用文件file的时间更新文件的时间 查看文件的三种时间用 stat filename

案例:

修改atimg和mtime
[root@iz2zefu52f85h9hgxl4n2dz test]# stat a.txt
File: ‘a.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 133282 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-10-25 15:52:45.181230866 +0800
Modify: 2019-10-25 15:52:45.181230866 +0800
Change: 2019-10-25 15:52:45.181230866 +0800
Birth: -

[root@iz2zefu52f85h9hgxl4n2dz test]# touch -at 01081010 a.txt

[root@iz2zefu52f85h9hgxl4n2dz test]# stat a.txt
File: ‘a.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 133282 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-08 10:10:00.000000000 +0800
Modify: 2019-10-25 15:52:45.181230866 +0800
Change: 2019-10-25 15:54:59.361869042 +0800
Birth: -

[root@iz2zefu52f85h9hgxl4n2dz test]# touch -mt 199210051010 a.txt

[root@iz2zefu52f85h9hgxl4n2dz test]# stat a.txt
File: ‘a.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 133282 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-08 10:10:00.000000000 +0800
Modify: 1992-10-05 10:10:00.000000000 +0800
Change: 2019-10-25 15:56:29.192643707 +0800
Birth: -

第二个案例:使一个文件的时间和另一个文件的时间相等

root@iz2zefu52f85h9hgxl4n2dz ~]# stat test
File: ‘test’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd01h/64769d Inode: 132558 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-10-25 16:05:04.816310635 +0800
Modify: 2019-10-25 16:03:51.742239947 +0800
Change: 2019-10-25 16:03:51.742239947 +0800
Birth: -

[root@iz2zefu52f85h9hgxl4n2dz ~]# stat back_log.txt
File: ‘back_log.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 133280 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 1001/ www)
Access: 2019-10-25 10:45:30.284336825 +0800
Modify: 2019-10-25 15:16:00.722601689 +0800
Change: 2019-10-25 15:16:00.722601689 +0800
Birth: -

[root@iz2zefu52f85h9hgxl4n2dz ~]# touch -r test back_log.txt

[root@iz2zefu52f85h9hgxl4n2dz ~]# stat back_log.txt
File: ‘back_log.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 133280 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 1001/ www)
Access: 2019-10-25 16:05:04.816310635 +0800
Modify: 2019-10-25 16:03:51.742239947 +0800
Change: 2019-10-25 16:05:53.205344028 +0800
Birth: -

文件与目录的默认权限与隐藏权限

除了基本r, w, x权限外,在Linux传统的Ext2/Ext3/Ext4档案系统下,还可以设定其他的系统隐藏属性,这部份可使用chattr来设定,而以lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!让连文件的拥有者都不能进行修改!这个属性可是相当重要的,尤其是在安全机制上面(security)!比较可惜的是,在CentOS 7.x当中利用xfs作为默认文件系统,但是xfs就没有支持所有的chattr的参数了!仅有部份参数还有支持而已!

umask:文件默认权限

umask就是指定『目前使用者在建立文件或目录时候的权限默认值』

[root@study ~]# umask
0022 <==与一般权限有关的是后面三个数字!
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

查阅的方式有两种,一种可以直接输入umask ,就可以看到数字型态的权限设定分数, 一种则是加入-S这个选项,就会以符号类型的方式来显示出权限了!奇怪的是,怎么umask 会有四组数字?不是只有三组吗?是没错啦。第一组是特殊权限用的。

在默认权限的属性上,目录与档案是不一样的。默认的情况如下:

若使用者建立为『文件』则默认『没有可执行( x )权限』,亦即只有rw这两个项目,也就是最大为666分,默认权限如下:
-rw-rw-rw-

若使用者建立为『目录』,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为777分,默认权限如下:
drwxrwxrwx

要注意的是,umask的分数指的是『该默认值需要减掉的权限!』。

因为r、w、x分别是4、2、1分,所以啰!也就是说,当要拿掉能写的权限,就是输入2分,而如果要拿掉能读的权限,也就是4分,那么要拿掉读与写的权限,也就是6分,而要拿掉执行与写入的权限,也就是3分,这样了解吗?
如果以上面的例子来说明的话,因为umask 为022 ,所以user 并没有被拿掉任何权限,不过group 与others 的权限被拿掉了2 (也就是w 这个权限),那么当使用者:

建立档案时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

如果两个人共用一个文件,那么其中一个是建立者。另一个就没有权限写入了。那么就要修改umask
所以啰, umask 就得要是002 之类的才可以!这样新建的档案才能够是-rw-rw-r-- 的权限模样喔!那么如何设定umask 呢?简单的很,直接在umask 后面输入002 就好了!

[root@study ~]# umask 002
[root@study ~]# touch test3
[root@study ~]# mkdir test4
[root@study ~]# ll -d test[34] #中括号[ ]代表中间有个指定的字元,而不是任意字元的意思
-rw-rw-r-- . 1 root root 0 6月16 01:12 test3
drwxrwxr-x . 2 root root 6 6月16 01:12 test4

假设你的umask 为003 ,请问该umask 情况下,建立的档案与目录权限为?

umask 为003 ,所以拿掉的权限为--------wx,因此:
档案: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目录: (drwxrwxrwx) - (d-------wx) = drwxrwxr--