文件系统目录结构

  • Linux下的文件类型

  • 普通文件
    d 目录文件directory
    b 块设备block
    c 字符设备character
    l 符号链接文件link
    p 管道文件pipe
    s 套接字文件socket

    文件操作命令

    pwd 显示当前工作目录

  • pwd -P 显示真实物理路径

  • pwd -L 显示链接路径(默认)

    绝对路径和相对路径

    绝对路径:以/开始
    相对路径:基名basename
    目录名dirname

    1. [root@localhost /bin]$ basename /etc/sysconfig/network
    2. network
    3. [root@localhost /bin]$ dirname /etc/sysconfig/network
    4. /etc/sysconfig

    cd 更改目录

    1. [root@localhost /bin]$ cd ~ (回到home目录)
    2. [root@localhost ~]$ cd - (切换至以前的上一个工作目录)
    3. /bin
    4. [root@localhost /bin]$ cd .. (切换至父目录)
    5. [root@localhost /]$ cd /bin
    6. [root@localhost /bin]$ pwd
    7. /bin
    8. [root@localhost /bin]$ cd -P /bin (切换至物理路径,而非链接路径)
    9. [root@localhost /usr/bin]$ pwd
    10. /usr/bin
    11. [root@localhost /usr/bin]$ cd (切换至当前用户主目录)
    12. [root@localhost ~]$

    相关环境变量

    1. [root@CentOS /etc]$ echo $PWD (当前目录路径)
    2. /etc
    3. [root@CentOS /etc]$ echo $OLDPWD (上一次目录路径)
    4. /root

    ls 列出目录内容

    ls 【options】【files_or_dirs】
    ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS@LS_COLORS变量定义

  • -a 包含隐藏文件

  • -l 显示额外的信息 (别名alias ‘ll=ls -l’)
  • -R 目录递归 -r 倒序排列
  • -ld 目录和符号链接信息
  • -1 文件分行显示
  • -S 按从大到小排序
  • -t 按mtime排序
  • -u 配合-t选项,显示并按atime从新到旧排序
  • -U 按目录存放顺序显示
  • -X 按文件后缀排序

    1. [root@CentOS /etc]$ ls -Slr (按从大到小倒序排列)
    2. total 1364
    3. -rw-------. 1 root root 0 May 8 16:59 crypttab
    4. -rw-------. 1 root root 0 Aug 9 2019 cron.deny
    5. -rw-r--r--. 1 root root 1 Oct 31 2018 at.deny
    6. drwxr-xr-x. 2 root root 6 Apr 11 2018 xinetd.d
    7. drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly
    8. lrwxrwxrwx. 1 root root 10 May 8 17:00 rc2.d -> rc.d/rc2.d
    9. lrwxrwxrwx. 1 root root 10 May 8 17:00 rc0.d -> rc.d/rc0.d
    10. lrwxrwxrwx. 1 root root 11 May 8 17:00 init.d -> rc.d/init.d
    11. -rw-r--r--. 1 root root 11 May 8 17:09 hostname
    12. lrwxrwxrwx. 1 root root 13 May 8 17:01 rc.local -> rc.d/rc.local
    13. lrwxrwxrwx. 1 root root 14 May 8 16:59 system-release -> centos-release
    14. -rw-r--r--. 1 root root 16 May 8 17:09 adjtime

    image.png

    stat 查看文件状态

    1. [root@CentOS ~]$ stat zyysgdmn
    2. File: zyysgdmn
    3. Size: 88 Blocks: 8 IO Block: 4096 regular file
    4. Device: fd00h/64768d Inode: 203034404 Links: 1
    5. Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    6. Context: unconfined_u:object_r:admin_home_t:s0
    7. Access: 2021-07-19 13:22:48.830023994 +0800 (文件被读时间atime
    8. Modify: 2021-06-23 16:08:18.839938392 +0800 (内容修改时间mtime,默认)
    9. Change: 2021-06-23 16:08:18.839938392 +0800 (属性发生更改时间ctime
    10. Birth: -
    1. [root@CentOS ~]$ chown zhuyuany zyysgdmn (修改文件所有者,相当于修改了文件属性)
    2. [root@CentOS ~]$ cat zyysgdmn
    3. [root@CentOS ~]$ nano zyysgdmn
    4. [root@CentOS ~]$ stat zyysgdmn
    5. File: zyysgdmn
    6. Size: 91 Blocks: 8 IO Block: 4096 regular file
    7. Device: fd00h/64768d Inode: 203034404 Links: 1
    8. Access: (0644/-rw-r--r--) Uid: ( 1000/zhuyuany) Gid: ( 0/ root)
    9. Context: unconfined_u:object_r:admin_home_t:s0
    10. Access: 2021-07-21 23:33:51.122592703 +0800
    11. Modify: 2021-07-21 23:35:18.615594250 +0800
    12. Change: 2021-07-21 23:35:18.615594250 +0800
    13. Birth: -

    file 确定文件内容

    -b 列出文件辨识结果时,不显示文件名称
    -f filelist 列出文件filelist中文件名的文件类型
    -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
    -L 查看对应软链接对应文件的文件类型
    —help 显示命令在线帮助

    1. [root@CentOS ~]$ file zyy (判断文件类型,Linu文件不挑后缀)
    2. zyy: UTF-8 Unicode text
    3. [root@CentOS ~]$ rz -E windowsLinux中的回车和换行不一样)
    4. rz waiting to receive.
    5. [root@CentOS ~]$ file zyy-win.txt
    6. zyy-win.txt: ISO-8859 text, with CRLF line terminators
    7. [root@CentOS ~]$ hexdump -C zyy (每个字节显示为16进制和相应的ASCII字符)
    8. 00000000 7a 68 75 79 75 61 6e 79 75 61 6e 20 69 73 20 76 |zhuyuanyuan is v|
    9. 00000010 65 72 79 20 62 65 61 75 74 69 66 75 6c 0a e5 bd |ery beautiful...|
    10. 00000020 bc e5 a5 b3 e3 81 af e9 9d 9e e5 b8 b8 e3 81 ab |................|
    11. 00000030 e7 be 8e e3 81 97 e3 81 84 e3 81 a7 e3 81 99 0a |................|
    12. 00000040 e6 9c b1 e5 9b ad e5 9b ad e9 9d 9e e5 b8 b8 e6 |................|
    13. 00000050 bc 82 e4 ba ae 0a 0a |.......|
    14. 00000057
    15. [root@CentOS ~]$ hexdump -C zyy-win.txt
    16. 00000000 7a 68 75 79 75 61 6e 79 75 61 6e 20 69 73 20 76 |zhuyuanyuan is v|
    17. 00000010 65 72 79 20 62 65 61 75 74 69 66 75 6c 0d 0a b1 |ery beautiful...|
    18. 00000020 cb c5 ae a4 cf b7 c7 b3 a3 a4 cb c3 c0 a4 b7 a4 |................|
    19. 00000030 a4 a4 c7 a4 b9 0d 0a d6 ec d4 b0 d4 b0 b7 c7 b3 |................|
    20. 00000040 a3 c6 af c1 c1 |.....|
    21. 00000045
    22. [root@CentOS ~]$ sz zyy (将Linux中的文件拖到windows中可能会乱码无法查看)
    23. [root@CentOS ~]$ cat zyy-win.txt (将windows中的文件拖到linux中也同样可能会乱码无法查看)
    24. zhuyuanyuan is very beautiful
    25. ±̅®¤Ϸdz£¤̃$·¤¤¤Ǥ¹
    26. ׬԰԰·dz£Ư
    27. [root@CentOS ~]$ iconv -f gb2312 zyy-win.txt -o zyy-win(转换编码格式:#将windows7上文本默认的编码ANSIGB2312)转换成UTF-8
    28. [root@CentOS ~]$ cat zyy-win
    29. zhuyuanyuan is very beautiful
    30. 彼女は非常に美しいです
    31. 朱园园非常漂亮
    32. [root@CentOS ~]$ iconv -f utf8 -t gb2312 zyy -o windows2.txt(将UTF-8转换成windows10上文本默认的编码ANSIGB2312))
    33. [root@CentOS ~]$ sz windows2.txt
  • 安装转换工具 dnf -y install dos2unix

将Windows的文本格式转换成的Linux文本格式:dos2unix win.txt
#将Linux的文本格式转换成Windows的文本格式:unix2dos win.txt

  • 转换文件字符集编码

显示支持字符集编码列表:iconv -l
#windows7上文本默认的编码ANSI(GB2312)

文件通配符

image.pngimage.png
(在Linux系统中预定义的字符类:man 7 glob)

  1. [root@localhost ~]$ ls file[[:lower:]]
  2. filea filec filee fileg filei filek filem fileo fileq files fileu filew filey
  3. fileb filed filef fileh filej filel filen filep filer filet filev filex filez
  4. [root@localhost ~]$ ls file[[:upper:]]
  5. fileA fileC fileE fileG fileI fileK fileM fileO fileQ fileS fileU fileW fileY
  6. fileB fileD fileF fileH fileJ fileL fileN fileP fileR fileT fileV fileX fileZ
  7. [root@localhost ~]$ rm -f file*

touch 创建空文件和刷新时间

  • 刷新时间

-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建

  • 创建文件

image.png

cp 复制文件和目录

格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
-i 如果目标已存在,覆盖前提示是否覆盖
-n 不覆盖,注意两者顺序
-r, -R 递归复制目录及内部的所有内容
-a 归档,相当于-dR —preserv=all,常用于备份功能(-av 备份过程)
-d —no-dereference —preserv=links 不复制原文件,只复制链接名
—preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p 等同—preserv=mode,ownership,timestamp 保留格式属性
-v —verbose 显示过程
-f —force
-u —update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,默认形式为 filename~,只保留最近的一个备份
—backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为filename.~#~,可以保留多个版

练习
1、将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYYmm-dd,备份过程可见
cp -av /etc/ /data/backupdate +%F`<br />2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限<br />cp -a /root /data/rootdir`

mv 移动和重命名文件(格式同cp)

  • mv source_file``(文件)`` dest_file``(文件) 将源文件名 source_file 改为目标文件名 dest_file
  • mv source_file``(文件)`` dest_directory``(目录) 将文件 source_file 移动到目标目录 dest_directory 中
  • mv source_directory``(目录)`` dest_directory``(目录) 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;不存在则 source_directory 改名为目录名 dest_directory

-i 交互式 (覆盖提醒,系统自带别名alias mv=’mv -i’)
-f 强制 (如果指定移动的源目录或文件与目标的目录或文件同名,不询问直接覆盖)
-b 当目标文件或目录存在时,覆盖前先备份
-n 不要覆盖任何已存在的文件或目录
-u 当源文件比目标文件新或者目标文件不存在时,才执行移动操作
*mv只能一次处理一个文件改名,而利用 rename 可以批量修改文件名

rename [options] ``<expression> <replacement>`` <file>...
image.png

rm 删除文件

rm [OPTION]... FILE...
-i 交互式 (删除前提示,系统自带别名alias rm=’rm -i’)
-f 强制删除,无提示
-r 或-R 递归 (删文件夹)
—no-preserve-root 强制删除/

  • 回车前一定要仔细检查!慎重使用,建议使用mv作为别名代替 rm:

alias rm='DIR=/data/backupdate +%F%T;mkdir $DIR;mv -t $DIR'

  • 删除特殊文件(例:将名为 “/data/-f” 的文件删除)

    1. [root@centos8 data]#rm -f -f #此方式错误
    2. [root@centos8 data]#rm -- -f
    3. [root@centos8 data]#rm ./-f (绝对路径)
    4. [root@centos8 data]#rm /data/-f
  • rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件

image.png

目录操作tree、mkdir、rmdir

  • 显示目录树 tree

-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径

  • 创建目录 mkdir

-p: 存在于不报错,且可递归自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限(没有-m来强制配置属性系统会使用默认属性)

  • 删除空目录rmdir

-p 递归删除父空目录
-v 显示详细信息
#rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树