查看文件信息/是否存在

  1. stat xxFile

在 Golang 下查看文件正是 os.stat

复制文件

  • -f 强制复制文件,如果有重名文件则覆盖。

为什么 cp -f 命令不生效?
参考链接:https://stackoverflow.com/questions/8488253/how-to-force-cp-to-overwrite-without-confirmation

`cp``cp -i```` /bin/cp -rf /zzz/zzz/* /xxx/xxx

  1. - 复制目录,最推荐的做法是, `cp -rf xxx/* /xx/xx` , 否则有可能不生效。
  2. <a name="lc1x2"></a>
  3. # 文件大小
  4. <a name="YD6ht"></a>
  5. ## 文件大小
  6. ```bash
  7. ls -l -h
  8. drwxr-xr-x 2 root root 4.0K 5月 28 15:00 .
  9. drwxr-xr-x 4 root root 4.0K 4月 11 2019 ..
  10. -rw-r--r-- 1 root root 23G 10月 29 07:57 lightning.info.log
  11. -rw-r--r-- 1 root root 867K 4月 22 2019 lightning.info.log.bak
  12. -rw-r--r-- 1 root root 5.1M 4月 22 2019 lightning.info.log.bak2

文件夹大小

ls -l 这类命令只能查看文件大小,不能查看文件夹大小。
查看文件夹大小使用,

  • du,dist usage
    1. du -h --max-depth=1
    样例:
  1. 36M ./audit
  2. 393M ./journal
  3. 4.0K ./rhsm
  4. 21M ./sa
  5. 23G ./shouwei
  6. 4.0K ./ntpstats
  7. 164K ./anaconda
  8. 4.0K ./chrony
  9. 20K ./multi-nic-util
  10. 12K ./tuned
  11. 47M ./nginx
  12. 48K ./supervisor
  13. 23G .

文件目录

mkdir 创建目录

使用 mkdir -p xx 能够确保创建目录,即便目录存在也不会抛出异常。

  • mkdir 创建目录
  • mkdir -p,—parent,如果不存在会自动创建父级目录

    1. mkdir -p a/b, 新建一个 a 目录,并在a目录下新建 b 目录。
  • 一次创建多个文件:

  1. mkdir -p /home/user/{test,test1,test2}

文件加斜杠和不加斜杠

加斜杠代表的是这个文件下的文件,不加斜杠代表的是这个目录。

  1. # aaa 内有 a b c 三个文件
  2. $ ls
  3. aaa bb
  4. # 不带杠是复制整个文件夹
  5. $ cp -r ./aaa ./bb
  6. $ ls ./bb
  7. $ aaa
  8. # 带杠是复制文件夹下面的文件,不包括文件夹本身
  9. $ cp -r ./aaa/ ./bb
  10. $ ls
  11. $ a b c

文件传输

  • scp
    scp [参数] [原路径] [目标路径]
    cp 是本机拷贝,scp 能够跨服务器拷贝。
  1. sudo scp -r -i ~/.ssh/id_rsa mysql80-community-release-el7-1.noarch.rpm root@134.175.142.94:/root/mysql

命令参数:

  • -1 强制scp命令使用协议ssh1
  • -2 强制scp命令使用协议ssh2
  • -4 强制scp命令只使用IPv4寻址
  • -6 强制scp命令只使用IPv6寻址
  • -B 使用批处理模式(传输过程中不询问传输口令或短语)
  • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  • -p 留原文件的修改时间,访问时间和访问权限。
  • -q 不显示传输进度条。
  • -r 递归复制整个目录。
  • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
  • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
  • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
  • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
  • -P port 注意是大写的P, port是指定数据传输用到的端口号
  • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    查看文件占用

lsof,是 list open file 的简写,这个命令可以查看某个文件或端口被哪个那些进程占用。
由于 linux 中一切皆文件,所以不止是文件,端口号、进程号等也可以使用此命令打开。
这个命令需要 yum 安装。

  1. // 查看某个文件被哪些进程在读写
  2. lsof 文件名
  3. // 查看某个进程打开了哪些文件
  4. lsof -c 进程名
  5. lsof -p 进程号
  6. // 查看某端口运行的程序
  7. lsof -i :potNum

文件链接

ls -i , 查看文件的 inode

  1. 18643163 employeeHandbook.docx 18643096 seatingChart.pdf 18649352 test_link.sh@
  2. 18643084 entryInfo.docx 18649340 test.sh* 18649340 xx*

xx 是 test.sh 的硬链接,可见它的 inode 和 源文件 test.sh 的 inode 一致;
test_link.sh 是软连接,它的就不一致;

硬链接

硬链接好比是镜像,

  • 镜像源修改镜像也要修改,镜
  • 像源即便被删除了,但是镜像还可以继续存在;

硬链接的两个文件是两个独立引用计数的文件,他们共用一份数据,所以他们的 inode 是相同的。

  1. ln source_file target_file_name

target_file_name 可以省略,即 ln source_file , 这种情况下创建的软链接与 source_file 同名。

软链接

https://blog.csdn.net/geerniya/article/details/79093301
软链接就是一个文件,固定大小,3kb,它存储着被链接文件的元信息,路径和 inode 节点;
软链接是一个文件,所以它有自己的 inode 和原信息。软链接和原文件的联系,就在它存储的内容里头。

  • 创建软链接时不要使用相对目录

创建软链接时如果使用相对目录,使用 ls -al 查看显示如下,

  1. ql_centos@ -> ./scripts/docker/ql_centos7.sh

这样移动软链接后,链接就无法使用。

  • 批量创建软连接

ln 命令支持批量创建软连接,与通配符匹配效果好。

  1. ln -s /tmp/*.log /tmp/lnk/
  • 删除软链接

当链接是文件夹时,删除文件名结尾不要加 ‘/‘, 否则会把该文件夹删除。

  1. rm xxx # 这样写就可以删除软链接
  2. rm xxx/ # 当xxx是文件夹时,可能会把源文件夹删除掉。

文件链接与复制

  • 硬链接是一个镜像;通过 ls -i 可以看到,这两个文件的 inode 是同一个;
  • 软链接是个快捷方式,软链接的元信息内存储的是原文件的 inode, 用来指向原文件;
  • 复制,就是对原文件完全进行拷贝,和原来的文件没有任何关系了。

    ls 命令详解

    引用计数

    ls -al 第2行显示的是引用计数。
    1. drwxr-xr-x 8 yutou staff 256B 3 8 11:13 ./
    2. drwxr-xr-x 3 yutou staff 96B 3 8 10:15 ../
    3. -rw-r--r--@ 1 yutou staff 55K 3 8 10:14 employeeHandbook.docx
    4. -rw-r--r--@ 1 yutou staff 36K 3 8 10:13 entryInfo.docx
    5. -rw-r--r--@ 1 yutou staff 15K 3 8 10:13 seatingChart.pdf
    6. -rwxr-xr-x 2 yutou staff 11B 3 8 10:45 test.sh*
    7. lrwxr-xr-x 1 yutou staff 40B 3 8 10:46 test_link.sh@ -> /Users/yutou/shouxin/companyInfo/test.sh
    8. -rwxr-xr-x 2 yutou staff 11B 3 8 10:45 xx*

    查看文件总数

  1. ls ./xx | wc -l

遍历子目录

参考: https://www.xiaoz.me/archives/14180
traveDir.sh

  1. #! /bin/bash
  2. function read_dir(){
  3. for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
  4. do
  5. if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
  6. then
  7. read_dir $1"/"$file
  8. else
  9. echo $1"/"$file #在此处处理文件即可
  10. fi
  11. done
  12. }
  13. #读取第一个参数
  14. read_dir $1

上一个步骤已将脚本创建完毕,接下来只需要执行./traveDir.sh /xxx/wp-content/uploads即可,xxx请修改为您站点的绝对路径。如果您想要导出为.txt文本,直接使用>>流操作即可。

  1. #导出为.txt
  2. ./traveDir.sh /xxx/wp-content >> 1.txt