Linux文件和目录操作命令

pwd:打印当前所在的路径

pwd是"print working directory"的缩写,功能是打印当前工作目录的绝对路径。通常情况下,使用pwd命令不需要带任何参数。

参数选项 功能描述
-L logical的缩写,表示显示逻辑路径(忽略链接文件),取PWD系统环境变量的值,不常用
-P physical的缩写,表示显示物理路径时如果当前目录路径是软链接文件,则会显示软链接文件对应的源文件,不常用

tree:以树形结构显示目录下的内容

功能是以树形结构列出指定目录下的所有内容,包括所有文件、子目录及子目录里的目录和文件。

语法格式:tree [选项] [目录]

参数选项和说明:

参数选项 功能描述
-a 显示所有文件,包括隐藏文件(以.开头的文件)
-d 只显示目录
-f 显示每个文件的全路径
-i 不显示树枝,经常与-f参数配合使用
-L 遍历目录的最大层数
-F 对于不同类型的文件,在结尾加上不同的标识,类似ls的-F选项

mkdir:创建目录

语法格式:mkdir [选项] [目录]

参数选项和说明:

参数选项 功能描述
-p 递归创建目录
-m 设置新创建目录的默认目录对应的权限
-v 显示创建目录的过程
[root@liujianfan 19:07:31 /test]# mkdir -m 333 /test/hhzz
[root@liujianfan 19:07:59 /test]# ls -ld /test/hhzz
d-wx-wx-wx. 2 root root 4096 Nov 10 19:07 /test/hhzz
[root@liujianfan 19:08:09 /test]# 

创建多级目录的技巧:

在/hai目录下创建两个目录:dir1和dir2,并且dir1、dir2目录下都有dir11、dir22:

[root@liujianfan 19:11:44 ~]# mkdir -p /hai/{dir1,dir2}/{dir11,dir22}
[root@liujianfan 19:20:35 ~]# tree /hai
/hai
├── dir1
│   ├── dir11
│   └── dir22
└── dir2
    ├── dir11
    └── dir22

6 directories, 0 files
[root@liujianfan 19:20:39 ~]# 

在/hello目录下创建dir1olddir6old,比起它们的目录下都有目录ai:

[root@liujianfan 19:20:39 ~]# mkdir -p /hello/dir{1..6}old/{a..i}
[root@liujianfan 19:22:59 ~]# tree /hello
/hello
├── dir1old
│   ├── a
│   ├── b
│   ├── c
│   ├── d
│   ├── e
│   ├── f
│   ├── g
│   ├── h
│   └── i
├── dir2old
│   ├── a
│   ├── b
│   ├── c
│   ├── d
│   ├── e
│   ├── f
│   ├── g
│   ├── h
│   └── i
├── dir3old
│   ├── a
│   ├── b
│   ├── c
│   ├── d
│   ├── e
│   ├── f
│   ├── g
│   ├── h
│   └── i
├── dir4old
│   ├── a
│   ├── b
│   ├── c
│   ├── d
│   ├── e
│   ├── f
│   ├── g
│   ├── h
│   └── i
├── dir5old
│   ├── a
│   ├── b
│   ├── c
│   ├── d
│   ├── e
│   ├── f
│   ├── g
│   ├── h
│   └── i
└── dir6old
    ├── a
    ├── b
    ├── c
    ├── d
    ├── e
    ├── f
    ├── g
    ├── h
    └── i

60 directories, 0 files
[root@liujianfan 19:23:07 ~]# 

touch:创建空文件和改变文件和目录的时间戳

语法格式:touch [选项] [文件]

参数选项 功能描述
-a 只更改指定文件的最后访问时间
-d STRING 使用字符串STRING代表的时间作为模板设置指定文件的时间属性
-m 只更改指定文件的最后修改时间
-r file 将指定文件的时间属性设置为与模板文件file的时间属性相同
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss]格式的时间设置文件的时间属性。格式的含义从左到右依次为:世纪、年、月、日、时、分、秒

*使用stat命令可以查看文件的时间戳属性

[root@liujianfan 01:34:00 ~]# touch new
[root@liujianfan 01:34:41 ~]# stat new
  File: ‘new’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 77463376    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-03 01:34:41.667556384 +0800
Modify: 2019-03-03 01:34:41.667556384 +0800
Change: 2019-03-03 01:34:41.667556384 +0800
 Birth: -
[root@liujianfan 01:34:48 ~]# 

文件的时间戳属性分为访问时间、修改时间、状态改变时间。

修改最后访问时间:

[root@liujianfan 01:34:48 ~]# touch -a new
[root@liujianfan 01:35:29 ~]# stat new
  File: ‘new’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 77463376    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-03 01:35:29.616560085 +0800
Modify: 2019-03-03 01:34:41.667556384 +0800
Change: 2019-03-03 01:35:29.616560085 +0800
 Birth: -
[root@liujianfan 01:35:32 ~]# 

修改最后修改的时间:

[root@liujianfan 01:35:32 ~]# touch -m new
[root@liujianfan 01:36:06 ~]# stat new
  File: ‘new’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 77463376    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-03 01:35:29.616560085 +0800
Modify: 2019-03-03 01:36:06.113562902 +0800
Change: 2019-03-03 01:36:06.113562902 +0800
 Birth: -
[root@liujianfan 01:36:08 ~]# 

指定时间属性修改/创建文件:

[root@liujianfan 01:36:08 ~]# touch -d 20201111 new2
[root@liujianfan 01:37:37 ~]# ls -l new2
-rw-r--r-- 1 root root 0 Nov 11  2020 new2

ls:显示目录下的内容及其相关属性信息

语法格式:ls [选项] [文件或目录]

参数选项 功能描述
-l 使用长格式列出文件及目录信息
-a 显示目录下的所有文件
-t 根据最后修改时间(mtime)排序,默认是以文件名排序
-r 依相反次序排序
-F 在条目后面加上文件类型的指示符号
-p 只在目录后面加上"/"
-i 显示inode节点信息
-d 当遇到目录时,列出目录本身而非目录内的文件,并且不跟随符号链接
-h 以符合人类可读的形式显示文件或者目录的大小,如1KB、22MB等
-A 列出所有文件,但是不包括"."和".."这两个目录
-S 根据文件大小排序
-R 递归列出所有子目录
-x 逐行列出项目而不是逐栏列出
-X 根据扩展名排序
-c 根据状态改变时间排序
-u 根据最后访问时间排序
--color= 不同的文件类型显示不同的参数颜色,never表示不显示,always表示总是显示,auto表示自动显示
--full-time 以完整的时间格式输出
--time-style= 以不同的时间格式输出,long-iso效果最好
--time= 按不同的时间属性输出,不加此参数默认以最后修改时间输出

显示完整的时间属性:

[root@liujianfan 02:21:57 ~]# ls -al --time-style=long-iso
total 736696
dr-xr-x---.  9 root root      4096 2019-03-03 01:46 .
dr-xr-xr-x. 26 root root      4096 2019-01-16 19:49 ..
-rw-r--r--.  1 root root         0 2018-10-23 04:38 04:38:10.tex
-rw-r--r--.  1 root root         0 2018-10-24 08:41 1
drwxr-xr-x.  3 root root        16 2018-10-24 08:38 122
drwxr-xr-x.  5 root root        32 2018-10-24 08:39 156

ls -F命令的输出:

1.目录的结尾会加上"/"

2.普通文件结尾会加上"*"

3.套接字文件结尾会加上"="

4.FIFOs文件会加上"|"

5.符号链接文件会加上"@"

cp:复制文件或目录

语法格式:cp [选项] [源文件] [目标文件]

参数说明:

参数选项 功能描述
-p 复制文件时保持源文件的所有者、权限信息及时间属性
-d 如果复制的源文件是符号链接,那么仅复制符号链接本身,而且保留符号链接所指向的目标文件或目录
-r 递归复制目录
-a 等同于上面的p、d、r这三个选项功能的总和
-i 覆盖已有文件前提示用户确认
-t 默认情况下命令格式是"cp 源文件 目标文件",使用该参数可以颠倒源目文件的顺序:cp 目标文件 源文件

mv:移动或重命名文件

语法格式:mv [选项] [目标文件]

参数选项说明:

参数选项 功能描述
-f 若目标文件已经存在,则不会询问而是直接覆盖
-i 若目标文件已经存在,则会询问是否覆盖
-n 不覆盖已存在的文件
-t 指定mv的目标目录,适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
-u 在源文件比目标文件新,或目标文件不存在时才进行移动

rm:删除文件或目录

语法格式:rm [选项] [文件或目录]

参数选项 功能描述
-f 强制删除。忽略不存在的文件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前需要确认
-r 递归删除目录

ln:硬链接与软链接

语法格式:ln [选项] [源文件或目录] [目标文件或目录]

参数选项 功能描述
无参数 创建硬链接
-s 创建软链接(符号链接)

硬链接和软链接:

硬链接:硬链接生成的是普通文件(-字符),相当于文件的另外一个入口。具有相同的inode节点号的多个文件互为硬链接文件。删除硬链接文件或者源文件的任何一个,文件实体没有被真正删除。

软链接:目标文件不能事先存在,软链接生成的是符号链接文件(l类型),类似于windows的快捷方式,里面存放的是源文件的路径,指向源文件实体。即使删除了源文件,软链接文件依然存在,但是无法访问源文件。软链接和源文件是不同类型的文件,inode号也不同。

注意:对于目录,不可以创建硬链接,但是可以创建软链接。需要注意的是,目录是可以跨文件系统的。

find:查找目录下的文件

语法格式:find [选项] [路径] [操作语句]

find命令的详细语法:

find [选项] [路径] [expression]

			   [expression包含options、tests、actions三个模块 ]

Options参数说明:

参数选项 功能描述
-depth 从指定目录下最深层的子目录开始查找
-maxdepth levels 查找的最大目录级数,levels为自然数
-regextype type 改变正则表达式的模式,默认为emacs

Tests模块参数说明:

参数选项 功能描述
-mtime [-n,n,+n] 按照文件的修改时间来查找文件,-n表示文件修改时间距离现在n天之内,+n表示距离现在n天以前
-atime 按照文件的访问时间来查找文件
-ctime 按照文件的改变时间来查找文件
-amin 按照文件的访问时间来查找文件,单位为分钟
-cmin 按照文件的改变时间来查找文件,单位为分钟
-mmin 按照文件的修改时间来查找文件,单位为分钟
-group 按照文件所属的组来查找文件
-name 按照文件名称来查找文件,只支持*、?、[]等等通配符
-newer 查找更改时间比指定文件新的文件
-nogroup 查找没有有效用户组的文件,该文件所属的组在/etc/groups中不存在
-nouser 查找没有有效属主的文件,该文件的属主在/etc/passwd中不存在
-path 指定路径样式,配合-prune参数排除指定目录
-perm 按照文件权限来查找文件
-regex 接正则表达式
-iregex 接正则表达式,不区分大小写
-size n[cwbkMG] 查找文件长度为n块的文件,带有cwbkMG时表示文件长度以字节计
-user 按照文件属主来查找文件
-type 查找某一类型的文件:b、c、d、p(管道文件)、l、f、s、D

Actions模块参数说明:

参数选项 功能描述
-delete 将查找出的文件删除
-exec 对匹配的文件执行该参数所给出的shell命令
-ok 和-exec作用相同,但是会让用户先确定是否执行
-prune 使用这一选项可以使find命令不在当前指定的命令中查找
-print 将匹配到的文件输出到标准输出
OPERATORS find支持逻辑运算符
! 取反
-a 取交集,全拼为and
-o 取并集,全拼为or

例子:

1.查找当前目录下,两天内受到访问的文件:

[root@liujianfan 20:15:26 ~]# find . -atime -2

2.查找/var/log/下6天以前以".log"结尾的被修改的文件:

[root@liujianfan 20:23:07 ~]# find /var/log/ -mtime +6 -name "*.log"

3.查找当前目录下的所有目录:

[root@liujianfan 20:23:26 ~]# find . -type d

4.查找当前目录下不是目录的文件:

[root@liujianfan 21:33:23 ~]# find . ! -type d

5.按照目录或者文件的权限来查找文件:

[root@liujianfan 21:34:29 ~]# find . -perm 666

6.查找当前目录下大小是100字节的文件文件:

[root@liujianfan 21:35:27 ~]# find . -size 100c

7.在当前目录下查找更改时间比文件file.txt新的文件:

[root@liujianfan 21:37:50 ~]# find . -newer file.txt

8.查找当前目录下更改时间在14天以前的文件,并且在-exec选项中使用rm命令删除:

[root@liujianfan 21:43:20 ~]# find . -type f -mtime +14 -exec rm {} \;

9.使用-exec选项的安全模式-ok:

[root@liujianfan 21:43:20 ~]# find . -type f -mtime +14 -ok rm {} \;

xargs:将标准输入转换为命令行参数

语法格式:xargs [选项]

参数说明:

参数选项 功能描述
-n 指定每行的最大参数量n,可以将标准输入的文本划分为多行,每行n个参数,默认空格分隔
-d 自定义分隔符
-i 以{}替代前面的结果
-I 指定一个符号替代前面的结果,而不用-i参数默认的{}
-p 提示让用户确认是否执行后面的命令
-0 用null代替空格作为分隔符

多行文本输入变单行:

[root@liujianfan 22:01:58 /text]# cat tt.txt 
1 2 3 4 5 6
7 8 9 
10 11
[root@liujianfan 22:02:49 /text]# xargs <tt.txt 
1 2 3 4 5 6 7 8 9 10 11

通过-n参数指定每行的输出个数:

[root@liujianfan 22:04:14 /text]# xargs -n 3 < tt.txt           
1 2 3
4 5 6
7 8 9
10 11

使用-d选项自定义分隔符:

[root@liujianfan 06:20:54 /]# echo hzdXhzdXhzdXhzdX | xargs -d X -n 2
hzd hzd
hzd hzd

rename:重命名文件

语法格式:rename from to file

from:代表需要替代或者需要处理的字符(一般是文件名的一部分)

to:把前面的from代表的内容替换为to代表的内容

file:需要处理的文件。

[root@liujianfan 06:24:47 /test]# ls
access_www_2018-10-01.log  access_www_2018-10-08.log  access_www_2018-10-15.log  access_www_2018-10-22.log
access_www_2018-10-02.log  access_www_2018-10-09.log  access_www_2018-10-16.log  access_www_2018-10-23.log
access_www_2018-10-03.log  access_www_2018-10-10.log  access_www_2018-10-17.log  access_www_2018-10-24.log
access_www_2018-10-04.log  access_www_2018-10-11.log  access_www_2018-10-18.log  access_www_2018-10-25.log
access_www_2018-10-05.log  access_www_2018-10-12.log  access_www_2018-10-19.log
access_www_2018-10-06.log  access_www_2018-10-13.log  access_www_2018-10-20.log
access_www_2018-10-07.log  access_www_2018-10-14.log  access_www_2018-10-21.log
[root@liujianfan 06:24:48 /test]# rename .log .jpg *
[root@liujianfan 06:25:14 /test]# ls
access_www_2018-10-01.jpg  access_www_2018-10-08.jpg  access_www_2018-10-15.jpg  access_www_2018-10-22.jpg
access_www_2018-10-02.jpg  access_www_2018-10-09.jpg  access_www_2018-10-16.jpg  access_www_2018-10-23.jpg
access_www_2018-10-03.jpg  access_www_2018-10-10.jpg  access_www_2018-10-17.jpg  access_www_2018-10-24.jpg
access_www_2018-10-04.jpg  access_www_2018-10-11.jpg  access_www_2018-10-18.jpg  access_www_2018-10-25.jpg
access_www_2018-10-05.jpg  access_www_2018-10-12.jpg  access_www_2018-10-19.jpg
access_www_2018-10-06.jpg  access_www_2018-10-13.jpg  access_www_2018-10-20.jpg
access_www_2018-10-07.jpg  access_www_2018-10-14.jpg  access_www_2018-10-21.jpg

chattr:改变文件的扩展属性

语法格式:chattr [选项] [模式] [文件或者目录]

选项参数说明:

参数选项 功能描述
-R 递归更改目录属性
-V 显示命令执行过程

模式参数说明:

参数选项 功能描述
+ 增加参数
- 移除参数
= 更新为指定的参数
A 告诉系统不要修改这个文件的最后访问时间
a 只能向文件中添加数据,而不能删除,多用于服务器日志文件
i 设定文件不能删除、改名、写入或者增加内容

设置只能往文件里面追加内容,但是不能删除文件:

[root@liujianfan 07:13:09 ~/test2]# chattr +a chattr.txt 
[root@liujianfan 07:13:24 ~/test2]# lsattr chattr.txt 
-----a---------- chattr.txt
[root@liujianfan 07:13:28 ~/test2]# 

root用户也无法删除,只能追加内容:

[root@liujianfan 07:13:28 ~/test2]# rm -f chattr.txt 
rm: cannot remove ‘chattr.txt’: Operation not permitted
[root@liujianfan 07:14:28 ~/test2]# echo hello >> chattr.txt 
[root@liujianfan 07:14:49 ~/test2]# cat chattr.txt 
hello
[root@liujianfan 07:14:53 ~/test2]# 

给文件加锁,设置为只读:

[root@liujianfan 07:16:34 ~/test2]# touch chattr2.txt
[root@liujianfan 07:17:00 ~/test2]# chattr +i chattr2.txt 
[root@liujianfan 07:17:09 ~/test2]# rm -f chattr2.txt 
rm: cannot remove ‘chattr2.txt’: Operation not permitted
[root@liujianfan 07:17:23 ~/test2]# echo hi >> chattr2.txt 
-bash: chattr2.txt: Permission denied
[root@liujianfan 07:17:34 ~/test2]#
posted @ 2019-03-04 00:21  HzdWwZz"LJF  阅读(466)  评论(0编辑  收藏  举报