首先要介绍的命令是:man命令 (manual),通过阅读手册了解命令的使用如:man ls
其次掌握 type命令, 判断命令是可执行文件、shell内置命令还是别名,type
的使用方法参考附录 。
在处理 Linux 文件时注意:
标准的 Linux 文件,路径名长度(包含所有字符) 不可超过 4096 字节
路径名中通过 / 分隔开的每一部分的长度不可超过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
复制 [zhangzh@node01 ~ ]$ mkdir lab
[zhangzh@node01 ~ ]$ ll
total 8
drwxr-xr-x 2 zhangzh ybj 4096 May 9 12:10 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 filename
和unzip 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
复制 $ find /home -iname "*.txt"
复制 find . -regex ".*\(\.txt\|\.pdf\)$"
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 -sh
和 du -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
的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
mv
与cp
的结果不同,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)