CentOS 7 文件操作命令
在 CentOS 7 系统中对文件操作的一些命令。
1. 创建一个文件
使用touch
命令创建文件。例如,在/data
目录下创建一个test.txt
文件。
创建test.txt
文件:
touch /data/test.txt
查看/data
目录下刚刚创建的文件:
ls -l /data/
2. 编辑文件
使用vi
命令编辑/data/test.txt
文件。vi 是一种编辑器。
vi /data/test.txt
按下i
键,进入编辑模式。内容编写完毕后,按下Esc
键,退出编辑模式。然后,退出并保存,请依次按下:wq
三个键,并回车。
关于退出编辑文件,有 4 个命令:
:q
退出。用于未修改文件内容,直接退出。:wq
退出并保存。:q!
强制退出不保存。用于已修改文件内容,而不希望被保存。:wq!
强制退出并保存。
其中w
为英文 write ;q
为英文 quit 。
3. 查看文件内容
使用cat
命令来查看文件中的内容。
cat /data/test.txt
4. 写入文件
使用echo
命令与>>
追加重定向符号,将内容写入某个文件内的最后一行。
echo Hello sophia >>/data/test.txt
如果想一次性写入多行到文件,使用如下方法。
cat >>/data/test.txt<<EOF
Hello
World
!
EOF
5. 复制文件或目录
使用cp
命令,英文全称为 copy 。
把
test.txt
文件,复制到/tmp/
目录。[root@centos7 ~]# cp /data/test.txt /tmp/
[root@centos7 ~]# ls -l /tmp/
total 16
-rw-r--r--. 1 root root 127 Apr 17 20:13 test.txt
-rw-------. 1 root root 0 Apr 10 20:12 yum.log
[root@centos7 ~]#
把
test.txt
文件,复制到当前所在目录,使用特殊符号.
代表当前目录。# 查看当前所在目录
[root@centos7 ~]# pwd
/root
# 复制 test.txt 文件到当前所在目录
[root@centos7 ~]# cp /root/data/test.txt .
# 查看当前所在目录文件列表
[root@centos7 ~]# ls -l
total 12
-rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 17 20:23 data
-rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
[root@centos7 ~]#
使用
cp
命令,备份文件。将test.txt
文件备份为test.txt.bak
。[root@centos7 ~]# cp /data/test.txt /data/test.txt.bak
[root@centos7 ~]# ls -l /data
total 12
-rw-r--r--. 1 root root 127 Apr 17 18:52 test.txt
-rw-r--r--. 1 root root 127 Apr 17 20:23 test.txt.bak
[root@centos7 ~]#
使用
cp -r
命令,复制目录。- 参数
-r
为递归复制。复制目录及目录里面的内容。 - 参数
-p
复制时保持文件属性不变。 - 参数
-a
为复制所有。与参数-pdr
等价。
将
/data/
目录复制到/tmp/
目录。[root@centos7 ~]# cp -r /data/ /tmp/
[root@centos7 ~]# ls -l /tmp/
total 20
drwxr-xr-x. 2 root root 4096 Apr 17 20:31 data
-rw-r--r--. 1 root root 127 Apr 17 20:13 test.txt
-rw-------. 1 root root 0 Apr 10 20:12 yum.log
[root@centos7 ~]#
6. 移动文件或目录
使用mv
命令,英文全称为 move 。
把
/data/
目录移动到/root/
目录。[root@centos7 ~]# mv /data/ /root/
[root@centos7 ~]# ls -l /root/
total 8
-rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 17 20:23 data
[root@centos7 ~]#
把
/data/
目录,移动到当前所在目录,使用特殊符号.
代表当前目录。# 查看当前所在目录
[root@centos7 ~]# pwd
/root
# 把 /data/ 目录,移动到当前所在目录。
[root@centos7 ~]# mv /data/ .
[root@centos7 ~]# ls -l
total 12
-rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 18 11:33 data
-rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
[root@centos7 ~]#
把
/root/test.txt
文件,移动到/root/data
目录下。使用特殊符号.
代表当前目录。[root@centos7 data]# pwd
/root/data
[root@centos7 data]# mv /root/test.txt .
[root@centos7 data]# ls -l
total 4
-rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
[root@centos7 data]#
7. 删除文件或目录
使用rm
命令删除文件或目录,默认无法删除目录,它的英文全称为 remove 。
参数 | 描述 |
---|---|
-r |
递归删除 |
-f |
强制删除 |
删除
/tmp/
目录下的test.txt
文件。[root@centos7 ~]# rm /tmp/test.txt
rm: remove regular file ‘/tmp/test.txt’? y
输入
y
确定删除。如果不想被询问是否删除,则加参数-f
删除文件。[root@centos7 ~]# rm -f /tmp/test.txt
使用
rm -rf
命令,删除/tmp/
目录下的/data/
目录。[root@centos7 ~]# rm -rf /tmp/data/
8. 查找文件或目录
使用find
命令,查找文件或目录。
参数 | 描述 |
---|---|
-type |
查找类型。f 为文件 file,d 为目录 directory 。 |
-name |
查找名称。可以使用 * 作为通配符,匹配名称。 |
在
/root/data/
目录中,查找test.txt
文件。如果找到了,则输出文件位置。没找到则无输出。[root@centos7 ~]# find /root/data/ -type f -name "test.txt"
/root/data/test.txt
[root@centos7 ~]#
在
/root/
目录中,查找名字为data
的目录。如果找到了,则输出目录位置。没找到则无输出。[root@centos7 ~]# find /root/ -type d -name "data"
/root/data
[root@centos7 ~]#
使用
*
作为通配符,匹配名称。[root@centos7 ~]# find /root/ -type d -name "dat*"
/root/data
[root@centos7 ~]#
find
命令与管道|
配合使用。管道的意思是,|
前面的命令执行成功后,交给后面的命令再执行。# 查找 *.txt 文件名,并显示详细列表。
[root@centos7 ~]# find /root/data/ -type f -name "*.txt"|xargs ls -l
-rw-r--r--. 1 root root 10 Apr 17 19:44 /root/data/num.txt
-rw-r--r--. 1 root root 127 Apr 17 18:52 /root/data/test.txt
# 查看两个文件内容
[root@centos7 ~]# find /root/data/ -type f -name "*.txt"|xargs cat
Hello sophia !
Hello abc!
Hello abc!
1 2 3 4 5
[root@centos7 ~]#
9. 在文件内容中筛选出指定内容
方法 1,使用grep
命令,筛选文件指定内容。
参数 | 描述 |
---|---|
-v |
排除指定内容。 |
在
test.txt
文件内容中,找到包含he
的内容。[root@centos7 ~]# cat /root/data/test.txt
test
hello
world
[root@centos7 ~]# grep "he" /root/data/test.txt
hello
[root@centos7 ~]#
在
test.txt
文件内容中,查找不包含he
字符的内容。[root@centos7 ~]# cat /root/data/test.txt
test
hello
world
[root@centos7 ~]# grep -v "he" /root/data/test.txt
test
world
[root@centos7 ~]#
方法 2,使用awk
命令,筛选文件指定内容。
在
test.txt
文件内容中,找到包含he
的内容。[root@centos7 ~]# awk '/he/' /root/data/test.txt
hello
[root@centos7 ~]#
注意,使用一对单引号
'
和斜杠/
。在
test.txt
文件内容中,查找不包含he
字符的内容。[root@centos7 ~]# awk '!/he/' /root/data/test.txt
test
world
[root@centos7 ~]#
注意,使用叹号
!
表示取反。
方法 3,使用sed
命令,筛选文件指定内容。
使用
sed
命令,获取test.txt
文件内容,删除包含he
字符的行。[root@centos7 ~]# sed '/he/d' /root/data/test.txt
test
world
[root@centos7 ~]#
其中参数
'/he/d'
表示删除包含he
的选项行。最后结果是,不包含he
的行。
10. 获取文件内容的前几行
使用head
命令,取出文件的前几行,默认取出前 10 行。
参数 | 描述 |
---|---|
-n数字 |
表示取出前几行。例如 -n2 表示取出前 2 行。 |
-数字 |
表示取出前几行。例如 -2 表示取出前 2 行。 |
使用head -n2
命令,取出test.txt
文件的前 2 行。
[root@centos7 ~]# head -n2 /root/data/test.txt
test
hello
[root@centos7 ~]#
11. 获取文件内容的最后几行
使用tail
命令,取出文件最后几行,默认取出最后 10 行。
参数 | 描述 |
---|---|
-n数字 |
表示取出最后几行。例如 -n2 表示取出最后 2 行。 |
-数字 |
表示取出最后几行。例如 -2 表示取出最后 2 行。 |
[root@centos7 ~]# tail -n2 /root/data/test.txt
8
9
[root@centos7 ~]#
12. 获取文件某一行,或连续几行
题目:有一个test.txt
文件,共有 100 行,要求显示出文件中的第 50 行至第 60 行内容。
使用seq
命令,给test.txt
文件写入 100 行内容。
[root@centos7 ~]# seq 100 >/data/test.txt
方法 1,使用sed
命令
获取文件第 50 行内容。
[root@centos7 ~]# sed -n '50p' /data/test.txt
50
sed
命令默认输出文件全部内容。使用参数-n
取消默认输出,'50p'
表示只输出第 50 行内容。获取文件第 50 到 60 行内容。
[root@centos7 ~]# sed -n '50,60p' /data/test.txt
50
51
52
53
54
55
56
57
58
59
60
[root@centos7 ~]#
把参数改成
'50,60p'
即可。
方法 2,使用head
和tail
命令
首先,使用
tail
命令获取倒数 50 行。[root@centos7 ~]# tail -50 /data/test.txt
然后,使用
|
管道加head
命令,获取第 50 到 60 行内容。[root@centos7 ~]# tail -50 /data/test.txt | head -10
51
52
53
54
55
56
57
58
59
60
方法 3,使用awk
命令
获取文件第 50 行内容。
[root@centos7 ~]# awk 'NR==50' /data/test.txt
50
参数中
NR
表示行号,==
表示等于。获取文件第 50 到 60 行内容。
[root@centos7 ~]# awk 'NR==50,NR==60' /data/test.txt
50
51
52
53
54
55
56
57
58
59
60
参数中添加
NR==60
,限定行号范围,从第 50 行到第 60 行的内容。
13. 修改文件名
例如:把abc.txt
文件重命名为abc123.txt
。
注意,这是文件重命名,不是移动文件
可以使用mv
命令,必须保证abc123.txt
文件是不存在的,正是因为文件不存在,所以在使用mv
命令时,直接重命名了该文件。
# 创建一个文件
[root@node01]# touch abc.txt
[root@node01]# ll
-rw-r--r--. 1 root root 0 Jan 29 16:19 abc.txt
# 修改文件名
[root@node01]# mv /abc.txt /abc123.txt
[root@node01]# ll
-rw-r--r--. 1 root root 0 Jan 29 16:19 abc123.txt
另外,重命名目录名称,也是可以使用mv
命令的。链接:修改目录名
(完)