Linux: Linux文件和目录管理

Linxu的读书笔记
一些比较特殊的目录:

.  代表此层目录
.. 代表上层目录
-  代表前一个工作目录
~  代表目前用户所在的主文件夹
~account 代表account这个用的主文件夹夹

目录的相关操作

cd(切换目录)
pwd(显示目前所在的目录)
$ pwd [-P]
#参数 -P:显示当前的路径,而非使用连接(link)路径
mkdir(新建新目录)
$ mkdir [-mp] 目录名称
#参数 -m: 配置文件的权限,直接设置,不需要看默认权限
#参数 -p: 直接将所需要的目录(包含上层目录)递归创建起来。

#例如创建权限为rwx--x--x的目录
$ mkdir -m 711 test2
#要创建多层目录
$ mkdir -p test1/test2/test3/test4
rmdir(删除空的目录)
$ rmdir [-p] 目录名称
#参数 -p: 连同上层空的目录也一起删除

#例如要删掉上面创建的多层目录
$ rmdir -p test1/test2/test3/test4

注意,这个rmdir仅能删除空的目录。如果是要将目录下的东西都删掉,使用:rm -r test

关于执行文件路径的变量:$PATH

当我们执行一个命令时,例如 ls,系统会依照PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录下含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。

# 可以使用echo $PATH看哪些目录被定义
$ echo $PATH
输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
每个目录之间用冒号: 隔开,每个目录都有顺序之分

对于要执行不在PATH变量设置的目录的命令,
可以使用绝对路径来执行该命令。
或者去到命令的执行文件目录下,用“./command”(例如“./ls”)来执行
如果想要在任何目录下均可执行命令,则需要将命令的可执行文件路径加入到PATH当中。

$ 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号码
# -l: 列出长数据串,包含文件的属性与权限等数据
# -n: 列出UID与GID,而非用户与用户组的名称
# -r: 将排序结果反向输出,例如原本文件名由小到大,反向则为由大到小
# -R: 连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
# -S: 以文件容量大小排序
# -t: 以时间排序
# --color=never: 不要依据文件特性给予颜色显示
# --color=always: 显示颜色
# --color=auto: 让系统自行依据设置来判断是否给予颜色
# --full-time: 以完整时间模式(包含年、月、日、时、分)输出
# --time=[atime,ctime]: 输出访问时间或更改权限属性时间(ctime),而非内容更改时间
复制、删除与移动:cp、rm、mv

cp(复制文件)
cp命令除了复制文件,还可以创建链接文件(快捷方式),对比两个文件的新旧而予以更新,以及复制整个目录等功能。

$ cp [-adfilprsu] 源文件 目标文件
$ cp [options] source1 source2 source3 .... directory
# 参数 -a: 复制文件的所有特性,包括所属用户、权限、时间等(如果操作的用户没有修改文件的所有者和用户组权限,无法复制所属用户,只能复制权限时间等属性)
# -d: 若源文件为连接文件的属性,则复制连接文件属性而非文件本身
# -f: 强制复制,若目标文件已经存在且无法开启,则删除后再尝试一次
# -i:若目标文件已经存在,在覆盖时会先询问操作的进行
# -l: 进行硬连接的连接文件创建,而非复制文件本身
# -p: 连同文件的属性一起复制过去,而非使用默认属性
# -r: 递归持续复制,用于目录的复制行为
# -s: 复制成为符号连接文件,即快捷方式文件
# -u: 若目标文件比源文件旧才更新目标文件
# 如果源文件有两个以上,则最后一个目的文件一定要是目录才行

rm(移除文件或目录)

$ rm [-fir] 文件或目录
# 参数 -f: 强制删除,忽略不存在的文件,不会出现警告信息
# -i: 互动模式,在删除前会询问用户是否操作
# -r: 递归删除,最常用在目录的删除,这是比较危险的参数
# 如果要删除的文件文件名开头带着-,例如“-”,需要把删除的文件路径写出来,避免被系统误判为参数,例如“rm ./-aaa-”或者“rm -- -aaa-”

mv(移动文件与目录,或更名)

$ mv [-fiu] 源文件 目标文件
$ mv [option] source1 source2 source3 ... directory
# 参数 -f: 强制移动,如果目标文件已经存在,不会询问直接覆盖
# 参数 -i: 若目标文件已经存现,就会询问是否覆盖
# -u: 若目标文件已经存在,且source比较新,才会更新
# 如果有多个源文件或目录,则最后一个目标文件一定是“目录”,意思是将所有的数据移动到该目录

取得路径的文件名和目录名称

#取得文件名
$ basename /etc/sysconfig/network
# 结果:network
#取得目录名
$ dirname /etc/sysconfig/network
# 结果:/etc/sysconfig

文件内容查阅

直接查看文件内容

cat(由第一行开始显示文件内容)

$ cat [-AbEnTv]
# 参数 -A: 相当于-vET的整合参数,可列出一些特殊的字符,而不是空白而已
# -b: 列出行号,仅针对非空白行做行号显示,空白行不标行号
# -E: 将结尾的断行字符$显示出来
# -n:打印出行号,连同空白行也会有行号,与-b的参数不同
# -T: 将[Tab]按键以^I显示出来
# -v: 列出一些看不出来的特殊字符

#例如,
$ cat /etc/issue

tac(反向列示)
由最后一行到第一行反向在屏幕上显示出来

$ tac /etc/issue

nl(添加行号打印)

$ nl [-bnw] 文件
# 参数 -b:-b a 表示无论是否为空行,也同样列出行号
#          -b t 表示如果有空行,空的那一行不要列出行号
# -n: -n ln 表示行号在屏幕的最左方显示
#     -n rn 表示行号在自己字段的最右方显示,且不加0
#     -n rz 表示行号在自己字段的最右方显示,且加0
# -w: 行号字段占用的位数,例如 nl -w 3 /etc/issue 表示行号占用3位
可翻页查看

more(一页一页翻动)

$ more /etc/man.config
如果more后面接的文件内容大于屏幕输出的行数,可以用以下按键进行一些操作:
空格键:代表向下翻一页
Enter: 代表向下滚动一行
/字符串: 代表在显示的内容当中,向下查询“字符串”这个关键字,如果要重复查询同个字符串,可以按下n
:f 立刻显示出文件名以及目前显示的行数
q  代表立刻离开more,不再显示该文件内容
b或者[ctrl]-b 代表往回翻页,不过这操作只对文件有用,对管道无用

less(一页一页翻动)

$ less /etc/man.config
查询命令包括:
空格键:向下翻动一页
[PageDown]: 向下翻动一页
[PageUp]: 向上翻动一页
/字符串:向下查询字符串
?字符串:向上查询字符串
n: 重复查询同个字符串(与/或?有关)
N: 反向重复查询同个字符串
q: 离开less这个程序
数据选取

head(取出前面几行)

$ head [-n number] 文件
# 参数 -n: 后面接数字,代表显示几行,默认情况下,显示10行
# 例如
$ head -n 20 /etc/man.config
# 如果是后面100行都不打印,只打印前面几行
$ head -n -100 /etc/man.config

tail(取出后面几行)

$ tail [-n number] 文件
# 参数 -n: 后面接数字,代表显示几行的意思,默认显示最后的10行
# -f: 表示持续检查后面所接的文件名,要等到按[ctrl]-c才会结束tail的检测
# 例如
$ tail -n 20 /etc/man.config
# 如果只想列出100行以后的数据
$ tail -n +100 /etc/man.config

# 如果想显示/etc/man.config的第11到20行
$ head -n 20 /etc/man.config | tail -n 10
# 这个涉及到管道命令
非纯文本文件:od

如果我们想查的文件不是文本文件,可以使用od命令行来查

$ od [-t TYPE] 文件
TYPE包括以下几种:
a: 利用默认的字符来输出
c: 利用ASCII字符来输出
d[size]: 利用十进制来输出,每个整数占用size bytes
f[size]: 利用浮点数来输出,每个整数占用size bytes
o[size]: 利用八进制来输出,每个整数占用size bytes
x[size]: 利用十六进制来输出,每个整数占用size bytes

修改文件时间或者创建新文件:touch

文件有3种类型的时间

  • modification time(mtime)

当文件内容数据更改时,就会更改这个时间

  • status time(ctime)

当文件的状态改变时,就会更改这个时间,例如权限与属性被更改

  • access time(atime)

当文件的内容被取用,就会更改这个读取时间,例如用cat去读取文件
默认情况下,ls显示出来是该文件的mtime

你可能感兴趣的:(linux)