欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚本学习-文件操作

程序员文章站 2022-06-21 18:54:17
...

记录各中操作文件的命令,不详细介绍

【1】查看文件(非内容)

1.ls:

列出文件,常常搭配 -l(也可ll),-h(显示单位),-a(显示隐藏文件)等等使用

shell脚本学习-文件操作

2.file:

辨识文件类型

file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
  • -b  列出辨识结果时,不显示文件名称。
  • -c  详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
  • -L  直接显示符号连接所指向的文件的类别。
  • -m<魔法数字文件>  指定魔法数字文件。
  • -v  显示版本信息。
  • -z  尝试去解读压缩文件的内容。

shell脚本学习-文件操作

【2】修改文件属性

1.chown

修改文件属主和属组

chown [-cfhvR] [--help] [--version] user[:group] file...
  • user : 新的文件拥有者的使用者 ID
  • group : 新的文件拥有者的使用者组(group)
  • -c : 显示更改的部分的信息
  • -f : 忽略错误信息
  • -h :修复符号链接
  • -v : 显示详细的处理信息
  • -R : 处理指定目录以及其子目录下的所有文件
  • --help : 显示辅助说明
  • --version : 显示版本

2.chmod

更改文件属性

chmod [-cfvR] [--help] [--version] mode file...
  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
  • --help : 显示辅助说明
  • --version : 显示版本

【用数字加权限】

chmod 777 test.txt

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 ugo+r file1.txt【user,group,other都加度权限】【也可以用a代表所有人 chmod a+r file1.txt】
chmod u+x file1.py【user加可执行权限】

【修改权限】

chmod ug=rwx,o=x file【user,group拥有读写,执行权限,other只有执行权限】

3.chattr

改变文件属性,这些属性共有以下8种模式:

  1. a:让文件或目录仅供附加用途。
  2. b:不更新文件或目录的最后存取时间。
  3. c:将文件或目录压缩后存放。
  4. d:将文件或目录排除在倾倒操作之外。
  5. i:不得任意更动文件或目录。
  6. s:保密性删除文件或目录。
  7. S:即时更新文件或目录。
  8. u:预防意外删除。
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

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

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

  -V 显示指令执行过程。

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

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

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

 

chattr +i file【防止文件被修改】
chattr +a file【让文件只能被写,但不能被删除】

【3】创建文件:

1.mkdir 创建目录

$ mkdir directory_file     #创建目录文件,目录文件里头可以包含更多文件

2.touch 创建普通文件

$ touch regular_file      #创建普通文件

3.ln 创建硬链接

$ ln regular_file regular_file_hard_link  #硬链接,是原文件的一个完整拷比

4.ln -s 创建软连接

$ ln -s regular_file regular_file_soft_link  #类似一个文件指针,指向原文件

5.mkfifo 创建fifo

$ mkfifo fifo_pipe   #或者通过 "mknod fifo_pipe p" 来创建,FIFO满足先进先出的特点

6.mknod

$ mknod hda1_block_dev_file b 3 1  #块设备
$ mknod null_char_dev_file c 1 3   #字符设备

【4】删除文件

$ rm regular_file
$ rmdir directory_file
$ rm -r directory_file_not_empty

 

【5】复制文件

用 cp 命令常规地复制文件(复制目录需要 -r 选项)

$ cp regular_file regular_file_copy
$ cp -r diretory_file directory_file_copy

【7】移动文件(修改文件名)

mv regular_file regular_file_new_name 【重命名文件】
mv regular_file ./test/ 【移动文件】

【8】压缩文件

tar

$ tar -cf file.tar file   #压缩
$ tar -xf file.tar    #解压

gz

$ gzip  -9 file
$ gunzip file

tar.gz

$ tar -zcf file.tar.gz file
$ tar -zxf file.tar.gz

bz2

$ bzip2 file
$ bunzip2 file

tar.bz2

$ tar -jcf file.tar.bz2 file
$ tar -jxf file.tar.bz2

【9】文件搜索(非文件内容)

1.find

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

[参数]

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去n天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去n天内被修改过的文件

-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

-type c : 文件类型是 c 的文件。

d: 目录

c: 字型装置文件

b: 区块装置文件

p: 具名贮列

f: 一般文件

l: 符号连结

s: socket

[举例]

将目前目录及其子目录下所有延伸档名是 c 的文件列出来。

# find . -name "*.c"

将目前目录其其下子目录中所有一般文件列出

# find . -type f

将目前目录及其子目录下所有最近 20 天内更新过的文件列出

# find . -ctime -20

查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

# find /var/log -type f -mtime +7 -ok rm {} \;

查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

# find . -type f -perm 644 -exec ls -l {} \;

为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

# find / -type f -size 0 -exec ls -l {} \;

 

2.whereis

用于返回某个命令、源文件、man 文件的路径

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
  • -b  只查找二进制文件。
  • -B<目录>  只在设置的目录下查找二进制文件。
  • -f  不显示文件名前的路径名称。
  • -m  只查找说明文件。
  • -M<目录>  只在设置的目录下查找说明文件。
  • -s  只查找原始代码文件。
  • -S<目录>  只在设置的目录下查找原始代码文件。
  • -u  查找不包含指定类型的文件。

[aaa@qq.com ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
 

3.which

用于返回某个命令的全路径

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

[aaa@qq.com ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls