查看文件信息/是否存在
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
- 复制目录,最推荐的做法是, `cp -rf xxx/* /xx/xx` , 否则有可能不生效。<a name="lc1x2"></a># 文件大小<a name="YD6ht"></a>## 文件大小```bashls -l -hdrwxr-xr-x 2 root root 4.0K 5月 28 15:00 .drwxr-xr-x 4 root root 4.0K 4月 11 2019 ..-rw-r--r-- 1 root root 23G 10月 29 07:57 lightning.info.log-rw-r--r-- 1 root root 867K 4月 22 2019 lightning.info.log.bak-rw-r--r-- 1 root root 5.1M 4月 22 2019 lightning.info.log.bak2
文件夹大小
ls -l 这类命令只能查看文件大小,不能查看文件夹大小。
查看文件夹大小使用,
- du,dist usage
样例:du -h --max-depth=1
36M ./audit393M ./journal4.0K ./rhsm21M ./sa23G ./shouwei4.0K ./ntpstats164K ./anaconda4.0K ./chrony20K ./multi-nic-util12K ./tuned47M ./nginx48K ./supervisor23G .
文件目录
mkdir 创建目录
使用 mkdir -p xx 能够确保创建目录,即便目录存在也不会抛出异常。
- mkdir 创建目录
mkdir -p,—parent,如果不存在会自动创建父级目录
mkdir -p a/b, 新建一个 a 目录,并在a目录下新建 b 目录。
一次创建多个文件:
mkdir -p /home/user/{test,test1,test2}
文件加斜杠和不加斜杠
加斜杠代表的是这个文件下的文件,不加斜杠代表的是这个目录。
# aaa 内有 a b c 三个文件$ lsaaa bb# 不带杠是复制整个文件夹$ cp -r ./aaa ./bb$ ls ./bb$ aaa# 带杠是复制文件夹下面的文件,不包括文件夹本身$ cp -r ./aaa/ ./bb$ ls$ a b c
文件传输
- scp
scp [参数] [原路径] [目标路径]
cp 是本机拷贝,scp 能够跨服务器拷贝。
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 安装。
// 查看某个文件被哪些进程在读写lsof 文件名// 查看某个进程打开了哪些文件lsof -c 进程名lsof -p 进程号// 查看某端口运行的程序lsof -i :potNum
文件链接
ls -i , 查看文件的 inode
18643163 employeeHandbook.docx 18643096 seatingChart.pdf 18649352 test_link.sh@18643084 entryInfo.docx 18649340 test.sh* 18649340 xx*
xx 是 test.sh 的硬链接,可见它的 inode 和 源文件 test.sh 的 inode 一致;
test_link.sh 是软连接,它的就不一致;
硬链接
硬链接好比是镜像,
- 镜像源修改镜像也要修改,镜
- 像源即便被删除了,但是镜像还可以继续存在;
硬链接的两个文件是两个独立引用计数的文件,他们共用一份数据,所以他们的 inode 是相同的。
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 查看显示如下,
ql_centos@ -> ./scripts/docker/ql_centos7.sh
这样移动软链接后,链接就无法使用。
- 批量创建软连接
ln 命令支持批量创建软连接,与通配符匹配效果好。
ln -s /tmp/*.log /tmp/lnk/
- 删除软链接
当链接是文件夹时,删除文件名结尾不要加 ‘/‘, 否则会把该文件夹删除。
rm xxx # 这样写就可以删除软链接rm xxx/ # 当xxx是文件夹时,可能会把源文件夹删除掉。
文件链接与复制
- 硬链接是一个镜像;通过
ls -i可以看到,这两个文件的 inode 是同一个; - 软链接是个快捷方式,软链接的元信息内存储的是原文件的 inode, 用来指向原文件;
- 复制,就是对原文件完全进行拷贝,和原来的文件没有任何关系了。
ls 命令详解
引用计数
ls -al第2行显示的是引用计数。drwxr-xr-x 8 yutou staff 256B 3 8 11:13 ./drwxr-xr-x 3 yutou staff 96B 3 8 10:15 ../-rw-r--r--@ 1 yutou staff 55K 3 8 10:14 employeeHandbook.docx-rw-r--r--@ 1 yutou staff 36K 3 8 10:13 entryInfo.docx-rw-r--r--@ 1 yutou staff 15K 3 8 10:13 seatingChart.pdf-rwxr-xr-x 2 yutou staff 11B 3 8 10:45 test.sh*lrwxr-xr-x 1 yutou staff 40B 3 8 10:46 test_link.sh@ -> /Users/yutou/shouxin/companyInfo/test.sh-rwxr-xr-x 2 yutou staff 11B 3 8 10:45 xx*
查看文件总数
ls ./xx | wc -l
遍历子目录
参考: https://www.xiaoz.me/archives/14180traveDir.sh
#! /bin/bashfunction read_dir(){for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令doif [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错thenread_dir $1"/"$fileelseecho $1"/"$file #在此处处理文件即可fidone}#读取第一个参数read_dir $1
上一个步骤已将脚本创建完毕,接下来只需要执行./traveDir.sh /xxx/wp-content/uploads即可,xxx请修改为您站点的绝对路径。如果您想要导出为.txt文本,直接使用>>流操作即可。
#导出为.txt./traveDir.sh /xxx/wp-content >> 1.txt
