Linux命令---文件管理1

简介: Linux命令---文件管理

Linux chattr命令

Linux chattr命令用于改变文件属性。


这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:


a:让文件或目录仅供附加用途。


b:不更新文件或目录的最后存取时间。


c:将文件或目录压缩后存放。


d:将文件或目录排除在倾倒操作之外。


i:不得任意更动文件或目录。


s:保密性删除文件或目录。


S:即时更新文件或目录。


u:预防意外删除。

语法

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

参数

 -R 递归处理,将指定目录下的所有文件及子目录一并处理。


 -v<版本编号> 设置文件或目录版本。


 -V 显示指令执行过程。


 +<属性> 开启文件或目录的该项属性。


 -<属性> 关闭文件或目录的该项属性。


 =<属性> 指定文件或目录的该项属性。


实例

用chattr命令防止系统中某个关键文件被修改:


chattr +i /etc/resolv.conf


lsattr /etc/resolv.conf


会显示如下属性


----i-------- /etc/resolv.conf


让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:


chattr +a /var/log/messages


Linux chmod命令

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

只有文件所有者和超级用户可以修改文件或目录的权限。

语法

chmod [-cfvR] [--help] [--version] mode file...

参数说明

mode : 权限设定字串,格式如下 :


[ugoa...][[+-=][rwxX]...][,...]


其中:


u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。


+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。


r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:


-c : 若该文件权限确实已经更改,才显示其更改动作


-f : 若该文件权限无法被更改也不要显示错误讯息


-v : 显示权限变更的详细资料


-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)


--help : 显示辅助说明


--version : 显示版本


符号模式

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:


who

用户类型

说明

u

user

文件所有者

g

group

文件所有者所在组

o

others

所有其他用户

a

all

所有用户, 相当于 ugo


operator 的符号模式表:

Operator

说明

+

为指定的用户类型增加权限

-

去除指定用户类型的权限

=

设置指定用户权限的设置,即将用户类型的所有权限重新设置


permission 的符号模式表:

1686483539863.png

八进制语法

chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。

1686483560172.png

例如, 765 将这样解释:


所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。


用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。


其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。


实例

将文件 file1.txt 设为所有人皆可读取 :


chmod ugo+r file1.txt


将文件 file1.txt 设为所有人皆可读取 :


chmod a+r file1.txt


将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :


chmod ug+w,o-w file1.txt file2.txt


为 ex1.py 文件拥有者增加可执行权限:


chmod u+x ex1.py


将目前目录下的所有文件与子目录皆设为任何人可读取 :


chmod -R a+r *


此外chmod也可以用数字来表示权限如 :


chmod 777 file


语法为:


chmod abc file


其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。


r=4,w=2,x=1


若要 rwx 属性则 4+2+1=7;


若要 rw- 属性则 4+2=6;


若要 r-x 属性则 4+1=5。


chmod a=rwx file和chmod 777 file效果相同


chmod ug=rwx,o=x file和chmod 771 file效果相同


若用 chmod 4755 filename 可使此程序具有 root 的权限。


Linux chgrp 命令

Linux chgrp命令用于变更文件或目录的所属群组。

chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。


语法

chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]


参数说明

-c 或 --changes:效果类似"-v"参数,但仅回报更改的部分。


-f 或 --quiet 或 --silent:  不显示错误信息。


-h 或 --no-dereference:  只对符号连接的文件作修改,而不改动其他任何相关文件。


-R 或 --recursive:  递归处理,将指定目录下的所有文件及子目录一并处理。


-v 或 --verbose:  显示指令执行过程。


--help:  在线帮助。


--reference=<参考文件或目录>:  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。


--version:  显示版本信息。


实例

实例1:改变文件的群组属性:

chgrp -v bin log2012.log

输出:

[root@localhost test]# ll
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
[root@localhost test]# chgrp -v bin log2012.log
"log2012.log" 的所属组已更改为 bin
[root@localhost test]# ll
---xrw-r-- 1 root bin  302108 11-13 06:03 log2012.log


说明: 将 log2012.log 文件由 root 群组改为 bin 群组。

实例2:根据指定文件改变文件的群组属性

chgrp --reference=log2012.log log2013.log

输出:

[root@localhost test]# ll
---xrw-r-- 1 root bin  302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log
[root@localhost test]#  chgrp --reference=log2012.log log2013.log 
[root@localhost test]# ll
---xrw-r-- 1 root bin  302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log


说明: 改变文件 log2013.log 的群组属性,使得文件 log2013.log 的群组属性和参考文件 log2012.log 的群组属性相同。

Linux chown 命令

Linux chown命令用于设置文件所有者和文件关联组的命令。


Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。


chown 需要超级用户 root 的权限才能执行此命令。


只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用 chgrp 命令。


使用权限 : root

语法

chown [-cfhvR] [--help] [--version] user[:group] file...

参数 :

user : 新的文件拥有者的使用者 ID


group : 新的文件拥有者的使用者组(group)


-c : 显示更改的部分的信息


-f : 忽略错误信息


-h :修复符号链接


-v : 显示详细的处理信息


-R : 处理指定目录以及其子目录下的所有文件


--help : 显示辅助说明


--version : 显示版本


实例

把 /var/run/httpd.pid 的所有者设置 root:


chown root /var/run/httpd.pid


将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :


chown runoob:runoobgroup file1.txt


将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:


chown -R runoob:runoobgroup *


把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:


chown :512 /home/runoob


Linux cksum命令

Linux cksum命令用于检查文件的CRC是否正确。确保文件从一个系统传输到另一个系统的过程中不被损坏。


CRC是一种排错检查方式,该校验法的标准由CCITT所指定,至少可检测到99.998%的已知错误。


指定文件交由指令"cksum"进行校验后,该指令会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则指令"cksum"会从标准输入设备中读取数据。


语法

cksum [--help][--version][文件...]

参数

  • --help:在线帮助。
  • --version:显示版本信息。
  • 文件…:需要进行检查的文件路径


实例

使用指令"cksum"计算文件"testfile1"的完整性,输入如下命令:


$ cksum testfile1


以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:


1263453430 78 testfile1 //输出信息


上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。


注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。


Linux cmp 命令

Linux cmp 命令用于比较两个文件是否有差异。

当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据。


语法

cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]

参数

-c或--print-chars  除了标明差异处的十进制字码之外,一并显示该字符所对应字符。


-i<字符数目>或--ignore-initial=<字符数目>  指定一个数目。


-l或--verbose  标示出所有不一样的地方。


-s或--quiet或--silent  不显示错误信息。


-v或--version  显示版本信息。


--help  在线帮助。


实例

要确定两个文件是否相同,请输入:


cmp prog.o.bak prog.o


这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:


prog.o.bak prog.o differ: char 4, line 1


如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。


Linux cat 命令

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

使用权限

所有使用者

语法格式

cat [-AbeEnstTuv] [--help] [--version] fileName

参数说明

-n 或 --number:由 1 开始对所有输出的行数编号。


-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。


-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。


-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。


-E 或 --show-ends : 在每行结束处显示 $。


-T 或 --show-tabs: 将 TAB 字符显示为 ^I。


-A, --show-all:等价于 -vET。


-e:等价于"-vE"选项;


-t:等价于"-vT"选项;

实例

把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:


cat -n textfile1 > textfile2


把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:


cat -b textfile1 textfile2 >> textfile3


清空 /etc/test.txt 文档内容:


cat /dev/null > /etc/test.txt


cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:


cat /dev/fd0 > OUTFILE


相反的,如果想把 image file 写到软盘,输入:


cat IMG_FILE > /dev/fd0


  • 1. OUTFILE 指输出的镜像文件名。
  • 2. IMG_FILE 指镜像文件。
  • 3. 若从镜像文件写回 device 时,device 容量需与相当。
  • 4. 通常用制作开机磁片。


Linux diff 命令

Linux diff 命令用于比较文件的差异。

diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

语法

diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]


参数

-<行数>  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。


-a或--text  diff预设只会逐行比较文本文件。


-b或--ignore-space-change  不检查空格字符的不同。


-B或--ignore-blank-lines  不检查空白行。


-c  显示全部内文,并标出不同之处。


-C<行数>或--context<行数>  与执行"-c-<行数>"指令相同。


-d或--minimal  使用不同的演算法,以较小的单位来做比较。


-D<巨集名称>或ifdef<巨集名称>  此参数的输出格式可用于前置处理器巨集。


-e或--ed  此参数的输出格式可用于ed的script文件。


-f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。


-H或--speed-large-files  比较大文件时,可加快速度。


-I<字符或字符串>或--ignore-matching-lines<字符或字符串>  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。


-i或--ignore-case  不检查大小写的不同。


-l或--paginate  将结果交由pr程序来分页。


-n或--rcs  将比较结果以RCS的格式来显示。


-N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:


Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。


-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。


-P或--unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。


-q或--brief  仅显示有无差异,不显示详细的信息。


-r或--recursive  比较子目录中的文件。


-s或--report-identical-files  若没有发现任何差异,仍然显示信息。


-S<文件>或--starting-file<文件>  在比较目录时,从指定的文件开始比较。


-t或--expand-tabs  在输出时,将tab字符展开。


-T或--initial-tab  在每行前面加上tab字符以便对齐。


-u,-U<列数>或--unified=<列数>  以合并的方式来显示文件内容的不同。


-v或--version  显示版本信息。


-w或--ignore-all-space  忽略全部的空格字符。


-W<宽度>或--width<宽度>  在使用-y参数时,指定栏宽。


-x<文件名或目录>或--exclude<文件名或目录>  不比较选项中所指定的文件或目录。


-X<文件>或--exclude-from<文件>  您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。


-y或--side-by-side  以并列的方式显示文件的异同之处。


--help  显示帮助。


--left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。


--suppress-common-lines  在使用-y参数时,仅显示不同之处。


实例1:比较两个文件

[root@localhost test3]# diff log2014.log log2013.log 
3c3
< 2014-03
---
> 2013-03
8c8
< 2013-07
---
> 2013-08
11,12d10
< 2013-11
< 2013-12


上面的"3c3"和"8c8"表示log2014.log和log20143log文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。

实例2:并排格式输出

[root@localhost test3]# diff log2014.log log2013.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2014-03               | 2013-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-07               | 2013-08
2013-09                 2013-09
2013-10                 2013-10
2013-11               <
2013-12               <
[root@localhost test3]# diff log2013.log log2014.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2013-03               | 2014-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-08               | 2013-07
2013-09                 2013-09
2013-10                 2013-10
                      > 2013-11
                      > 2013-12

说明:

  • "|"表示前后2个文件内容有不同
  • "<"表示后面文件比前面文件少了1行内容
  • ">"表示后面文件比前面文件多了1行内容


Linux diffstat命令

Linux diffstat命令根据diff的比较结果,显示统计数字。

diffstat读取diff的输出结果,然后统计各文件的插入,删除,修改等差异计量。


语法

diff [-wV][-n <文件名长度>][-p <文件名长度>]

参数

  • -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
  • -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
  • -w  指定输出时栏位的宽度。
  • -V  显示版本信息。


实例

用户也可以直接使用"|"将diff指令所输出的结果直接送给diffstat指令进行统计结果的显示。


使用该指令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。


将目录"test1"和"test2"下的同名文件"testf.txt"使用diff指令进行比较。然后使用diffstat指令对结果进行统计显示,输入如下命令:


$ diff test1 test2 | diffstat #进行比较结果的统计显示


注意:使用这条命令可以非常方便地实现统计显示的功能。


对于查看文件中的内容,用户可以通过指令"cat"进行查看即可,具体操作如下:


$ cat test1/testf.txt           #查看test1/testf的内容  
abc  
def  
ghi  
jkl  
mno  
pqr  
stu  
vws  
$ cat test2/testf.txt           #查看test2/testf的内容  
abc  
def  
ghi  
jkl  
mno

从上面的文件内容显示,可以看到两个文件内容的差别。现在来运行刚才的命令,对文件比较的结果进行统计显示,结果如下:

testfile | 2 +-             #统计信息输出显示  
1 file changed, 1 insertion(+), 1 deletion(-)


Linux file命令

Linux file命令用于辨识文件类型。

通过file指令,我们得以辨识该文件的类型。

语法

file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]

参数

-b  列出辨识结果时,不显示文件名称。


-c  详细显示指令执行过程,便于排错或分析程序执行的情形。


-f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。


-L  直接显示符号连接所指向的文件的类别。


-m<魔法数字文件>  指定魔法数字文件。


-v  显示版本信息。


-z  尝试去解读压缩文件的内容。


[文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。


实例

显示文件类型:

[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log      <== 不显示文件名称
UTF-8 Unicode text
[root@localhost ~]# file -i install.log      <== 显示MIME类别。
install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8

显示符号链接的文件类型

[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'
[root@localhost ~]# file -L /var/mail
/var/mail: directory
[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory
[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory


Linux git命令

Linux git命令是文字模式下的文件管理员。

git是用来管理文件的程序,它十分类似DOS下的Norton Commander,具有互动式操作界面。它的操作方法和Norton Commander几乎一样。

语法

git

操作说明:

F1 :执行info指令,查询指令相关信息,会要求您输入欲查询的名称。


F2 :执行cat指令,列出文件内容。


F3 :执行gitview指令,观看文件内容。


F4 :执行vi指令,编辑文件内容。


F5 :执行cp指令,复制文件或目录,会要求您输入目标文件或目录。


F6 :执行mv指令,移动文件或目录,或是更改其名称,会要求您输入目标文件或目录。


F7 :执行mkdir指令,建立目录。


F8 :执行rm指令,删除文件或目录。


F9 :执行make指令,批处理执行指令或编译程序时,会要求您输入相关命令。


F10 :离开git文件管理员。


Linux gitview命令

Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码。

语法

gitview [-bchilv][文件]

参数

  • -b  单色模式,不使用ANSI控制码显示彩色。
  • -c  彩色模式,使用ANSI控制码显示色彩。
  • -h  在线帮助。
  • -i  显示存放gitview程序的所在位置。
  • -l  不使用先前的显示字符。
  • -v  显示版本信息。


实例

使用指令gitview以彩色模式观看文件"/home/ rootlocal/demo.txt"中的内容,输入如下命令:

$ gitview -c /home/rootlocal/demo.txt #使用gitview指令观看指定文件内容

Linux indent命令

Linux indent命令用于调整C原始代码文件的格式。

indent可辨识C的原始代码文件,并加以格式化,以方便程序设计师阅读。

目录
相关文章
|
8小时前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
|
8小时前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
9 0
|
8小时前
|
Linux
Linux的find命令使用
【5月更文挑战第11天】Linux的find命令使用
10 3
|
8小时前
|
监控 Linux 数据处理
|
8小时前
|
编解码 Ubuntu Linux
|
8小时前
|
JSON Linux 数据格式
Linux命令发送http
请注意,`curl`命令非常灵活,可以根据您的需求进行多种配置和自定义。您可以查看 `curl`命令的文档以获取更多详细信息。
11 0
|
8小时前
|
安全 Linux 测试技术
|
8小时前
|
安全 Linux Windows
Linux中Shutdown命令使用介绍
Linux中Shutdown命令使用介绍
11 2
|
8小时前
|
缓存 关系型数据库 Linux
Linux目录结构:深入理解与命令创建指南
Linux目录结构:深入理解与命令创建指南
|
8小时前
|
数据挖掘 Linux vr&ar
Linux命令实战:解决日常问题的利器
Linux命令实战:解决日常问题的利器