(一) 目录相关操作
1) pwd(显示目前所在目录)
$ pwd
$ pwd -P # 显示真正的所在目录路径, 而非链接文件路径
2) mkdir(建立新目录)
$ mkdir <目录名>
$ mkdir [-m <权限>] <目录名> # -m指定目录的权限
$ mkdir [-pm <权限>] <目录路径> # -p递归创建目录
如果未制定目录权限的话, 会使用默认权限(umask)
3) rmdir(删除空目录)
$ rmdir <目录名>
$ rmdir -p <目录路径>
4) cd改变当前工作目录
$ cd <绝对路径/相对路径>
$ cd ~ # 到当前用户家目录
$ cd ~<账户名> # 到指定账户家目录
$ cd - # 到上一个工作目录
$ cd # 到当前用户家目录, 等于cd ~
5) $PATH执行文件路径变量
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/home/siso/.local/share/JetBrains/Toolbox/scripts:/home/siso/.local/share/JetBrains/Toolbox/scripts
为了安全起见, 当前目录./并未加入到$PATH, 这一点和windows不同
(二) 文件与目录管理
1) ls查看文件与目录
$ ls [-a] # -a 代表显示包括隐藏文件在内的文件或目录
$ ls [-d] # 仅列出目录本身
$ ls [-l] # 列出详细数据
$ ls [-R] # 连同子目录一起列出来
$ ls --time={atime, ctime} # 输出access时间(atime)或改变权限的时间(ctime), 而非内容修改的时间
$ ls --color={never, always, auto}
由于ls -l过于常用, 因此有一个别名
$ ll # 两个小写L, 相当于ls -l
2) cp复制文件或目录, 建立快捷方式, 更新文件
$ cp [options] <source1, source2, ...> <destination>
-
-a
相当于-dr --preserve=all
-
-d
若源文件为链接文件属性, 则复制链接文件属性而非文件本身
-
-f
强制, 若目标文件已经存在且无法开启, 则删除后再尝试
-
-i
若目标文件已经存在, 在覆盖时会先询问
-
-l
进行硬链接(hard link)的链接文件建立, 而非复制文件本身
-
-p
连同文件的属性(权限, 用户, 时间)一起复制过去
-
-r
递归复制, 用于目录的复制操作
-
-s
复制为符号链接文件(symbolic link), 即"快捷方式"文件
-
-u
destination比source旧时才更新destination, 或destination不存在时才复制
-
--preserve=all
除了-p
的权限相关参数外, 还加入SELinux属性, links, xattr等也复制
默认情况下, 复制之后目标文件的拥有者通常会是命令操作者本身.
另外, 普通用户身份不能随意修改文件的拥有着与用户组, 所以一般即使加上-a选项, 也是无法完成完整权限的复制. 这意味着普通用户复制的文件拥有者只能是自己, 除非有管理员特权.
3) rm删除文件或目录
$ rm [-fir] <文件或目录>
-
-f
忽略不存在的文件, 不会出现警告信息
-
-I
交互模式, 删除前询问
-
-r
递归删除, very dangerous!!!
$ sudo rm -rf /* # very dangerous!!! do not give it a try!
默认情况下, root用户的rm命令自动加-i
选项
4) mv移动文件或目录i, 重命名
$ mv [-fiu] source destinaiton
$ mv -b source1 source2 ... directory
$ mv -n source1 source2 ... directory
-
-b
如果目标文件已经存在,则将目标文件备份,文件名末尾默认为~
-
-n
[–no-clobber] 不覆盖目标文件
5) 获取路径的文件名与目录名称
$ basename /etc/sysconfig/network
network
$ dirname /etc/sysconfig/network
/etc/sysconfig
(三) 文件内容查看
1) 直接查看文件内容
$ cat [-AbEnTv]
-
-A
相当于-vET的整合选项, 可列出一些特殊字符
-
-b
针对非空白行列出行号
-
-E
将结尾的换行符$显示出来
-
-n
包括空白行在内显示出行号
-
-T
将[tab]案件以^I
显示出来
-
-v
列出一些看不出来的特殊字符
$ tac /etc/issue
反向列示
$ nl [-bnw] 文件
添加行号打印
-
-b
主要有两种:-b a
相当于cat -n
, -b t
(默认)相当于cat -b
nl可以对行号做比较多的显示设计,包括位数与是否自动补齐0等功能
2) 可翻页查看
more运行过程中的可用按键
-
空格键
: 向下翻一页
-
回车
: 向下翻一行
-
/字符串
: 在显示的内容中,向下查找字符串这个关键词
-
:f
: 立即显示文件名以及目前显示的行数
-
q:
: 立即离开
-
b
或[ctrl]-b
: 往回翻页, 对管道无用
less的用法比起more更有弹性
-
空格建
: 向下翻页
-
pagedown
: 向下翻页
-
pageup
: 向上翻页
-
/字符串
: 向下查找字符串的功能
-
?字符串
: 向上查找字符串的功能
-
n
: 重复前一个查找
-
N
: 反向的重复前一个查找
-
g
: 前进到这个数据的第一行
-
G
: 前进到这个数据的最后一行
-
q
: 离开less这个程序
man是调用less实现的, 因此两者的命令相似
3) 数据截取
$ head file # 显示文件前10行
$ head -n 20 file # 显示文件前20行
$ head -n -100 file # 显示文件除后100行外的所有行
$ tail file # 显示后10行
$ tail -n 20 file # 显示后20行
$ tail -n +100 file # 显示除前100行外的所有行
$ tail -f file # 持续检测file的内容
练习
# 显示文件中第11-20行业内容(带行号)
cat -n file | head -n 20 | tail
4) 非纯文本文件
$ od [-t TYPE] file
$ od -t dCc file # 输出十进制与字符的对照
-t : 后面可以接各种类型的输出,如:
-
a
: 利用默认的字符来输出
-
c
: 使用ASCII字符来输出
-
d[size]
: 使用十进制(decimal)来输出数据,每个整数占用size Bytes
-
f[size]
: 使用浮点数(floating)来输出数据,每个数占用size Bytes
-
o[size]
: 使用八进制(octal)来输出数据,每个整数占用size Bytes
-
x[size]
: 利用十六进制(hexadecimal)来输出数据,每个整数占用size Bytes
5) 修改文件时间或创建新文件
$ ls -l --time=atime file # 列出读取时间
$ ls -l --time=mtime file # 列出修改时间, 默认
$ ls -l --time=ctime file # 列出状态更改时间, ctime无法被复制
$ touch [-acdmt] file # 不带可选参数时, 修改atime和mtime
-
-a
仅自定义access time
-
-c
仅修改static time
-
-m
modification time
-
-d[--date="日期或时间"]
自定义日期而不使用目前的日期
-
-t
自定义时间而不使用目前时间,格式为[YYYYMMDDhhmm]