四、Linux常用命令之文件操作篇(cat、more、head、tail、ln、chmod、chown、chgrp、umask)

时间:2021-11-24 16:16:09

转载请注明出处:http://blog.csdn.net/yiliumu/article/details/20491733

1、显示文件内容:cat

语法:cat [文件名]
所在路径:/bin/cat                注意:/bin/表示binary,二进制文件,目录是存放所有用户使用命令的原意:cat    concatenate and display files
执行权限:所有用户
例子: cat /etc/issue               cat/etc/services
cat比较适合于查看文件内容比较简短的文件,

2、解决文件很长的问题more:
more可以分页显示文件,会按照百分比的形式分屏
所在路径:/bin/more
执行权限:所有用户
语法:more [文件名]
可以使用more内置的命令来用不同方式显示内容:
(空格)或f       显示下一页
(Enter)            显示下一行
q或Q              退出
b               可以向上翻页
例子: more /etc/services

3、我们有时候就想要浏览文件的前面几行,那么此时我们可以使用head命令

head  所在路径:/bin/head,所有用户都可以使用
语法:head -num [文件名]       -num表示显示文件的前num行
例子:head -20 /etc/services       也可以这么写:head -n 20 etc/services

4、浏览文件的后面几行

tail与head相反功能,使用方法是一样的
tail -3 /etc/services
但是tail有一个选项时    -f(表示follow,在末尾追加数据)   ,它表示动态显示内容,比如我们要监视一个日志文件的变化,此时我们可以使用tail -f gala.log       这时候就会动态的显示日志文件的内容,只要该日志文件有变化,此处就会动态的帮你显示出来,默认是显示10行,有了“-f”这个选项就不需要有-n这个选项了,默认就是倒数10行

5、创建链接文件 :ln
原意:link
所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [源文件] [目标文件]
                 -s(表示soft)   表示创建软链接       ln [源文件] [目标文件] 这样就可以创建一个硬链接,不需要选项-s(soft)
例子:ln -s /etc/issue /etc/issue.soft
这时候我们可以查看这个两个文件的详细信息:
ls -l /etc/issue /etc/issue.soft
软链接的权限很特殊,和源文件的权限是不一样的。。。。
lrwxrwxrwx  ..10 .. /issue.soft-->/etc/issue    所有的软连接的权限都是rwx,其次软链接的大小很小,也就是说,它只是一个符号链接,这个软链接还会有一个箭头的指向,指向源文件...这个软链接是所有用户都可以访问的,换句话说,软链接的权限不重要,重要的是源文件的权限,因为最后执行的还是源文件,到底你有什么样的执行权限,取决于源文件的权限,,,还有,在权限前面有一个“l”,这是软链接标识,硬链接可不是,硬链接标识和文件一样,也是“-”,说白了:软链接就是windows下的快捷方式,我们在执行快捷方式时,也是一样会链接到源文件,删除了也不会影响到源文件。

生成一个硬链接  :ln /etc/issue /etc/issue.hard ,(注意一点:硬链接是不能够跨分区创建的)
查看这两个文件的详细信息:ls -l /etc/issue /etc/issue.hard
我们可以看到这两个文件的信息是相同的,除了后面的存储路径,所以硬链接在windows没有的东西,硬链接就相当于拷贝,但是有区别于拷贝,拷贝就相当于创建一个相同的文件,时间是当前创建的时间(但是我们在拷贝或备份文件的时候,如果你不希望拷贝的文件时间改变,而是保持原来创建文件的时间,有一个选项“-p”,表示保留源文件的创建时间,cp -p [源文件] [目标文件]),但是硬链接的时间是与源文件的时间一致的,不管源文件和硬链接什么时候创建,并且注意一点:它是同步更新的,源文件改变,硬链接也实时改变。

此时可以使用cat来查看源文件,软链接,硬链接的内容
cat /etc/issue     
cat /etc/issue.soft
cat /etc/issue.hard
三个文件的内容是一样的,实际上,调用软链接就是调用源文件,但是,此时我们在/etc/issue末尾写入一句话:echo "this is a test" >> /etc/issue
在查看:cat /etc/issue /etc/issue.soft /etc/issue.hard
此时发现所有文件都在末尾追加了一句话。软链接可以理解,调用软链接实际上就是调用源文件,但是硬链接呢,就是刚刚说过的同步更新,硬链接它可以实现同步更新,而不是简单的copy。
硬链接在实际用途上:比如一台服务器有很多个管理员,那有时候你写了一个shell脚本,后面又来了一个管理员,它以为这是没用的,就把它删掉了,这就非常郁闷了,所以我们在写shell脚本的同时,帮他创建一个硬链接,放在一个隐蔽一点的地方,同步更新的(硬链接更新内容时,源文件也会同步更新),此时不管源文件有没被删除,我们还是可以使用硬链接将我们的数据恢复回来(使用cp命令,就可以将这个数据拷贝到相应的目录了),相当于我们有一个实时备份的文件

此时我们可以将源文件删掉rm /etc/issue
这时候,我们在用cat来访问软链接,软链接不能访问了,而硬链接还是可以访问的,这是软连接和硬链接的区别,如果源文件删除了,软链接没有任何的价值,就像windows,如果把源文件都删除了,快捷方式就没有价值了,硬链接大小一样,可以同步更新,源文件被删除,硬链接还是可以用的

总结:软链接就相当于源文件的快捷方式,硬链接相当于copy+同步更新,即使源文件删除了,还是可以用

那为什么硬链接为什么可以同步更新呢?
我们可以使用ls -i  (i:inode表示i节点,实际上就是一个数字标识,Linux中最核心部分就是Linux内核,它负责处理所有的事情,但是它不认识字母,只认识数字,1234...)来查看文件的“i节点”,Linux中,用处理的对象都有一个数字表示,比如每个文件都有自己的i节点,除非出错的时候,文件可能会没有”i节点“,进程有进程id,pid,用户有用户id,uid,用户组有组id,Linux内核处理任何东西都是通过这个数字标识来定位到某一个处理对象的。现在我们先学文件,进程后面会讲到。
(重点)记住:每个文件都必须要有一个inode,如果一个文件没有了inode,那么这个文件你怎样都访问不到了。。。(一个文件的所有属性和内容都是放在inode里面)
但是反过来,一个inode不一定对应一个文件,我们可以在/test目录下touch a 创建一个a文件,再帮他创建一个软链接和一个硬链接,分别执行命令ln -s a a.soft以及ln a a.hard
再使用ls -i来查看/test目录下的所有inode
此时我们可以看到硬链接的inode和源文件a的inode是一样的,也就是源文件和硬链接有相同的inode,这就是为何硬链接会随着源文件同步更新的原因了,实际上这个inode(i节点)同时映射到了两个文件,你删掉了其中一个文件,只是删掉了其中的一个映射而已。。。内核处理的时候,看到有inode是你想要处理的对象时,它就会傻乎乎的对所有是这个inode的文件进行操作了

很重要的一个概念:每个文件必须有一个inode节点,这是Linux内核处理对象时调用的一个数字标识。

Linux下软硬连接注意要点:
假设我们此时在test目录下,并且/test我们已经将其划分为一个单独的存储空间(分区)
此时我们不能这么操作:ln a /a.hard.2,这样就表示帮/test目录下的a文件,在根目录/创建一个a.hard.2的硬链接,此时系统提示错误,所以硬链接是不可以跨分区创建的,而软链接则可以跨分区创建

以上是文件处理命令 
(1)、掌握如何查看文件及目录的详细信息
(选项可以有多个-l -s -a -d,我们可以将他们合并起来写,比如 ls -ld /,只留其中一个“-”,)
(2)、知道Linux基本的权限管理分成哪三种(可读可写可执行),将用户分为哪三类(拥有者,所属组,其他人),怎样判断文件的类型,知道文件的所有者是谁,创建时间
(3)、如何生成软硬链接,有什么区别

以下将讲解文件目录权限处理命令:
6、权限处理命令:chmod                   
功能:改变文件或目录的权限,有时候我们要调整一个文件或者目录的权限
原意:change the permissions mode of a file
所在路径:/bin/chmod    执行权限:所有用户

改变文件的权限有两种方式:
针对某一类用户执行权限的设置:+表示添加,-表示去除,=表示不管之前权限,现在就是这样的权限
第一种方式:chmod u  +   授权              r可读
  g   -   去权               w可写
  o  =   直接赋权       e可执行
(文件的执行权限有三种:u-所有者,g-文件所属组,o-其他人)
例子:chmod u+wx 文件名       chmod o-rx   文件名      chmod g=rwx 文件名  
也可以同时改变多种用户的权限:
    chmod u=rwx,g=rx,o=rx newfile                     不同用户之间使用逗号“,”隔开           

这种方法虽然很简单,但不是我们要掌握的重点,我们要掌握的方法是通过数字的方法来授权,下面是第二种方式:
r-4        2的2次方,分别对应一个数字     读的数字是最大的
w-2        2的一次方
x-1        2的0次方
rwxr-xr--就可以表示为:7 5 4
rw-r-x--x         6 5 1
直接使用chmod 641 a     就将a的执行权限更改为rw-r----x,不同用户有不同的执行权限,这种方式能同时改变所有的用户的权限

(PS:执行命令:su - 用户名,可以切换用户)
附加问题:我们此时使用su切换到某一个普通用户,然后在根目录创建一个目录/prem,然后在这个目录里创建一个文件newfile
此时目录的权限是755,普通用户没有写的权限,我们将newfile的权限改为777,所有用户都有写的权限。此时我们用普通用户的账号使用rm /prem/newfile将newfile文件删除,发现不可以删除,明明所有用户对这个文件都有写的权限,为什么不能删除这个文件呢?
再做一个实验,我们将/pre目录m权限改为所有用户都有写权限,chmod 777 /prem,再将newfile文件权限改为所有用户都没有写的权限,chmoe 555 /prem/newfile,这时候再使用普通账号,rm /prem/newfile删除文件enwfile,此时将文件删除了。使用exit退出到root用户。
问题引发思考:
深入文件目录权限:
    对文件的含义                                                                                            对目录的含义
r           读权限        可以查看文件的内容                                               可以列出目录中的内容ls
w          写权限        可以修改文件的内容                                              可以在目录中创建、删除文件
x           执行权限      可以执行文件,比如ls -l查看文件信息              可以进入目录cd,   ls -ld查看目录的详细信息

/prem/newfile的权限为766,普通用户不可执行,我们使用普通用户删除/prem/newfile时,就无法删除了,即使有对/prem目录有写权限,但是这个普通用户对/prem目录没有执行权限,所以进不去目录,进都进不去,更不用说要删除/prem目录里面的内容了
所以,可执行和可写权限是并存的,如果你只有可写,但没有可执行权限,用户是进不了你的目录中的,更不用说操作目录里的东西了

对文件来说:
r权限可以 cat 、more、head、tail    可以读取文件的内容
w权限可以echo、vi、一个文件有写权限,只是说对这个文件有修改权限,但是不可以删除这个文件    可以修改文件的内容,增加或减少内容
x权限可以执行,可以是一个命令,可以是一个脚本      可以执行,比如查看该文件的详细信息 ls -l /newfile,即可以把该文件作为一个命令或脚本的参数
而对目录来说:
r权限可以ls
w权限可以在这个目录中创建,删除文件,也就是说你要对这个目录有写权限,才能删除该目录下的文件,文件的写权限只是对该文件进行一些内容修改的权限。可以touch,mkdir,rm
x权限表示可以cd进入这个目录,如果没有这个可执行权限,即目录都进不了,更不用说可以删除该目录下的文件了
我们会看到一个目录中,一般r-x都是一起出现的,r表示可以查看该目录的内容,x表示进入该目录,所以只有r,就不能进入该目录,也就不能对目录里的文件进行操作,比如,cp ,rm,,等等只有x就不能查看该目录的所有文件

既然一个文件的权限可以改变,那么这个文件的其他信息也是可以被改变的。比如我们之前说的,改变文件的所有者

7、权限管理命令:chown
功能:改变文件或目录的所有者
原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
语法:chown [用户] [文件或目录](操作的对象)
例子:chown nobody file1          改变文件file1的所有者为nobody(nobody是Linux自带的账号,就像是windows下的guest账号),该命令普通用户执行不了,因为普通用户和其他用户是平级关系,所以普通用户无法把一个文件的所属主改变为其他人,

如果你的系统没有普通用户,我们可以使用如下命令来添加一个普通用户:
useradd helen 
passwd helen

既然所有者可以改变,那么所属组也就可以改变

8、命令:chgrp
功能:改变文件或目录的所属组
例子:chgrp adm file1(adm是Linux自带的一个管理组,这个组合所有者一样,必须系统有的)
chgrp softadm /software
ls -l file1 可以查看文件信息

小技巧:
chmod,chown,chgrp,的第一个参数都是权限,用户名,组名,操作对象都是在第二个参数以后,比如:
chmod 777 /test/newfile(操作对象)
chown vae /test/newfile
chgrp adm /test/newfile

9、权限管理的最后一个命令:umask
功能:查看,设置文件和目录的缺省权限 
所在路径:/bin/umask
执行权限:所有用户       (每个用户都可以使用umask 0002 来改变该掩码值,但是只是对自己有用,即对自己创建文件时有影响,不会影响到其他用户)
语法:umask [-S]          很多Linux版本没有-S这个选项
-S表示以rwx(421)形式显示新建文件或目录缺省权限
例子:umask 
umask -S
此时我们创建一个目录,mkdir newdir,查看这个目录的权限ls -ld /newdir   drwxr-xr-x
我们此时可以使用umask可以查看到缺省的权限,但是这样不太直观,0022,我们可以用umask -S来直观查看缺省权限:u=rwx,g=rx,o=rx,也就说我们创建一个目录或者文件,它缺省的权限应该是这样的,针对上面0022的写法:0022:
0:表示特殊权限位
022:表示用户权限位,他是一个掩码值,我们需要用户所有的权限去减掉它,得到一个真正的权限
777
          -     022
       _________
755
得到的755才是该目录真正的权限,
此时我们再创建一个文件touch newfile1,再查看该文件的权限ls -l newfile1
-rw-r--r--得到的是所有人都不能有执行x权限,这里就涉及到Linux默认权限的规则了:缺省创建的文件不能授予可执行x权限,这就很好防止了黑客木马的攻击,木马不可以执行就没有了价值了,这是文件的默认权限,没有可执行权限,但是如果是目录,则是有可执行权限,即可以进入该目录cd,也可以ls -ld 该目录

umask除了可以查看缺省的权限,也可以使用它来改变缺省的权限:但是我们不建议修改
比如:我们要将缺省的权限改为:750,这时我们就需要用777去减掉750得到一个掩码值,027,所以可以使用umask 027来改变缺省的权限
再使用umask -S来查看缺省权限,发现被我们改变了
我们此时可以创建一个目录mkdir newdir2
ls -ld newdir2 发现就是750
再创建一个文件touch newfile2
ls -l newfile2
发现就是640,去掉x的执行权限

注意:文件的所有者不管有没什么权限,都是可以对文件的属性进行更改的,比如文件的权限,但是所有者,组,除了管理员,其他人是不能更改的,记住:一个文件的所有者和所属组是不能被普通用户随便更改的,否则用户就可以为所欲为了,比如普通用户不能将文件所有者改为超级管理员。


本章节学习了Linux文件操作相关命令,下一章节学习Linux搜索命令。