CentOS 7 文件操作命令

[TOCM]

在 CentOS 7 系统中对文件操作的一些命令。

1. 创建一个文件


使用touch命令创建文件。例如,在/data目录下创建一个test.txt文件。

创建test.txt文件:

  1. touch /data/test.txt

查看/data目录下刚刚创建的文件:

  1. ls -l /data/

2. 编辑文件


使用vi命令编辑/data/test.txt文件。vi 是一种编辑器。

  1. vi /data/test.txt

按下i键,进入编辑模式。内容编写完毕后,按下Esc键,退出编辑模式。然后,退出并保存,请依次按下:wq三个键,并回车。

关于退出编辑文件,有 4 个命令:

  • :q 退出。用于未修改文件内容,直接退出。
  • :wq 退出并保存。
  • :q! 强制退出不保存。用于已修改文件内容,而不希望被保存。
  • :wq! 强制退出并保存。

其中w为英文 write ;q 为英文 quit 。

3. 查看文件内容


使用cat命令来查看文件中的内容。

  1. cat /data/test.txt

4. 写入文件


使用echo命令与>>追加重定向符号,将内容写入某个文件内的最后一行。

  1. echo Hello sophia >>/data/test.txt

如果想一次性写入多行到文件,使用如下方法。

  1. cat >>/data/test.txt<<EOF
  2. Hello
  3. World
  4. !
  5. EOF

5. 复制文件或目录


使用cp命令,英文全称为 copy 。

  • test.txt文件,复制到/tmp/目录。

    1. [root@centos7 ~]# cp /data/test.txt /tmp/
    2. [root@centos7 ~]# ls -l /tmp/
    3. total 16
    4. -rw-r--r--. 1 root root 127 Apr 17 20:13 test.txt
    5. -rw-------. 1 root root 0 Apr 10 20:12 yum.log
    6. [root@centos7 ~]#
  • test.txt文件,复制到当前所在目录,使用特殊符号.代表当前目录。

    1. # 查看当前所在目录
    2. [root@centos7 ~]# pwd
    3. /root
    4. # 复制 test.txt 文件到当前所在目录
    5. [root@centos7 ~]# cp /root/data/test.txt .
    6. # 查看当前所在目录文件列表
    7. [root@centos7 ~]# ls -l
    8. total 12
    9. -rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
    10. drwxr-xr-x. 2 root root 4096 Apr 17 20:23 data
    11. -rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
    12. [root@centos7 ~]#
  • 使用cp命令,备份文件。将test.txt文件备份为test.txt.bak

    1. [root@centos7 ~]# cp /data/test.txt /data/test.txt.bak
    2. [root@centos7 ~]# ls -l /data
    3. total 12
    4. -rw-r--r--. 1 root root 127 Apr 17 18:52 test.txt
    5. -rw-r--r--. 1 root root 127 Apr 17 20:23 test.txt.bak
    6. [root@centos7 ~]#

    使用cp -r命令,复制目录。

    • 参数 -r 为递归复制。复制目录及目录里面的内容。
    • 参数 -p 复制时保持文件属性不变。
    • 参数 -a 为复制所有。与参数 -pdr 等价。
  • /data/目录复制到/tmp/目录。

    1. [root@centos7 ~]# cp -r /data/ /tmp/
    2. [root@centos7 ~]# ls -l /tmp/
    3. total 20
    4. drwxr-xr-x. 2 root root 4096 Apr 17 20:31 data
    5. -rw-r--r--. 1 root root 127 Apr 17 20:13 test.txt
    6. -rw-------. 1 root root 0 Apr 10 20:12 yum.log
    7. [root@centos7 ~]#

6. 移动文件或目录


使用mv命令,英文全称为 move 。

  • /data/目录移动到/root/目录。

    1. [root@centos7 ~]# mv /data/ /root/
    2. [root@centos7 ~]# ls -l /root/
    3. total 8
    4. -rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
    5. drwxr-xr-x. 2 root root 4096 Apr 17 20:23 data
    6. [root@centos7 ~]#
  • /data/目录,移动到当前所在目录,使用特殊符号.代表当前目录。

    1. # 查看当前所在目录
    2. [root@centos7 ~]# pwd
    3. /root
    4. # 把 /data/ 目录,移动到当前所在目录。
    5. [root@centos7 ~]# mv /data/ .
    6. [root@centos7 ~]# ls -l
    7. total 12
    8. -rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
    9. drwxr-xr-x. 2 root root 4096 Apr 18 11:33 data
    10. -rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
    11. [root@centos7 ~]#
  • /root/test.txt文件,移动到/root/data目录下。使用特殊符号.代表当前目录。

    1. [root@centos7 data]# pwd
    2. /root/data
    3. [root@centos7 data]# mv /root/test.txt .
    4. [root@centos7 data]# ls -l
    5. total 4
    6. -rw-r--r--. 1 root root 127 Apr 18 11:18 test.txt
    7. [root@centos7 data]#

7. 删除文件或目录


使用rm命令删除文件或目录,默认无法删除目录,它的英文全称为 remove 。

参数 描述
-r 递归删除
-f 强制删除
  • 删除/tmp/目录下的test.txt文件。

    1. [root@centos7 ~]# rm /tmp/test.txt
    2. rm: remove regular file ‘/tmp/test.txt’? y

    输入y确定删除。如果不想被询问是否删除,则加参数-f删除文件。

    1. [root@centos7 ~]# rm -f /tmp/test.txt
  • 使用rm -rf命令,删除/tmp/目录下的/data/目录。

    1. [root@centos7 ~]# rm -rf /tmp/data/

8. 查找文件或目录


使用find命令,查找文件或目录。

参数 描述
-type 查找类型。f 为文件 file,d 为目录 directory 。
-name 查找名称。可以使用 * 作为通配符,匹配名称。
  • /root/data/目录中,查找test.txt文件。如果找到了,则输出文件位置。没找到则无输出。

    1. [root@centos7 ~]# find /root/data/ -type f -name "test.txt"
    2. /root/data/test.txt
    3. [root@centos7 ~]#
  • /root/目录中,查找名字为data的目录。如果找到了,则输出目录位置。没找到则无输出。

    1. [root@centos7 ~]# find /root/ -type d -name "data"
    2. /root/data
    3. [root@centos7 ~]#
  • 使用*作为通配符,匹配名称。

    1. [root@centos7 ~]# find /root/ -type d -name "dat*"
    2. /root/data
    3. [root@centos7 ~]#
  • find命令与管道|配合使用。管道的意思是,|前面的命令执行成功后,交给后面的命令再执行。

    1. # 查找 *.txt 文件名,并显示详细列表。
    2. [root@centos7 ~]# find /root/data/ -type f -name "*.txt"|xargs ls -l
    3. -rw-r--r--. 1 root root 10 Apr 17 19:44 /root/data/num.txt
    4. -rw-r--r--. 1 root root 127 Apr 17 18:52 /root/data/test.txt
    5. # 查看两个文件内容
    6. [root@centos7 ~]# find /root/data/ -type f -name "*.txt"|xargs cat
    7. Hello sophia !
    8. Hello abc!
    9. Hello abc!
    10. 1 2 3 4 5
    11. [root@centos7 ~]#

9. 在文件内容中筛选出指定内容


方法 1,使用grep命令,筛选文件指定内容。

参数 描述
-v 排除指定内容。
  • test.txt文件内容中,找到包含he的内容。

    1. [root@centos7 ~]# cat /root/data/test.txt
    2. test
    3. hello
    4. world
    5. [root@centos7 ~]# grep "he" /root/data/test.txt
    6. hello
    7. [root@centos7 ~]#
  • test.txt文件内容中,查找不包含he字符的内容。

    1. [root@centos7 ~]# cat /root/data/test.txt
    2. test
    3. hello
    4. world
    5. [root@centos7 ~]# grep -v "he" /root/data/test.txt
    6. test
    7. world
    8. [root@centos7 ~]#

方法 2,使用awk命令,筛选文件指定内容。

  • test.txt文件内容中,找到包含he的内容。

    1. [root@centos7 ~]# awk '/he/' /root/data/test.txt
    2. hello
    3. [root@centos7 ~]#

    注意,使用一对单引号'和斜杠/

  • test.txt文件内容中,查找不包含he字符的内容。

    1. [root@centos7 ~]# awk '!/he/' /root/data/test.txt
    2. test
    3. world
    4. [root@centos7 ~]#

    注意,使用叹号!表示取反。

方法 3,使用sed命令,筛选文件指定内容。

  • 使用sed命令,获取test.txt文件内容,删除包含he字符的行。

    1. [root@centos7 ~]# sed '/he/d' /root/data/test.txt
    2. test
    3. world
    4. [root@centos7 ~]#

    其中参数'/he/d'表示删除包含he的选项行。最后结果是,不包含he的行。

10. 获取文件内容的前几行


使用head命令,取出文件的前几行,默认取出前 10 行。

参数 描述
-n数字 表示取出前几行。例如 -n2 表示取出前 2 行。
-数字 表示取出前几行。例如 -2 表示取出前 2 行。

使用head -n2命令,取出test.txt文件的前 2 行。

  1. [root@centos7 ~]# head -n2 /root/data/test.txt
  2. test
  3. hello
  4. [root@centos7 ~]#

11. 获取文件内容的最后几行


使用tail命令,取出文件最后几行,默认取出最后 10 行。

参数 描述
-n数字 表示取出最后几行。例如 -n2 表示取出最后 2 行。
-数字 表示取出最后几行。例如 -2 表示取出最后 2 行。
  1. [root@centos7 ~]# tail -n2 /root/data/test.txt
  2. 8
  3. 9
  4. [root@centos7 ~]#

12. 获取文件某一行,或连续几行


题目:有一个test.txt文件,共有 100 行,要求显示出文件中的第 50 行至第 60 行内容。

使用seq命令,给test.txt文件写入 100 行内容。

  1. [root@centos7 ~]# seq 100 >/data/test.txt

方法 1,使用sed命令

  • 获取文件第 50 行内容。

    1. [root@centos7 ~]# sed -n '50p' /data/test.txt
    2. 50

    sed命令默认输出文件全部内容。使用参数-n取消默认输出,'50p'表示只输出第 50 行内容。

  • 获取文件第 50 到 60 行内容。

    1. [root@centos7 ~]# sed -n '50,60p' /data/test.txt
    2. 50
    3. 51
    4. 52
    5. 53
    6. 54
    7. 55
    8. 56
    9. 57
    10. 58
    11. 59
    12. 60
    13. [root@centos7 ~]#

    把参数改成'50,60p'即可。

方法 2,使用headtail命令

  • 首先,使用tail命令获取倒数 50 行。

    1. [root@centos7 ~]# tail -50 /data/test.txt
  • 然后,使用|管道加head命令,获取第 50 到 60 行内容。

    1. [root@centos7 ~]# tail -50 /data/test.txt | head -10
    2. 51
    3. 52
    4. 53
    5. 54
    6. 55
    7. 56
    8. 57
    9. 58
    10. 59
    11. 60

方法 3,使用awk命令

  • 获取文件第 50 行内容。

    1. [root@centos7 ~]# awk 'NR==50' /data/test.txt
    2. 50

    参数中NR表示行号,==表示等于。

  • 获取文件第 50 到 60 行内容。

    1. [root@centos7 ~]# awk 'NR==50,NR==60' /data/test.txt
    2. 50
    3. 51
    4. 52
    5. 53
    6. 54
    7. 55
    8. 56
    9. 57
    10. 58
    11. 59
    12. 60

    参数中添加NR==60,限定行号范围,从第 50 行到第 60 行的内容。

13. 修改文件名


例如:把abc.txt文件重命名为abc123.txt

注意,这是文件重命名,不是移动文件

可以使用mv命令,必须保证abc123.txt文件是不存在的,正是因为文件不存在,所以在使用mv命令时,直接重命名了该文件。

  1. # 创建一个文件
  2. [root@node01]# touch abc.txt
  3. [root@node01]# ll
  4. -rw-r--r--. 1 root root 0 Jan 29 16:19 abc.txt
  5. # 修改文件名
  6. [root@node01]# mv /abc.txt /abc123.txt
  7. [root@node01]# ll
  8. -rw-r--r--. 1 root root 0 Jan 29 16:19 abc123.txt

另外,重命名目录名称,也是可以使用mv命令的。链接:修改目录名

(完)