文件新建

文件的时间属性分为访问时间(Access)、修改时间(Modify)、状态改变时间(Change),可以使用stat查看文件信息。
新建文件方式有多种,比如touch、vi等。下面介绍touch命令的使用。

touch命令

命令介绍

功能描述:更新文件的访问时间、修改时间为当前时间。文件如果不存在则创建空文件。
使用方法:
touch [OPTION]...FILE...
常用选项:

选项 说明
-a 只改变访问时间
-c,–no-create 不创建任何文件
-d,–date=STRING STRING替代当前时间
-m 只改变更改时间
-r,–reference=FILE 参照FILE更改时间
-t STAMP 使用时间戳代替当前时间

命令使用实例

默认用法,更改文件时间为当前时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@blog ~]# stat test1.txt
File: ‘test1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913954 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-12 21:54:14.286000000 +0800
Modify: 2015-08-12 21:54:14.286000000 +0800
Change: 2015-08-12 21:54:14.286000000 +0800
Birth: -
[root@blog ~]# touch test1.txt
[root@blog ~]# stat test1.txt
File: ‘test1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913954 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-12 21:54:48.671000000 +0800
Modify: 2015-08-12 21:54:48.671000000 +0800
Change: 2015-08-12 21:54:48.671000000 +0800

-a,只更改访问时间

1
2
3
4
5
6
7
8
9
[root@blog ~]# touch -a test1.txt
[root@blog ~]# stat test1.txt
File: ‘test1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913954 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-12 21:56:17.287000000 +0800
Modify: 2015-08-12 21:54:48.671000000 +0800
Change: 2015-08-12 21:56:17.287000000 +0800

-m,只改变更改时间

1
2
3
4
5
6
7
8
9
10
[root@blog ~]# touch -m test1.txt
[root@blog ~]# stat test1.txt
File: ‘test1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913954 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-12 21:56:17.287000000 +0800
Modify: 2015-08-12 21:57:08.959000000 +0800
Change: 2015-08-12 21:57:08.959000000 +0800
Birth: -

-r,参照给定文件更改时间

1
2
3
4
5
6
7
8
9
[root@blog ~]# touch -r test1.txt 123.txt
[root@blog ~]# stat 123.txt
File: ‘123.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913955 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-12 21:56:17.287000000 +0800
Modify: 2015-08-12 21:57:08.959000000 +0800
Change: 2015-08-12 21:58:48.402000000 +0800

-t,使用时间戳

1
2
3
4
5
6
7
8
9
[root@blog ~]# touch -t 209912121234 123.txt
[root@blog ~]# stat 123.txt
File: ‘123.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 913955 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2099-12-12 12:34:00.000000000 +0800
Modify: 2099-12-12 12:34:00.000000000 +0800
Change: 2015-08-12 22:00:15.235000000 +0800

文件删除

rm命令

命令介绍

功能描述:删除指定文件,默认不删除目录
使用方法:
rm [OPTION]...FILE...
常用选项:

选项 说明
-f,–force 忽略不存在的文件,并且删除前不提示
-i 删除前给出提示
-r,-R 递归删除目录及其文件

命令使用实例

默认删除文件,会给出提示

1
2
3
4
5
6
[root@blog ~]# ls
123.txt test1.txt
[root@blog ~]# rm test1.txt
rm: remove regular empty filetest1.txt’? y
[root@blog ~]# ls
123.txt

-f,无提示

1
2
3
4
5
[root@blog ~]# ls
123.txt
[root@blog ~]# rm -f 123.txt
[root@blog ~]# ls
[root@blog ~]#

-rf,无提示递归删除目录文件

1
2
3
4
5
6
[root@blog ~]# find test/
test/
test/test.txt
[root@blog ~]# rm -rf test
[root@blog ~]# ls
[root@blog ~]#

文件移动

mv命令

命令介绍

功能描述:重命名文件,或者移动文件
使用方法:
mv [OPTION]...[-T]SOURCE...DEST
mv [OPTION]...SOURCE...DIRECTORY
mv [OPTION]...-t DIRECTORY SOURCE
常用选项:

选项 说明
-f,–force 覆盖之前不给出提示
-T 对待目标为一个正常文件,可省略
-f 移动所有的源文件到指定目录

命令使用实例

[-T],重命名,其中-T选项可以省略

1
2
3
4
5
[root@blog ~]# ls
test.txt
[root@blog ~]# mv test.txt hello.txt
[root@blog ~]# ls
hello.txt

移动文件到指定目录,名称不变

1
2
3
4
5
6
7
8
9
[root@blog ~]# ls
hello.txt test
[root@blog ~]# mv hello.txt test/
[root@blog ~]# ls
test
[root@blog ~]# cd test/
[root@blog test]# ls
hello.txt
[root@blog test]#

-t,移动全部源文件到指定目录

1
2
3
4
5
6
7
[root@blog ~]# ls
1.txt 2.txt test
[root@blog ~]# mv -t test/ 1.txt 2.txt
[root@blog ~]# cd test/
[root@blog test]# ls
1.txt 2.txt hello.txt
[root@blog test]#

文件查找

在实际环境中,系统中的文件数量很多,我们可以根据文件类型、文件大小、修改时间等来迅速查找文件。
现有文件hello.txt,内容如下:

aA
abB
abcC
abcdD
abcdeE
abcdefF

wc命令

命令介绍

功能描述:输出文件的行数、字符数、字节数
使用方法:
wc [OPTION]...FILE...
常用选项:

选项 说明
-c,–bytes 统计输出字节数
-m,–chars 统计输出字符数
-l,–lines 统计输出行数
-w,–words 统计输出词语数

命令使用实例

以hello.txt为例:

1
2
3
4
5
6
7
8
[root@blog ~]# wc -c hello.txt
33 hello.txt
[root@blog ~]# wc -m hello.txt
33 hello.txt
[root@blog ~]# wc -l hello.txt
6 hello.txt
[root@blog ~]# wc -w hello.txt
6 hello.txt

grep命令

功能描述:根据条件输出匹配结果
使用方法:
grep [OPTION]...FILE...
常用选项:

选项 说明
-i,–ignore-case 忽略大小写
-v,–invert-match 反向查找
-c,–count 只输出匹配到的个数
-n,–line-number 输出匹配到的行号

命令使用实例

以hello.txt为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@blog ~]# grep -i a hello.txt
aA
abB
abcC
abcdD
abcdeE
abcdefF
[root@blog ~]# grep -v abcdD hello.txt
aA
abB
abcC
abcdeE
abcdefF
[root@blog ~]# grep -c a hello.txt
6
[root@blog ~]# grep -n abB hello.txt
2:abB

sort命令

功能描述:排序,默认升序
使用方法:
sort [OPTION]...FILE...
常用选项:
文件内容如下:

选项 说明
-r 降序排序

命令使用实例

以hello.txt为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@blog ~]# sort hello.txt
aA
abB
abcC
abcdD
abcdeE
abcdefF
[root@blog ~]# sort -r hello.txt
abcdefF
abcdeE
abcdD
abcC
abB
aA

tail命令

功能描述:默认输出文件后10行
使用方法:
tail [OPTION]...FILE...
常用选项:

选项 说明
-c,–bytes=K 输出后K个字节
-f,–follw 循环读取,主要用于读取日志
-n,–lines=K 输出后K行,默认为10

命令使用实例

以hello.txt为例:

1
2
3
4
5
6
7
8
9
10
11
12
[root@blog ~]# tail hello.txt
aA
abB
abcC
abcdD
abcdeE
abcdefF
[root@blog ~]# tail -c 5 hello.txt
defF
[root@blog ~]# tail -n 1 hello.txt
abcdefF
[root@blog ~]#

head命令

功能描述:默认输出文件前10行
使用方法:
head [OPTION]...FILE...
常用选项:

选项 说明
-c,–bytes=K 输出前K个字节
-n,–lines=K 输出前K行

命令使用实例

以hello.txt为例:

1
2
3
4
5
6
7
8
9
10
11
[root@blog ~]# head hello.txt
aA
abB
abcC
abcdD
abcdeE
abcdefF
[root@blog ~]# head -c 3 hello.txt
aA
[root@blog ~]# head -n 1 hello.txt
aA

find命令

功能描述:输出文件的行数、字符数、字节数,默认输出当前目录以及子目录下的所有文件,包括隐藏文件。
使用方法:
find [PATH] [EXPRESSION] [FILENAME]
常用选项:

选项 说明
-type 指定文件类型
-printf 指定格式输出,默认输出文件名
-name 指定文件名,单独使用时可省略
-iname 指定文件名,忽略大小写
-regex 正则匹配
size 文件大
-maxdepth 最大目录深度
-mindepth 至少目录深度
PATH 默认为当前目录

命令使用实例

统计普通文档的个数

[root@blog ~]# find -type f |wc -l
14

其中-type 文件类型 包括以下几种:

  • b 块设备
  • d 目录
  • c 字符设备
  • P 管道文档
  • l 符号连接文档
  • f 普通文档

根据时间排序
%Ak,通过k形式的文件最后访问时间。其中k的主要取值如下:

k取值 说明
@ 1970.1.1 00:00至今过去的秒数
T 时间,24小时,hh:mm:ss
+ 日期+时间,如2004-04-28+22:22:05.0

%Tk,通过k形式的文件最后更改时间,k值和%Ak一样。
%t,以Ctime函数的形式返回文件最后更改时间
%p,带路径的文件名
%s,文件大小
根据最后更改时间排序:

1
2
3
4
5
6
[root@blog ~]# find -type f -printf '%T+ %p\n'|sort |head -n 5
2013-12-29+10:26:31.0000000000 ./.bash_logout
2013-12-29+10:26:31.0000000000 ./.bash_profile
2013-12-29+10:26:31.0000000000 ./.bashrc
2013-12-29+10:26:31.0000000000 ./.cshrc
2013-12-29+10:26:31.0000000000 ./.tcshrc

根据最后访问时间排序:

1
2
3
4
5
6
[root@blog ~]# find -type f -printf '%A+ %p\n'|sort |head -n 5
2013-12-29+10:26:31.0000000000 ./.cshrc
2013-12-29+10:26:31.0000000000 ./.tcshrc
2015-08-05+11:53:46.6250000000 ./.cache/pip/http/f/e/d/0/e/fed0ed508030b766d5b0c2792132c8bf197804464765b46b361f93a4
2015-08-05+11:53:46.6360000000 ./.cache/pip/selfcheck.json
2015-08-05+11:53:46.9460000000 ./.cache/pip/http/a/2/2/9/b/a229b0c591a4dcdfd85b2c9b34cc4d6d2d60cb30cca928b18f6699df

获取/usr目录下后缀名为txt的前两个文件:

1
2
3
[root@blog ~]# find /usr/ -name "*.txt" |head -n 2
/usr/share/doc/git-1.8.3.1/RelNotes/1.6.1.4.txt
/usr/share/doc/git-1.8.3.1/RelNotes/1.7.0.7.txt

获取最近访问的5个文件:

1
2
3
4
5
6
[root@blog ~]# find -type f -printf '%A@ %Aa %t\n'|sort |tail -n 5
1439296501.2970000000 Tue Sun Dec 29 10:26:31.0000000000 2013
1439382712.9140000000 Wed Wed Aug 12 20:19:18.0937000000 2015
1439383521.5720000000 Wed Wed Aug 12 20:45:21.0572000000 2015
1439384494.4100000000 Wed Wed Aug 12 21:01:34.0410000000 2015
1439384501.0380000000 Wed Wed Aug 12 21:01:41.0038000000 2015

du命令

估计某个特定目录或文件在文件系统上磁盘的使用情况
最后,当掌握了上述命令的基本使用方法,就可以根据的需求进行文件查找,当然文件查找的命令也不是唯一的,要灵活是运用,多看手册。