shell脚本学习-文件操作
记录各中操作文件的命令,不详细介绍
【1】查看文件(非内容)
1.ls:
列出文件,常常搭配 -l(也可ll),-h(显示单位),-a(显示隐藏文件)等等使用
2.file:
辨识文件类型
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
- -b 列出辨识结果时,不显示文件名称。
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
- -L 直接显示符号连接所指向的文件的类别。
- -m<魔法数字文件> 指定魔法数字文件。
- -v 显示版本信息。
- -z 尝试去解读压缩文件的内容。
【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种模式:
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- 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
上一篇: KVM虚拟化技术的-KVM安装
下一篇: Python 条件语句(if)