文件管理
# 文件管理命令
# file命令
我们可以通过file [文件路径]
命令来查看文件的类型。
在Windows中我们可以通过文件扩展名区分文件类型,但在Linux中则需要通过文件属性信息来区分,Linux包含以下几类文件:
d:目录文件。
-:普通文件,包括纯文本文件、可执行二进制文件、数据文件、压缩文件等。
l:链接文件。
c:字符设备文件,会不断产生字符信息。
b:块设备文件,存储设备的文件光盘、磁盘等。
- 磁盘设备文件:
/dev/sda
磁盘文件。- 随机设备文件:
/dev/urandom
可设置随机密码。- 输出设备文件:
/dev/zero
黑洞的出口文件。- 输入设备文件:
/dev/null
黑洞的入口文件。s:socket文件。
# ls命令
我们可以通过ls
命令来查看目录下的文件即其属性,他有以下常见参数:
# 查看当前目录的文件名
ls
# 查看指定目录的文件
ls /data/
# 查看文件属性,默认情况下CentOS会将设置ll为ls -l的别名
ls -l
# 查看文件inode号
ls -i
# 按时间进行排序
ls -t
# 按时间逆向排序
ls -tr
# 以人类易读方式显示文件大小
ls -h
# 显示出目录名后面的/
ls -F
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ls -li命令可以看到以下文件属性:
# ll -i同等于ls -l -i
> ll -i
# 当前目录总文件大小
total 5764
# 文件属性+文件名,除了文件名其他都是文件属性
50493066 -rwxr-xr-x 1 nginx nginx 5898320 Jan 28 17:19 nginx
2
3
4
5
6
7
50493066
:第一列是文件的inode号,文件的索引节点,记录文件数据在磁盘中的位置。
-
:第二列第一位是文件的类型,此处-表示普通文件。
rwxr-xr-x
:第二列第一位后面的是文件的权限位,三个为一组分别对应属主权限、属组权限、其他人权限,r读、w写、x执行。
1
:第三列是文件的硬链接数,文件可以有多个路径查看数据信息。
nginx
:第四列是文件的属主,所属用户即文件的创建者或拥有者。
nginx
:第五列是文件的属组,所属用户组即文件所属的用户组。
5898320
:第六列是文件的大小。
Jan 28 17:19
:第七列到文件名前是文件的创建时间。
# stat命令
我们可以通过stat [文件路径]
命令来查看文件的详细属性信息。
文件时间类型:
atime(Access time)访问时间:文件内容最后被访问的时间。
mtime(Modify time)修改时间:文件内容最后被修改的时间。
ctime(Change time)改变时间:文件属性最后被改变的时间。
# cat命令
我们可以通过cat [文件路径]
命令来查看单个或多个文件的内容。
使用-n参数可以显示文件的行号。
# less命令
我们可以通过less [文件路径]
命令,来以阅读模式阅读指定文件的内容。
使用-N参数可以显示文件的行号。
进入阅读模式后,可以通过一下快捷键进行操作:
回车键:向下逐行显示。
方向键上:向上逐行显示。
空格:向下翻页。
b:向上翻页。
/:搜索指定内容。
gg:转到首行。
Shift + G:转到末行。
q:结束查看。
# tail命令
我们可以通过tail命令来查看文件末尾几行的内容,或者追踪文件追加的内容。
# 查看文件末尾10行的内容。
tail -10 /data/test.txt
# 追踪文件追加的内容,如果文件改名或移动,即便改名或移动回来也会丢失目标。
tail -f /data/test.txt
# 追踪文件追加的内容,如果文件改名或移动,改名或移动回来会继续进行追踪。
tail -F /data/test.txt
2
3
4
5
6
7
8
# whereis命令
通过whereis [命令]
可以显示命令的所在路径以及相关的其他文件。
# locate命令
通过locate [文件名]
命令我们可以通过索引表来检索文件。
但是需要先执行
updatedb
命令来更新索引数据库,该数据库会记录文件与目录结构的对应关系。只有在数据库中的文件名才能被locate命令检索到。
# find命令
我们可以通过find [指定目录] [参数]
来在指定目录下搜索想要的文件。
常用参数:
-type f
查找指定类型文件(f、d、c、b、l)。
-name "*"
查找指定名称,支持*作为通配符。
-perm 644
查找指定权限的文件。
-delete
将找到的文件直接删除。
-exec [命令] [参数] {} \;
将找到的结果作为对象执行,{}会将找到的文件路径作为命令对象。
-mtime [范围]
按照修改时间查找文件,范围为+10表示查找10天前数据,范围为-10表示查找10天内数据,范围为10表示查找往前第10天的数据。
-inum [inode号]
根据inode号查找文件的其他硬链接。
常见应用:
批量打包:
find ./ -maxdepth 1 -type f -name "test*" | xargs tar czvf ./zip.tar.gz
tar czvf ./zip.tar.gz `find ./ -maxdepth 1 -type f -name "test*"`
# xargs命令
xargs命令可以将内容中的的列信息变成一行。
xargs < [文件]
:将所有信息变为一行。
xargs -n2 < [文件]
:将所有信息变为每两列一行。
xxx | xargs -i cp {} /dir
:将处理好的内容替换{}。
# column命令
column命令可以将内容显示成表格的方式,提高可读性、美观性。
column -t [文件]
:将内容分隔符替换为制表符。
# tr命令
我们可以使用tr "a-z" "A-Z" < [文件]
来将文件的内容全部转为大写并输出。
# ln命令
我们可以通过ln [参数] [源文件] [目标文件]
命令创建链接文件,默认是创建硬链接文件,使用-s参数可以创建软链接文件。
软链接即文件的快捷方式,仅指向源文件而非block块。软链接可以很方便的更新服务,直接使用软链接到最新版本的服务。
硬链接将会获得源文件的inode号,指向同样的block块。在一个分区中,inode号相同的文件,他们互为硬链接文件,他们地位对等。可以避免误删除,但无法避免误修改。如果想要删除文件,则需要确保文件硬链接数最终为0。
目录无法创建硬链接,但是目录中有.和..,它们也是硬链接,目录中的.同等于当前目录的硬链接,..同等于上级目录的硬链接。
软硬链接区别:
文件类型、权限、大小不一致。
硬链接inode号和源文件一致。
软连接inode号和源文件不一致。
源文件被删除后,硬链接依然有效。
源文件被删除后,软连接失效。
# 重定向符
除了通过命令编辑文件内容外,我们还可以通过重定向符来对文件内容进行覆盖重定向和追加重定向。
# 单行覆盖重定向输入
echo "test" > test.txt
# 多行追加输入,EOF可以替换成任意内容作为结束标志
cat >> ~/test.txt <<EOF
第一行
第二行
...
EOF
2
3
4
5
6
7
8
9
# {}序列符
在Linux中{}可以作为序列符生成一组数字序列、字母序列,用于通配文件等。
# 连续有规律序列
## 输出数字序列信息
echo {1..100}
## 补零输出数字
echo {001..100}Test
## 输出字母序列
echo This:{a..z}
# 不连续有规律的序列
# 奇数,表示1—10,从1开始每次加2,1,3,5,7,9
echo {1..10..2}
# 偶数,表示2—10,从2开始每次加2,2,4,6,8,10
echo {2..10..2}
# 无规律的序列
echo {1,3,4,1,7,5,29}
echo iam{a,b,d}
# 例如:一次创建多个目录,连续有规律以此类推,但不是所有命令都可以使用
touch ~/file{01..20}
# 快速将test文件备份成test.bak,反之还原也是一样
cp ~/test{,.bak}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# chattr命令
为了防范系统中的重要文件不被修改,我们可以通过chattr命令来设置文件隐藏属性,使root用户也不能直接修改相应文件,root用户也不能直接修改才是最安全的。
另外通过lsattr可以查看文件隐藏属性。
常用隐藏属性:
i
属性的文件,不能删除、改名、链接、写入内容。
a
属性的文件,只能追加内容,不能删除,多用于日志。
# + 追加文件隐藏属性i和a
chattr +ia test.txt
# - 移除文件隐藏属性a
chattr -a test.txt
# = 设定文件隐藏属性为a
chattr =a test.txt
# 查看文件隐藏属性
lsattr test.txt
2
3
4
5
6
7
8
9
10
11
# 时间相关命令
# date命令
我们可以通过date +[参数]
命令来显示系统时间,除了显示当前时间外,该命令还可以显示未来或过去的时间,或者修改当前时间。
日期格式符号:
%F
年月日%Y
年%m
月%d
日
%T
时分秒%H
时%M
分%S
秒
# 按指定格式显示时间
date "+%Y-%m-%d %H:%M:%S"
# 修改系统当前时间
date -s "2000-07-07 14:00"
# 显示一天后的时间
date +%F -d "+1day"
# 显示一天前的时间
date +%F -d "-1day"
# 可以作用于文件名进行文件备份
cp ./test.txt test.`date "+%Y.%m.%d"`.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
# ntpdate命令
通过ntpdate [服务器地址]
命令可以从指定ntp服务器获取时间进行同步。
例如:ntpdate ntp1.aliyun.com