目录与路径
-
相对路径与绝对路径
- 绝对路径:由根目录开始写起,例如:/etc/nginx/xxx
- 相对路径:以当前工作目录为参考,例如:./a.js
-
目录相关操作
-
特殊的目录:
. 代表当前目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表“目前用户身份”所在的主文件夹 ~acount 代表 account 这个用户的主文件夹
-
常见作用于目录的命令
- cd:切换目录
- pwd:显示当前目录
- mkdir:新建一个新的目录
- rmdir:删除一个空的目录(如果目录非空,用此命令删除目录会失败)
# cd 用法 cd [相对路径|绝对路径] # 说明 如果直接调用cd,后面不跟路径,则等效于 cd ~ # pwd 用法 pwd [-P] #参数 -P:显示出当前的路径,而非使用连接(link)的路径 # mkdir 用法 mkdir [-mp] <目录名称> # 参数 -m:直接设置准备创建的目录的权限,而不需要看umask -p:递归创建目录 # 举个栗子 mkdir -p a/b/c/d/e # rmdir 用法 rmdir [-p] 目录名称 # 参数 -p:连同上层“空的”目录页删除 # 举个栗子 rmdir -p a/b/c/d/e
-
-
环境变量:$PATH
当前系统的环境变量记录了一连串的目录,以':'分隔,当用户执行一个命令时,系统会依次查询环境变量中记录的目录下的文件,找到则执行它,没找到则提示用户command not found
-
查看当前系统的目录
echo $PATH
更多参考(包含环境变量如何设置等等)
-
注意事项
- 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同
- PATH是可以修改的,所以一般用户还是可以通过修改PATH来执行某些位于/sbin或/usr/sbin下面的命令来执行
- 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来得正确
- 命令应该要放置到正确的目录下,执行才会更加方便
- 本目录(.)最好不要放置到PATH当中
-
文件与目录管理
-
查看文件与目录:ls
# 用法 ls [-aAdfFhilnrRSt] 目录名称 ls [--color={never,auto,always}] 目录名称 ls [--full-time] 目录名称 # 参数说明 -a:列出全部文件(包含隐藏文件) -A:列出全部文件(包含隐藏文件,但不包含.和..) -d:仅列出目录本身,而不是列出目录内的文件数据 -f:直接列出结果,而不进行排序(ls默认以文件名进行排序) -F:根据文件、目录等信息给予附加数据结构,例如 *:代表可执行文件 /: 代表目录 =: 代表socket文件 |: 代表FIFO文件 -h:将文件容量以人类较易读的方式(如GB、KB)列出来 -i:列出inode号码,inode的意义后面会详细介绍 -l:列出长数据串,包含文件的属性与权限等数据 -n:列出UID与GID,而非用户与用户组的名称 -r:将排序结果反序输出,例如:原本文件名由小到大,反则为由大到小 -R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来 -S:以文件容量大小排序,而不是用文件名排序 -t:以时间排序,而不是用文件名 --color=nerver:不要依据文件特性给予颜色显示 --color=always:显示颜色 --color=auto:让系统自行依据设置来判断是否给予颜色 --full-time:以完整时间模式(包含年月日时分)输出 --time={atime,ctime}:输出访问时间或改变权限时间(ctime),而非内容访问时间
-
复制:cp
# 用法 cp [-adfilprsu] source destination cp [options] sourse1 sourse2 ... directory # 参数 -a:相当于-pdr的意思 -d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身 -f:为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次 -i:若目标文件(destination)已经存在,在覆盖时会先询问是否覆盖 -l:进行硬连接(hard link)的创建,而非复制文件本身 -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用) -r:递归持续复制,用于目录的复制行为(常用) -s:复制成为符号连接(symbolic link),即“快捷方式文件” -u:若destination比source旧才更新 # 注意 如果源文件有两个以上,则最后一个目的文件一定要是一个目录才行
-
删除:rm
# 用法 rm [-fir] <文件|目录> # 参数 -f:就是force的意思,忽略不存在的文件,不会出现警告信息 -i:互动模式,在删除前会询问用户是否操作 -r:递归删除,最常用在目录的删除
-
移动文件与目录或更名:mv
# 用法 mv [-fiu] source destination mv [options] source1 source2 ... directory # 参数 -f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖 -i:若目标文件(destination)已经存在,就会询问是否覆盖 -u:若目标文件已经存在,且source比较新,才会更新(update)
-
取得路径的文件名与目录名称:basename、dirname
输入: basename /etc/sysconfig/network 输出: network 输入: dirname /etc/sysconfig/network 输出: /etc/sysconfig
文件内容查阅
- cat: 由第一行开始显示文件内容
- tac: 从最后一行开始显示(倒序显示)
- nl:显示的时候顺便输出行号
- more: 一页一页地显示文件内容
- less: 与more类似,但是比more更好用,它可以前后翻页
- head: 只看头几行
- tail: 只看结尾几行
- od: 以二进制的方式读取文件内容
-
直接查看文件内容:cat、tac、nl
-
cat(concatenate)
# 用法 cat [-AbEnTv] <文件> # 参数 -A:相当于-vET的整合参数,可列出一些特殊字符,而不是空白 -b:列出行号,仅针对非空白行做行号显示,空白行不标行号 -E:将结尾的断行字符$显示出来 -n:打印出行号,连同空白行也会有行号,与-b的参数不同 -T:将[TAB]按键以^I显示出来 -v:列出一些看不见的特殊字符
tac
参数用法和cat一致,只是显示的时候是倒序显示的-
nl(添加行号打印)
# 用法 nl [-bnw] <文件> # 参数 -b:指定行号指定的方式,主要有两种 -b a:表示不论是否为空行,也同样列出行号(类似 cat -n) -b t:如果有空行,空的那一行不显示行号(默认值) -n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示 -n rn:行号在自己字段的最右方显示,且不加0 =n rz:行号在自己字段的最右方显示,且加0 -w:行号字段占用的位数
-
-
可翻页查看:more、less
-
more(一页一页翻动)
# 用法 more <文件> # 操作 空格键(space):代表向下翻一页 Enter:代表向下滚动一行 /字符串:代表在这个显示的内容当中,向下查询“字符串”这个关键字 :f:立刻显示出文件名以及目前显示的行数 q:代表立刻离开more,不在显示该文件内容 b或[ctrl]-b:代表往回翻页,不过这操作只对文件有用,对管道无用
-
less(一页一页翻动)
# 用法 less <文件> # 操作 空格键(space):代表向下翻一页 [PageDown]:向下翻动一页 [PageUp]:向上翻动一页 /字符串:向下查询“字符串”的功能 ?字符串:向上查询“字符串”的功能 n:重复前一个查询(与/或?有关) N:反向重复前一个查询(与/或?有关) q:离开这个less程序
用法比more更有弹性,并且拥有更丰富的查询机制,同时支持上下键翻页。
-
-
数据选取:head、tail
-
head(取出前面几行)
# 用法 head [-n number] <文件> # 参数 -n:后面接数字,代表显示几行的意思
-
tail(取出后面几行)
# 用法 tail [-n number] <文件> # 参数 -n:后面接数字,代表几行的意思 -f:表示持续监测后面所接的文件名,要等到[ctrl]-c才会结束tail监测(这个用来实时查看日志很方便)
-
-
非纯文本文件:od
# 用法 od [-t TYPE] <文件> # 参数 -t:后面可以接各种“类型(TYPE)”的输出,例如: a :利用默认的字符来输出 c :利用ASCII字符来输出 d[size] :利用十进制(decimal)来输出,每个整数占用size bytes f[size] :利用浮点数(floating)来输出,每个整数占用size bytes o[size] :利用八进制(octal)来输出,每个整数占用size bytes x[size] :利用十六进制(decimal)来输出,每个整数占用size bytes
-
修改文件时间或创建新文件:touch
-
linux下文件的时间
- modification time(mtime)
该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限 - status time (ctime)
当文件的“状态”(status)改变时,就会更新这个时间。距离来说,像是权限与属性被更改了,都会更新这个时间。 - access time(*atime)
当“该文件的内容被取用”时,就会更新这个读取时间(access)。距离来说,我们使用cat命令取一个文件时,这个文件的atime就更新为当前时间了
- modification time(mtime)
-
touch
touch的默认行为:如果文件不存在则以目标文件名创建新文件,如果文件存在,则将其mtime、ctime和atime都更新为当前时间# 用法 touch [-acdmt] <文件> # 参数 -a:仅修改访问时间 -c:仅修改文件的时间,如果文件不存在不创建新文件 -d:后面可以接欲修改的日期而不用当前的日期,也可以使用 --date="日期或时间" -m:仅修改mtime -t:后面可以接欲修改的时间而不用目前的时间,格式为[YYMMDDhhmm]
-