目录与档案管理
Linux虽然现在distributions也提供了桌面程序,但在开发中不可能直接在Linux主机上操作,Linux主机一般都在千里之外的机房,而我们一般通过Xshell等工具来连接Linux主机的终端操作,因此如何使用指令在不同的目录间切换、建立与删除目录、建立与删除档案、查找档案、查询编辑档案内容则尤为重要。
相对路径与绝对路径
- 绝对路径:路径的写法由根目录/写起,例如: /root
- 相对路径:以相对于当前目录的写法
- .:代表当前目录
- ..:代表上一层目录
- -:代表前一个工作目录
- ~:代表当前用户的家目录
- ~yutao:代表yutao这个用户的家目录(/home/yutao)
目录相关操作
ls(list):列出目录清单
语法:
ls [OPTION]... [FILE]...
OPTION:
- -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} :输出access 时间或改变权限属性时间(ctime) 而非内容变更时间(modification time)
mtime,ctime与atime
mtime(modification time):档案内容资料变更时更新这个时间
ctime(status time):档案的状态(权限和属性)变更时更新这个时间
atime(access time):档案的内容被取用(读取)时更新这个时间
touch(修改mtime,atime)
语法:
touch [OPTION]... FILE...
OPTION:
- -a:仅修改access time
- -c,–no-create:仅修改档案的时间,若该档案不存在则不建立新档案
- -d ,–date=STRING:解析STRING并使用它修改日期时间,修改atime,mtime
- -m :仅修改mtime
- -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
touch仅只能修atime和mtime,当修改atime和mtime时会更新ctime到当前时间
cd(change directory):进入某个目录
pwd(Print Working Directory):显示当前所在目录
语法:
pwd [OPTION]...
OPTION:
- -P,–physical:显示出确实的路径,而非连接(link) 路径
CentOS 7 将/bin作为连接档链接到/usr/bin
basename And dirname:档案档名与目录名
basename用于取目录的最后档名,dirname则与basename相反,取档名前的目录。
basename
语法:
basename NAME[SUFFIX]
basename OPTION... NAME...
OPTION:
- -a,–multiple:支持多个参数并且每个作为一个NAME
- -z,–zero:使用NUL替代换行作为输出分隔符
dirname
语法:
dirname [OPTION] NAME...
OPTION:
- -z,–zero:使用NUL替代换行作为输出分隔符
mkdir(make directory):建立一个新的目录
语法:
mkdir [OPTION]... DIRECTORY...
OPTION:
- -m,–mode=MODE:设定目录的权限
- -p,–parents:多层目录时,不存在的目录递回建立
- -v,–verbose:对于每个创建的目录输出一条信息
rmdir(remove directory):删除一个空的目录
语法:
ls [OPTION]... DIRECTORY...
OPTION:
- -p,–parents:移除一个目录及递回移除它的祖先目录
- -v,–verbose:移除每个目录都输出相关信息
rmdir只能删除一个空的目录,如果目录里有其他目录或档案则不能删除。-p删除上层目录时上层目录也必须是空的,不然会删除失败。
$PATH
在Linux中可以在任何的地方执行指令,并不会出现找不到指令,由此可以联想到在Windows中,我们在cmd中能够在任意目录执行指令则需要配置环境变量PATH,比如:JAVA_HOME,那么Linux是否也存在同样的机制呢?答案是肯定的。
使用echo $PATH可以查看PATH
当我们在执行一个指令的时候,系统会依照PATH定义的目录去查找这个指令的执行档,当有多个相同的指令存在时,优先搜索到的会被执行。添加目录到PATH:
将/root加入到PATH中
PATH=${PATH}:/root
不建议将 .(当前所在目录) 加入到PATH中,这样做会引起安全方面问题。
档案与目录相关操作
file:观察档案类型
which:寻找执行档
which只能查找执行档的完整档名,且只会去PATH规定的目录中查找,关于PATH请看后续。
语法:
which [OPTION]... command
OPTION:
- -a:将所有由PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
whereis:到一些特定目录中查找档案档名
语法:
whereis [OPTION]... name...
OPTION:
- -l :可以列出whereis 会去查询的几个主要目录而已
- -b :只找binary 格式的档案
- -m :只找在说明档manual 路径下的档案
- -s :只找source 来源档案
- -u :搜寻不在上述三个项目当中的其他特殊档案
cp(copy):复制档案或目录
语法:
cp [OPTION]... [-T] SOURCE DESTION
cp [OPTION]... SOURCE... DERECTORY
复制多个档案到某个目录
cp [OPTION]... -t DIRECTORY SOURCE...
OPTION:
- -a :相当于-dr –preserve=all的意思,至于dr请参考下列说明;(常用)
- -d :若来源档为连结档的属性(link file),则复制连结档属性而非档案本身;
- -f :为强制(force)的意思,若目标档案已经存在且无法开启,则移除后再尝试一次;
- -i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- -l :进行硬式连结(hard link)的连结档建立,而非复制档案本身;
- -p :连同档案的属性(权限、用户、时间)一起复制过去,而非使用预设属性(备份常用);
- -r :递回持续复制,用于目录的复制行为;(常用)
- -s :复制成为符号连结档(symbolic link),亦即『捷径』档案;
- -u :destination 比source 旧才更新destination,或destination 不存在的情况下才复制。
- –preserve=all :除了-p 的权限相关参数外,还加入SELinux 的属性, links, xattr 等也复制了。
- -T:目标作为一个普通档案
- -t:复制所有SOURCE到目录中
rm(remove):删除档案或目录
语法:
rm [OPTION]... [FILE]...
OPTION:
- -f,–force:忽略不存在的档案和参数,不会出现警告
- -i:互动模式,每个移除之前询问是否动作
- -I:当一次移除超过三个档案或递归移除时询问是否动作
- –interactive[=WHEN]:WHEN有三个值:once(-I)、always(-i)、never,没有WHEN时,默认always
- -r,-R,–recursive:移除一个目录并且递归删除它们的内容(慎用)
- -d,–dir:移除一个空目录
- -v,–verbose:提示正在操作的信息
如果不想删除在互动时输入“n”,或者使用“Ctrl+C”中断后续操作。为了防止档案被root误杀,所以很多distributions都预设了-i选项,如果不想被询问可以在指令前加上“\”。如:\rm -d /tmp/test
mv(move):移动档案或目录,或重命名
语法:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
OPTION:
- –backup[=CONTROL]:备份目标文件
- -b,: 类似于–backup但不需要参数
- -f,–force:覆盖一个存在的档案不会出现警告
- -i,–interactive:覆盖一个存在的档案询问是否覆盖
- -n,–no-clobber:不覆盖已存在的档案
- -t,–target-directory:移动所有SOURCE到目录
- -T,–no-target-directory:目标作为一个普通档案
- -u,–update:当源档案比目标档案更新或目标档案不存在时移动
- -v,–verbose:提示正在操作的信息
重命名可以使用上述的mv指令,也可以使用rename指令来更改大量档案的档名,更多具体操作使用man rename来查询。
档案查询
查询档案内容常用的指令:
- cat:由第一行开始显示档案内容
- tac:从最后一行开始显示,可以发现是cat倒着写的
- nl:显示内容的时候显示行号
- more:分页显示档案的内容
- less:与more类似,但是比more更好的是可以向前翻页
- head:只显示头几行
- tail:只显示后几行
- od:以二进位的方式读取档案内容
文字档查询
cat
语法:
tac [OPTION]... [FILE]...
OPTION:
tac
语法:
tac [OPTION]... [FILE]...
OPTION:
- -b,–before:在取消之前附加分隔符
- -r,–regex:将分隔符解释为正则表达式
- -s,–separator=STRING:使用STRING作为分隔符替代换行符
nl
语法:
nl [OPTION]... [FILE]...
OPTION:
- -b,–body-numbering=STYLE:使用STYLE方式标记行号,默认t
- -d,–section-delimiter=CC:使用CC分割逻辑页
- -f,–footer–numbering=STYLE:使用STYLE方式标记页脚行号,默认n
- -h,–header-numbering=STYLE:使用STYLE方式标记页头行号,默认n
- -i,–line-increment=NUMBER:行数字递增NUMBER,默认1
- -l,–join-blank-lines=NUMBER:作用没弄清楚,默认1
- -n,–number-format=FORMAT:按格式插入行数字,默认rn
- -p,–no-renumber:在逻辑页不重置行数字
- -s,–number-separator=STRING:使用STRING分割行号数字与内容,默认TAB
- -v,–starting-line-number=NUMBER:在每个逻辑页的第一个行数字是NUMBER,默认1
- -w,–number-width=NUMBER:使用NUMBER列的行号宽度,默认6
默认使用了 -v1 -i1 -l1 -sTAB -w6 -nrn -hn -bt -fn
STYLE is one of:
- a:所有行编号
- t:仅非空的行编号
- n:所有行都不编号
FORMAT is one of:
- ln:编号左对齐,无前导零
- rn:编号右对齐,无前导零
- rz:编号右对齐,有前导零
more
语法:
more [OPTION].. FILE...
more查询档案有几个按键可以用:
- 空白键(space):代表向下翻一页;
- Enter :代表向下翻一行;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开more ,不再显示该档案内容。
- b 或[ctrl]-b :代表往回翻页,不过这动作只对档案有用,对管线无用。
less
less相比于more更加有弹性,可以随意向前或向后翻看,翻看档案更加的方便,使用man指令时就是呼叫less来显示说明文件的内容的,less中可以输入的指令:
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻(与/ 或? 有关!)
- N :反向的重复前一个搜寻(与/ 或? 有关!)
- g :前进到这个资料的第一行去;
- G :前进到这个资料的最后一行去(注意大小写);
- q :离开less 这个程式;
head
语法:
head [OPTION]... [FILE]...
OPTION:
- -c,–bytes=[-]K:显示档案的前K个字节,带有’-‘,显示档案所有内容除去最后K个字节
- -n,–lines=[-]K:显示前K行代替默认的显示10行,带有’-‘,显示档案所有内容除去最后K行
- -q,–quiet,–silent:不打印出文件名的页眉
- -v,–verbose:总是打印出文件名的页眉
tail
语法:
tail [OPTION]... [FILE]...
OPTION:
- -c,–bytes=[+]K:显示档案最后K的字节,带有’+’,显示K个字节后的内容
- -n,–lines=[+]K:显示档案最后K行,默认显示最后10行,带有’+’,显示K行后的内容
- -f,–follow[={name|descriptor}]:侦测某个档案添加的内容,直到使用Ctrl+c才会离开tail指令的侦测
二进制档案查询
od
语法:
od [OPTION]... [FILE]...
od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]
od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]
OPTION:
- -t,–format=TYPE:使用TYPE格式输出
TYPE is one of:
- a :利用预设的字元来输出;
- c :使用ASCII 字元来输出;
- d[size] :利用十进位(decimal)来输出资料,每个整数占用size bytes ;
- f[size] :利用浮点数值(floating)来输出资料,每个数占用size bytes ;
- o[size] :利用八进位(octal)来输出资料,每个整数占用size bytes ;
- x[size] :利用十六进位(hexadecimal)来输出资料,每个整数占用size bytes ;