1.2 文件管理类命令

首先要介绍的命令是:man命令(manual),通过阅读手册了解命令的使用如:man ls

其次掌握 type命令,判断命令是可执行文件、shell内置命令还是别名,type的使用方法参考附录

在处理 Linux 文件时注意:

  1. Linux 对文件后缀不严格限制

  2. Linux 对大小写是敏感的

  3. 标准的 Linux 文件,路径名长度(包含所有字符) 不可超过 4096 字节

  4. 路径名中通过 / 分隔开的每一部分的长度不可超过255字节

新建文件/目录

touch命令 有两个功能:

  • 把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;

  • 创建新的空文件

mkdir命令(make directory)用来创建目录。

不要把所有的文件都存放在主目录中。通过创建子目录来更有效地整理文件,最好采用前后一致的命名方式来区分文件和目录。 E.g.

[zhangzh@node01 ~]$ touch lab
[zhangzh@node01 ~]$ ll
total 4
-rw-r--r-- 1 zhangzh ybj 0 May 9 12:09 lab
drwx------ 2 zhangzh ybj 4096 May 8 16:17 linux

权限

Linux 系统中,文件权限表示方法有字母和数字两种,终端中输入ll就能看到文件权限:

rw-/r--/r-- 分别指u:用户权/g:组权限/o:其他人权限
r 指读权限 read,数值表示为4
w 指写权限 write,数值表示为2
x 指执行权限 execute,数值表示为1

chmod命令(change mode)用来变更文件或目录的权限。

-v 显示权限变更的详细资料

-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

E.g. 修改文件权限
[zhangzh@node01 ~]$ ll
total 0
-rw-r--r-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab1.txt
-rw-r--r-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab2.txt
-rw-r--r-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab3.txt
-rw-r--r-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab4.txt
-rw-r--r-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab5.txt
[zhangzh@node01 ~]$ chmod 700 lab1.txt 
[zhangzh@node01 ~]$ chmod 755 lab2.txt 
[zhangzh@node01 ~]$ chmod 777 lab3.txt 
[zhangzh@node01 ~]$ chmod g+x lab4.txt    # 添加组执行
[zhangzh@node01 ~]$ chmod o-r lab5.txt    # 拒绝他人读
[zhangzh@node01 ~]$ ll
total 0
-rwx------ 1 zhangzihao lhaaso 0 Oct 12 09:59 lab1.txt
-rwxr-xr-x 1 zhangzihao lhaaso 0 Oct 12 09:59 lab2.txt
-rwxrwxrwx 1 zhangzihao lhaaso 0 Oct 12 09:59 lab3.txt
-rw-r-xr-- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab4.txt
-rw-r----- 1 zhangzihao lhaaso 0 Oct 12 09:59 lab5.txt

chown命令 (change owner)变更文件所有人。

chown username filename
chown username:groupname filename

chgrp命令 (change group)仅变更组。

chown groupname filename

压缩

zip命令 可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。

压缩和解压缩文件的语法分别是zip filenameunzip filename

$ tar -zcvf 压缩文件名 .tar.gz 被压缩文件名
$ tar -zxvf 压缩文件名.tar.gz

推荐选项 zip

-L:显示版权信息
-r:递归压缩,将指定目录及其子目录一并处理
-m:压缩后删除源文件,及将文件移动至压缩包内
E.g. 压缩及解压
[zhangzh@node01 ~]$ zip root.zip root.txt
[zhangzh@node01 ~]$ zip -r root.zip root/ 
[zhangzh@node01 ~]$ unzip root.zip

zcat命令 显示压缩格式文件内容的工具。

查找

find命令 用来在指定目录下查找文件。支持正则表达。E.g.

[zhangzh@node01 tutorials]$ pwd
/home/users/z/zhangzh/guide/root/tutorials
[zhangzh@node01 tutorials]$ find /home/users/z/zhangzh/guide/root/tutorials/ -name latex4.C
/home/users/z/zhangzh/guide/root/tutorials/graphics/latex4.C

pwd命令(print work directory)可以打印出当前的工作目录

比较

diff命令 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

E.g. 比较 .bashrc 与 lab1 的差异
[zhangzh@node01 ~]$ diff .bashrc lab1
1,20d0
< # .bashrc
< 
< # Source global definitions
< if [ -f /etc/bashrc ]; 
< then
<     . /etc/bashrc 
< fi
< 
< # User specific environment
< if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
< then
<     PATH="$HOME/.local/bin:$HOME/bin:$PATH"
< fi
< export PATH
< 
< #ROOT environment
< source /home/software/cern_root/root_install/bin/thisroot.sh
< 
< #alias
< alias cl='clear'

链接

Linux 具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。

ln命令(link file)用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建软链接必须使用-s选项。

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux ,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。所以建议使用软连接

E.g. ln命令的使用
[zhangzh@node01 ~]$ ll
total 4
drwx------ 2 zhangzh ybj 4096 May  8 16:17 linux
[zhangzh@node01 ~]$ ln -s /usr/bin/ wpbin
[zhangzh@node01 ~]$ ll
total 4
drwx------ 2 zhangzh ybj 4096 May  8 16:17 linux
lrwxrwxrwx 1 zhangzh ybj    9 May  9 14:37 wpbin -> /usr/bin/
[zhangzh@node01 ~]$ rm wpbin
[zhangzh@node01 ~]$ ll
total 4
drwx------ 2 zhangzh ybj 4096 May  8 16:17 linux

统计

内存统计

df命令(disk free)用于显示文件系统的磁盘空间利用情况。当在终端中运行 df 命令时,它会列出系统中所有的文件系统及其对应的磁盘空间使用情况,包括磁盘总容量、已用空间、可用空间以及挂载点等信息。这个命令对于了解系统中磁盘空间的使用情况非常有用。建议使用-h参数使之易读。

MacBook-Pro:plot zhangzh$ df -h
Filesystem       Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk3s1s1  460Gi  8.2Gi  339Gi     3%  348619 3553790160    0%   /
devfs           199Ki  199Ki    0Bi   100%     689          0  100%   /dev
/dev/disk3s6    460Gi   20Ki  339Gi     1%       0 3553790160    0%   /System/Volumes/VM
/dev/disk3s2    460Gi  4.1Gi  339Gi     2%     165 3553790160    0%   /System/Volumes/Preboot
/dev/disk3s4    460Gi  2.4Mi  339Gi     1%      14 3553790160    0%   /System/Volumes/Update
/dev/disk1s2    500Mi  6.0Mi  481Mi     2%       1    4925080    0%   /System/Volumes/xarts
/dev/disk1s1    500Mi  6.1Mi  481Mi     2%      21    4925080    0%   /System/Volumes/iSCPreboot
/dev/disk1s3    500Mi  2.2Mi  481Mi     1%      68    4925080    0%   /System/Volumes/Hardware
/dev/disk3s5    460Gi  108Gi  339Gi    25% 1308052 3553790160    0%   /System/Volumes/Data
map auto_home     0Bi    0Bi    0Bi   100%       0          0  100%   /System/Volumes/Data/home

du命令(disk usage)也是查看使用空间的,但是与df命令不同的是 du命令是对文件和目录磁盘使用的空间的查看常用命令是du -shdu -h,前者可以查看当前目录下所有文件大小的总和,后者可以列出当前目录下所有文件的大小

E.g. 不同参数的 du命令的统计效果
[zhangzh@node01 ~]$ ll
total 4
-rw-r--r-- 1 zhangzh ybj    0 May  9 14:54 lab1
-rw-r--r-- 1 zhangzh ybj    0 May  9 14:54 lab2
-rw-r--r-- 1 zhangzh ybj    0 May  9 14:54 lab3
-rw-r--r-- 1 zhangzh ybj    0 May  9 14:54 lab4
-rw-r--r-- 1 zhangzh ybj    0 May  9 14:54 lab5
drwx------ 2 zhangzh ybj 4096 May  8 16:17 linux
[zhangzh@node01 ~]$ du -sh ~/linux/
12K    /home/users/z/zhangzh/linux/
[zhangzh@node01 ~]$ du -sh
108K    .
[zhangzh@node01 ~]$ du -sh *
0    lab1
0    lab2
0    lab3
0    lab4
0    lab5
12K    linux
[zhangzh@node01 ~]$ du -sh ~/linux/
12K    /home/users/z/zhangzh/linux/

文本统计

wc命令 可以计算文件的Byte数、字数(-w)、或是行数(-l)。

复制/移动/重命名/删除

cp命令(copy file)用来将一个或多个源文件或者目录复制到指定的目的文件或目录。cp命令支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

mv命令(move file)常用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:

  • 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。

  • 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。

mvcp的结果不同,mv好像“搬家”,文件个数并未增加。而cp对文件复制,文件个数增加了。语法:

[zhangzh@node01 ~]$ cp [source] [target]                 # 复制,不含属性
[zhangzh@node01 ~]$ cp [source] [target/]                # 复制到其他目录,不含属性
[zhangzh@node01 ~]$ cp [source] [target/newfilename]     # 复制到其他,并改名,不含属性
[zhangzh@node01 ~]$ cp -a [source] [target]              # 复制,包含属性
[zhangzh@node01 ~]$ cp -r [source/] [target/]            # 复制目录/文件
[zhangzh@node01 ~]$ cp -r [source/] [target/newfilename] # 复制目录/文件,并改名
[zhangzh@node01 ~]$ cp -r [source/*] [target/]           # 复制文件下的文件
[zhangzh@node01 ~]$ mv [source] [target]                 # 同目录下移动=修改名称
[zhangzh@node01 ~]$ mv [source/] [target/]               # 不同目录下移动=剪切

跨服务器传文件

在两台机之间传输文件可以用 scp,它的地址格式与ssh基本相同,都是可以省略用户名和端口,稍微的差别在与指定端口时用的是大写的 -P 而不是小写的。不过,如果已经配置了别名,那么这都不重要,因为 scp 也支持直接用别名。

# 把本地的 /path/to/local/file 文件传输到远程的 /path/to/remote/file
scp -P port /path/to/local/file user@remote:/path/to/remote/file

# 也可以使用别名
scp /path/to/local/file lab:/path/to/remote/file

# 把远程的 /path/to/remote/file 下载到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file

# 远程的默认路径是家目录
# 下面命令把当前目录下的 file 传到远程的 ~/dir/file
scp file lab:dir/file

# 加上 -r 命令可以传送文件夹
# 下面命令可以把当前目录下的 dir 文件夹传到远程的家目录下
scp -r dir lab:

# 别忘了 . 可以用来指代当前目录
# 下面命令可以把远程的 ~/dir 目录下载到当前目录里面
scp -r lab:dir/ .

rm命令(remove file)删除文件或目录,删除目录可以使用rm -rf命令或者rmdir命令(Remove directory)

最后更新于