目录与路径
相对路径与绝对路径:由/开始的就是绝对路径,否则是相对路径(相对当前路径)。
相对路径的用途:如果设计一套软件,里面包含有若干目录,如果客户分别把软件放置到不同的目录下,那程序将会出现问题,使用相对路径可以解决此问题。
绝对路径的用途:绝对路径可以保证路径的正确性。某些地方,使用相对路径,可能由于执行的环境不同而导致一些问题。
目录的相关操作:
符号 |
意义 |
. |
代表此层目录 |
.. |
代表上一层目录 |
- |
代表前一个工作目录 |
~ |
代表当前用户的家目录 |
~Account |
代表Account这个用户的家目录 |
命令 |
意义 |
cd |
更换目录 |
pwd |
显示当前目录 |
mkdir |
创建一个新目录 |
rmdir |
删除一个空的目录 |
cd(Change Directory)切换目录
命令 |
说明 |
cd [相对路径/绝对路径] |
|
cd ~vbird |
表示切换到vbird用户的家目录 |
cd ~ |
切换到自己的家目录 |
cd |
与cd ~类似 |
cd - |
表示回到刚刚的那个目录,例如:当前在a目录,a的上一层是b,cd a, cd ..,cd -(-代表就是a目录) |
pwd(Print Working Directory)显示目前所在的目录
pwd –P:显示实际的路径,而非使用链接路径。
mkdir(建立新目录)
参数 |
说明 |
-m + 权限 |
配置文件的权限。例如:-m 777。如果没有加上-m来强制设定属性,系统会使用默认属性。 |
-p |
帮助直接将所需要的目录(包含上一层目录)递归建立起来 |
rmdir(删除空目录)
-p:连同上层空的目录也一起删除
关于执行文件路径的变量:$PATH(注意是大写)
echo $PATH
1 每个目录用:隔开,而且每个目录都是有顺序之分的。
2 如果两个目录中都存在某一个命令,则最先被查询到的那个命令被执行
3 为了安全起见,不建议将“.”加入到PATH的搜寻目录中
4 不同身份的用户PATH是不同的
5 PATH可以修改,一般使用者可以修改PATH来执行/sbin或/usr/bin下的命令
文件与目录管理
查看文件与目录:ls
参数 |
说明 |
-a |
显示所有的文件及目录 |
-h |
以人类易读的方式的方式显示文件的容量 |
-d |
仅列出目录本身,而不是列出目录内的文件数据 |
-l |
详细信息格式显示,包含文件的属性&权限等(也可以使用ll) |
复制、删除与移动:cp、rm、mv
cp
参数 |
说明 |
-a |
相当于-pdr属性 |
-i |
如果目标文件存在时,在覆盖前会先询问 |
-p |
连同文件的属性一起复制,而非使用默认属性(备份常用) |
-r |
递归持续复制 |
在使用cp进行拷贝之前,需要了解:
1 是否需要完整的保留来源文件的信息
2 源文件是否是链接文件
3 源文件是否是特殊文件
4 源文件是否为目录
rm
-f |
忽略不存在的文件,不会出现警告信息 |
-i |
互动模式,在删除前要求客户的确认 |
-r |
递归删除,常用语目录的删除 |
\rm –r /tmp/etc
在指令前加上反斜杠,可以忽略alias的指定选项。
删除文件名以“-”开头的文件
rm ./-filename
mv(移动文件或目录)
-f |
如果目标文件已经存在,不会询问直接覆盖 |
-i |
若目标文件已经存在,提示是否需要覆盖 |
-u |
若目标文件存在,且source较新才会更新 |
获取路径的文件名或目录名称
basename /etc/sysconfig/network
network <==获取到的是最后的名称
dirname /etc/sysconfig/network
/etc/sysconfig <==获取到的是目录名
文件内容查询
最常用的显示文件内容的指令是:cat\more\less。如果一个很大的文件,但我们只需要几行而已,使用tail或者tac。
cat |
由第一行开始显示内容 |
tac |
从最后一行开始显示,tac是cat倒着写 |
nl |
显示同时输出行号 |
more |
一页一页的显示文件内容 |
less |
与more相似,但它可以支持往前翻页 |
head |
只看头几行 |
tail |
只看尾几行 |
od |
二进制方式读取文件内容 |
直接查看文件内容cat/tac/nl
cat -n 显示行号
一般配合more或less较好
tac反向显示
cat是从第一行到最后一行打印,而tac则是从最后一行到第一行打印
nl(添加行号打印)
nl可以将行号进行比较多的显示设计
可翻页显示
more(一页一页滚动)
空格 |
向下翻页 |
Enter |
向下翻一行 |
/字符串 |
在这个显示内容中,向下搜索关键字 |
:f |
显示文件名以及目前显示的行数 |
q |
离开 |
b |
往回翻页,对管道无效 |
less(一页一页翻动)
less的用法较more更加有弹性,使用less,可以往前翻,也可以往后翻,和VIM的按键一致。
空格 |
向下翻动一页 |
page down |
向下翻动一页 |
pageup |
向上翻动一页 |
/字符串 |
向下搜寻“字符串”的功能 |
?字符串 |
向上搜寻“字符串”的功能 |
n |
重复前一个搜寻(与/或?有关) |
N |
反向的重复前一个搜寻 |
q |
离开less程序 |
从文件中取出数据
head(取出前面几行)
head [-n number] 文件
默认显示前10行。如果n是负数,代表不包括后面的多少行。例如:某个文件有141行,如果使用head –n -100,则打印前面的41行,后面的100行则不打印。
tail(取出后面几行)
tail [-n number] 文件
默认显示最后10行
-n:代表几行的意思,如果使用head –n +100则列出100以后的行
-f:表示一直检测文件,如果文件有变化就显示到屏幕
非纯文本:od
od [-t TYPE] 档案
-t可接各种类型的输出
a |
利用默认的字符输出 |
c |
使用ASCII字符输出 |
d[size] |
利用十进制来输出数据,每个整数占用size bytes |
f[size] |
利用浮点数输出 |
o[size] |
利用八进制输出 |
x[size] |
利用十六进制输出 |
左边第一栏是以8进制表示的bytes数,
修改文件时间或创建新文件:touch
modification time(mtime):文件内容发生改变时,都会更新时间。
status time(ctime):文件的状态改变时,会更新这个时间。
access time(atime):文档的内容被取用的时候,都会更新这个时间。
例如:
ls –l --time=atime /etc/man.config
ls –l –time=ctime /etc/man.config
如果文件的时间有问题的话,可能会造成某些程序无法顺利的运行。使用touch可以改变文件的时间。
touch [-acdmt] 文件/目录
* 建立一个空的文件
* 将mtime、atime修改为当前时间
-a |
仅修改access time |
-c |
仅修改文件的时间,若文件不存在,则不会建立新文件 |
-d |
后面直接加上要修改的日期 |
-m |
仅修改mtime |
-t |
后面可以直接加上要修改的时间,格式为[YYMMDDhhmm] |
如果touch后的文件存在,则将更新mtime/atime/ctime。如果不存在,则创建新的文件。
在Linux命令中,输入分号表示连续执行命令;
例如:ll;cd ..;ll
文件默认权限:umask
umask
0022 <<< 与一般权限有关是后面的三个数字,第一组是特殊权限用的
若用户创建“文件”则默认没有可执行权限,只有r、w两个选项,最大为666
若用户创建“目录”默认为所有权限开放,即为777。
若umask为022,则:
新建文件时:(-rw-rw-rw-) – (----w--w-) (-rw-r--r--)
可以这样来设置umask:umask 002
文件隐藏属性:chattr、lsattr
chattr [+-=][Asacdistu] 文件或目录名称
a |
文件只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性 |
i |
让一个文件“不能被删除、改名、设置连接也无法写入或添加数据”,只有root才能设置 |
lsattr [-adR] 文件或目录
-a:将隐藏文件的属性都打印出来
-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名
-R:连同目录的数据也一并列出来
文件特殊权限:SUID,SGID,SBIT
SetUID:当s出现在文件所有者的x权限上时,被成为Set UID。
*SUID权限仅对二进制程序有效
*执行者对于该程序需要具有x的可执行权限
*该权限尽在执行程序的过程中有效
*执行者将该具有程序所有者的权限
Set GID:当s出现在用户组的x时,则成为Set GID。
*SGID可以针对文件或目录来设置
*SGID对二进制程序有效
*程序执行者对于该程序来说,需具备x的权限
*执行者在执行的过程中将会获得该程序用户组的支持
Sticky Bit:只针对目录有效。
*用户对此目录具有w、x权限
*用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件
如果要设置SGUID、SGID、SBIT权限的话,需在之前学习过的三个权限数字前再加上一个数字:4为SUID、2为SGID、1为SBIT。
查看文件类型:file
脚本文件名的查询:通过which或type来搜寻
-a:将所有由PATH目录中可以找到的命令均列出,而不只第一个被找到的命令名称
文件名的查找:使用whereis与locate利用数据库来查找文件,速度较快,如果真找不到才使用find查找。
whereis [-bmsu] 文件或目录
-b |
只找二进制格式的文件 |
-m |
只找在说明文件manual路径下的文件 |
-s |
只找source源文件 |
-u |
查找不在上述三个选项当中的其他特殊文件 |
Linux系统将系统内所有的文件都记录在一个数据库文件下,当使用whereis或者locate的时候,都会以次数据库文件的内容为准。
locat使用更简单,直接在命令后面输入“文件的部分名称”就能够得到结果。
手动更新数据库:updatedb——根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件,locate根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名。
locate [-ir] keyword
-i:忽略大小写
-r:后面可接正则表达式的显示方式
find
find [PATH] [option] [action]