收集云服务器优惠信息
记录云服务器使用心得

Linux文件操作基本命令:归档压缩、设置权限和搜索查找

在Linux系统中,对文件的常规操作是我们每天必做的工作,包括归档/压缩文件和目录、设置文件属性以及在文件系统上查找文件等。为此,在本文中,小编将详细介绍与Linux文件操作的基本内容。

这些命令涵盖了在Linux系统中进行文件操作的一些基本需求,包括归档压缩、权限设置和搜索查找。你可以根据具体的任务需求来使用这些命令。当然,也可也查阅命令的手册页以获取更多详细信息。

适用于Linux的归档和压缩工具

文件归档工具将一组文件分组为一个独立文件,可以将其备份到多种类型的媒体、通过网络传输或通过电子邮件发送。Linux中最常用的归档实用程序是tar命令。当归档实用程序与压缩工具一起使用时,它可以减少存储相同文件和信息所需的磁盘大小。

Linux tar实用程序

tar将一组文件捆绑到一个存档中(通常称为tar文件或tarball)。该名称最初代表磁带归档器,但必须注意,我们可以使用此工具将数据归档到任何类型的可写介质(不仅仅是磁带)。Tar通常与gzip、bzip2或xz等压缩工具一起使用来生成压缩的tarball。

tar命令的基本语法如下:

# tar [options] [pathname ...]

其中...表示用于指定应对哪些文件执行操作的表达式。

最常用的Tar命令:

全称 缩写 功能描述
–create  C  创建tar存档
 –concatenate  A  将tar文件附加到存档
–append  r  将文件附加到存档的末尾
–update u  追加比存档中的副本更新的文件
–diff or –compare  d  查找存档和文件系统之间的差异
–file archive  F  使用归档文件或设备ARCHIVE
–list  t  列出tarball内容
–extract or –get  X  从存档中提取文件

常用的tar操作修饰符:

全称 缩写 功能描述
–directory dir  C  在执行操作之前更改目录dir
–same-permissions  p  保留原始权限
–verbose  v  列出所有读取或提取的文件,当此标志与–list一起使用时,将显示文件大小、所有权和时间戳。
–verify W  写入后验证存档
–exclude file  —  从存档中排除文件
 –exclude=pattern  X  排除文件,以PATTERN形式给出
–gzip or –gunzip  z  通过Gzip处理存档
–bzip2  j  通过bzip2处理存档
–xz  J  通过xz处理存档

Linux Gzip、Bzip2和Xz实用程序

Gzip是最古老的压缩工具,提供最少的压缩,而bzip2提供改进的压缩。此外,xz是最新的,但(通常)提供最好的压缩。当然,最佳压缩的优点是有代价的:完成操作所需的时间以及在此过程中使用的系统资源。

通常情况下,使用这些实用程序压缩的tar文件分别具有.gz.bz2、 或.xz扩展名。在以下示例中,将使用这些文件:file1、file2、file3、file4和file5。

使用gzip、bzip2和xz压缩文件

将当前工作目录中的所有文件分组,并使用gzip、bzip2和xz压缩生成的包(请注意使用正则表达式来指定包中应包含哪些文件,这是为了防止归档工具对之前步骤中创建的tarball进行分组)。

# tar czf myfiles.tar.gz file[0-9]
# tar cjf myfiles.tar.bz2 file[0-9]
# tar cjf myfile.tar.xz file[0-9]

压缩多个文件

列出内容并更新/附加文件Tar存档

列出tarball的内容,并显示与长目录列表相同的信息。请注意,更新或追加操作不能直接应用于压缩文件。

1、解压缩Tar文件

如果需要更新或附加文件到压缩的tarball,则需要解压缩tar文件并更新/附加到它,然后再次压缩它:

# tar tvf [tarball]

列出存档内容

然后运行以下任意命令:

# gzip -d myfiles.tar.gz    [#1] 
# bzip2 -d myfiles.tar.bz2  [#2] 
# xz -d myfiles.tar.xz 	    [#3]

2、删除文件或将文件添加到Tar存档

# tar --delete --file myfiles.tar file4 (删除tarball中的文件)
# tar --update --file myfiles.tar file4 (添加更新的文件)

继续输入:

# gzip myfiles.tar [如果选择上面的#1]
# bzip2 myfiles.tar [如果选择上面的#2]
# xz myfiles.tar [如果选择上面的#3]

最后输入以下命令解压:

# tar tvf [tarball]

这时将file4的修改日期和时间与之前显示的信息进行比较,可以看出已经更新了。

从备份中排除文件

假设要执行用户主目录的备份。一个好的系统管理员经验是(也可能由公司政策指定)从备份中排除所有视频和音频文件。

也许你的第一种方法是从备份中排除所有具有.mp3.mp4扩展名(或其它扩展名)的文件。如果有其它用户将扩展名更改为.txt.bkp,那么你的这种方法可能就行不通。

所以,为了检测音频或视频文件,需要使用文件检查其文件类型。下面的shell脚本将完成这项工作:

#!/bin/bash
# Pass the directory to backup as first argument.
DIR=$1
# Create the tarball and compress it. Exclude files with the MPEG string in its file type.
# -If the file type contains the string mpeg, $? (the exit status of the most recently executed command) expands to 0, and the filename is redirected to the exclude option. Otherwise, it expands to 1.
# -If $? equals 0, add the file to the list of files to be backed up.
tar X <(for i in $DIR/*; do file $i | grep -i mpeg; if [ $? -eq 0 ]; then echo $i; fi;done) -cjf backupfile.tar.bz2 $DIR/*

使用Tar保留权限恢复备份

可以使用以下命令将备份还原到原始用户的主目录(本例中为user_restore),并保留权限:

# tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions
从存档中恢复文件

使用Find命令搜索文件

find命令用于在目录树中递归搜索匹配某些特征的文件或目录,然后可以打印匹配的文件或目录或对匹配项执行其它操作。通常,我们会按名称、所有者、组、类型、权限、日期和大小进行搜索。

find命令的基本语法如下:

# find [directory_to_search] [expression]

根据大小递归查找文件

查找(-f)当前目录(.)和下面两个子目录(-maxdeep 3表示当前工作目录和下面两个层数)中大小(-size)大于2MB的所有文件,命令如下:

# find . -maxdepth 3 -type f -size +2M

根据大小查找文件

查找并删除符合特定条件的文件

具有777权限的文件有时被视为对外部攻击者敞开大门。无论哪种方式,让任何人对文件进行任何操作都是不安全的。一般会采取比较激进的做法,将其删除!(“ {}+用于“集合”搜索结果)。

# find /home/user -perm 777 -exec rm '{}' +
查找具有777权限的文件

根据时间戳查找文件

在/etc中搜索访问(-atime)或修改(-mtime)超过(+180)或少于(-180)6个月或正好6个月前(180)的配置文件。按照下面的示例修改以下命令:

# find /etc -iname "*.conf" -mtime -180 -print

查找修改的文件

设置文件权限和基本属性

ls -l输出中的前10个字符是文件属性,这些字符中的第一个用于指示文件类型:

  • -: 普通文件
  • -d: 目录
  • -l: 符号链接
  • -c:字符设备(将数据视为字节流,即终端)
  • -b:块设备(处理块中的数据,即存储设备)

文件属性的下九个字符称为文件模式,表示文件所有者、文件组所有者和其它用户(通常为“world”)的读取(r)、写入(w)和执行(x)权限。

文件的读取权限允许打开和读取该文件,而如果还设置了执行权限,则目录的相同权限允许列出其内容。此外,文件中的执行权限允许将其作为程序处理并运行,而在目录中则允许将其cd到其中。

文件权限通过chmod命令更改,其基本语法如下:

# chmod [new_mode] file

其中new_mode是八进制数或指定新权限的表达式。八进制数可以从其二进制等效值转换而来,二进制等效值是根据所有者、组和world所需的文件权限计算出来的,具体如下所示。

另外,某些权限的存在等于2的幂(r=22、w=21、x=20),而不存在则等于0。例如:

文件权限

要以八进制形式设置上述文件的权限,请键入以下命令:

# chmod 744 myfile

此外,你还可以使用表达式设置文件的模式,该表达式用字母u表示所有者的权限,用字母g表示组所有者的权限,用o表示其余权限。

所有这些“个体用户”都可以同时用字母a代表。权限分别用+或-符号授予(或撤销)。

删除所有用户对脚本的执行权限

正如之前解释的,可以通过在某个权限前面加上减号来撤销某个权限,并指示是否需要为所有者、组所有者或所有用户撤销该权限。下面一行可以解释如下:更改所有(a)用户的模式,撤销(-)执行权限(x)。

# chmod a-x backup.sh
向所有者和组所有者授予文件的读取、写入和执行权限,以及全局的读取权限。当我们使用3位八进制数来设置文件的权限时,第一个数字表示所有者的权限,第二个数字表示组所有者的权限,第三个数字表示其它人的权限:
  • 所有者:(r=22+w=21+x=20=7)
  • 群组所有者:(r=22+w=21+ x=20=7)
  • World:(r=22+w=0+x=0= 4)
# chmod 774 myfile

随着时间的推移,通过学习之后,你将能够决定在每种情况下哪种更改文件模式的方法最适合你。以下长目录列表还显示文件的所有者及其组所有者(作为对系统中文件的基本但有效的访问控制):

Linux文件列表

使用chown命令更改文件所有权。所有者和群组所有者可以同时或单独更改。其基本语法如下:

# chown user:group file

其中至少需要一个用户或组。

chown命令示例

将文件的所有者更改为特定用户,命令如下:

# chown gacanepa sent

将文件的拥有者改为另一个指定的用户或组:

# chown gacanepa:gacanepa TestFile

仅将文件的组所有者更改为特定组,请注意组名称前面的冒号。

# chown :gacanepa email_body.txt

总结

以上这些是一些最常见的Linux文件操作命令,但还有许多其它命令和选项可用于更复杂的文件操作任务,这里就不多做介绍了。作为Linux系统管理员,最起码需要知道如何创建和恢复备份,如何查找系统中的文件并更改其属性,这样才能更好的使用和管理Linux系统。

赞(0)
网站声明:本文内容由趣云笔记原创,部分资源收集于网络,如有侵权请联系企鹅:2472781824删除。
文章名称:《Linux文件操作基本命令:归档压缩、设置权限和搜索查找》
文章链接:https://www.ecscoupon.com/1559.html
本站资源仅供个人学习交流,未经允许不得转载,更不允许用于商业用途。如需转载,请注明来源,感谢理解!