Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
6.1 目录与路径
6.1.1 相对路径与绝对路径
- 若写程序(shell scripts)管理系统,务必使用绝对路径。因为绝对路径肯定不会有问题;若使用相对路径,可能由于执行的工作环境不同导致问题。
6.1.2 目录的相关操作
- 特殊的目录:
.
代表当前目录
..
代表上一层目录
-
代表前一个工作目录
~
代表目前用户的家目录;~account
代表account用户的家目录 - 在所有目录下都会存在
.
与..
两个目录。根目录的上一层..
与根目录自己.
是同一个目录。
cd(change directory变换目录)
cd [相对路径或绝对路径]
cd .. #表示去上层目录
cd - #表示回到刚刚的目录
cd ~ #表示回自己家目录
cd ~xiang #代表去xiang用户的家目录
cd #没有加任何路径,代表回自己家目录
pwd(Print Working Directory显示目前所在目录)
pwd [-P] #-P显示真实路径,非链接路径
mkdir(建立新目录)
mkdir [-mp] 目录名称
- -m 设置文件权限,不需要看默认权限umask
-p 默认:目录一层层的建立。-p将目录(包含上层目录)递归建立
rmdir(删除空目录)
rmdir [-p] 目录名称 #-p:连同上层的空目录一起删除
- 空目录:没有任何东西的目录。空目录的上层目录必定非空。
6.1.3 执行文件路径的变量$PATH
- 当执行指令
XX
时,系统会去每个PATH定义的目录下搜索文件名为XX
的可执行文件;若在PATH定义的目录中含有多个名为XX
的可执行文件,那么先搜到的指令先被执行。 echo $PATH
显示目前的PATH。$
后面接变量。
PATH变量的内容由目录组成,目录之间用冒号:
隔开,每个目录有顺序之分。
xiang :~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
xiang :~ $ sudo -i
[sudo] password for xiang:
root :~ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 不同用户默认的PATH不同,默认能执行的指令不同。
PATH="${PATH}:absolute_path_name"
将absolute_path_name加入到PATH中。不能将本目录.
加入PATH中,原因:
- 由于工作目录不固定,因此能执行的指令会变化,这对用户不好。
- 避免黑客将病毒伪装成正常指令,使用户没有意识到就执行。为了安全,不将
.
加入PATH中。
6.2 文件与目录管理
6.2.1 文件与目录的检视:ls
ls [-aAdfFhilnrRSt] 文件名或目录名
ls [--color={never,auto,always}] 文件名或目录名
ls [--full-time] 文件名或目录名
- ls默认显示:非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色。
-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
6.2.2 复制cp、删除rm、移动mv
- cp复制文件、建立链接档、比对两文件的新旧予以更新、复制整个目录。
mv移动目录与文件、重命名。
rm移除
cp(复制文件或目录)
cp [-adfilprsu] 源文件 目标文件
cp [options] source1 source2 source3 ... directory
- -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) - 若来源档有两个以上,则最后一个目标文件一定是目录。
- -r可以复制目录,但权限可能会被改变。备份用
cp -au src dest
xiang :~ $ ls -l data
-rw-rw-r-- 1 xiang xiang 16 10月 9 23:33 data
xiang :~ $ cp -l data data_hard_link
xiang :~ $ cp -s data data_symbolic_link
xiang :~ $ ls -l data*
-rw-rw-r-- 2 xiang xiang 16 10月 9 23:33 data
-rw-rw-r-- 2 xiang xiang 16 10月 9 23:33 data_hard_link
lrwxrwxrwx 1 xiang xiang 4 10月 9 23:34 data_symbolic_link -> data
-l
建立hard link,-s
建立symbolic link。symbolic link是快捷方式,会链接到源文件,文件名右侧会有->符号。hard link文件与源文件的属性、权限完全一样,与未链接前的差异是第二栏的link数由1变成2。
xiang :~ $ cp data_symbolic_link data_symbolic_link1
xiang :~ $ cp -d data_symbolic_link data_symbolic_link2
xiang :~ $ ls -l data data_symbolic_link*
-rw-rw-r-- 2 xiang xiang 16 10月 9 23:33 data
lrwxrwxrwx 1 xiang xiang 4 10月 9 23:34 data_symbolic_link -> data
-rw-rw-r-- 1 xiang xiang 16 10月 9 23:38 data_symbolic_link1#与源文件相同
lrwxrwxrwx 1 xiang xiang 4 10月 9 23:38 data_symbolic_link2->data #链接档
- 若没有加任何选项,cp复制源文件;
-d
复制链接文件。
#使用xiang的身份,完整复制`/var/log/wtmp`文件到/tmp并重命名为xiang_wtmp
xiang :~ $ cp -a /var/log/wtmp /tmp/xiang_wtmp
xiang :~ $ ls -l /var/log/wtmp /tmp/xiang_wtmp
-rw-rw-r-- 1 xiang xiang 238K 10月 10 12:14 /tmp/xiang_wtmp
-rw-rw-r-- 1 root utmp 238K 10月 10 12:14 /var/log/wtmp
- 由于xiang的身份不能修改文件的拥有者与群组,虽然能复制wtmp的权限、时间等属性,但是与拥有者、群组相关的属性,原本xiang身份无法进行的动作,即使加上
-a
也无法完整复制权限。
rm(移除文件或目录)
rm [-fir] 文件或目录
- -f 忽略不存在的文件
-i 在删除前会询问用户
-r 递归删除
rm -i bashrc* #将开头为bashrc的文件名全部删除。*代表0到无穷多个任意字符
\rm -r /tmp/etc #在指令前加上反斜杠可以忽略alias的指定选项
rm ./-file_name #删除开头带有`-的文件:加上本目录`./`避过字符`-`
mv(移动文件与目录,或重命名)
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
- -f 若目标文件已存在,不询问直接覆盖
-i 若目标文件已存在,询问是否覆盖。
-u 若目标文件已存在,且source新,才会更新destination mv file file2
重命名file为file2;rename指令进行多个文件名的同时重命名。- 若有多个源文件或目录,则最后一个目标文件一定是目录。
6.2.3 取得路径的文件名与目录名称
xiang :~ $ basename /home/xiang/Gao/Notes/blog.c #取得文件名
blog.c
xiang :~ $ dirname /home/xiang/Gao/Notes/blog.c #取得目录名
/home/xiang/Gao/Notes
6.3 文件内容查阅
6.3.1 直接检视文件内容
cat(concatenate)
cat [-AbEnTv]
- -A 相当于
-vET
,可列出特殊字符而不是空白
-b
-E 显示结尾的断行字符$
;Windows的断行符是^M$
-n 对所有行显示行号
-T 将tab
以^I
显示
-v 列出一些看不出来的特殊字符
tac(反向显示)
- 功能与cat相反:由最后一行到第一行显示。
nl(添加行号打印)
nl [-bnw] 文件
- -b 指定显示行号的方式,有两种:
(1)-b a
表示对所有行显示行号
(2)-b t
仅对非空白行显示行号
-n 列出显示行号的方法,有三种:
(1)-n ln
行号在屏幕最左方显示
(2)-n rn
行号在字段的最右方显示,且不加0
(3)-n rz
行号在字段的最右方显示,加0
-w 行号占用的字符数
6.3.2可翻页检视
more(一页页翻动)
- more file # #
- 若more的文件行数大于屏幕的行数,最后一行显示目前显示的百分比,可以在最后一行输入指令:
空格键 向下翻一页
Enter 向下翻一行
/ 向下搜索string
:f 显示文件名及目前显示的行数
q 退出more
b或Ctrl+b 往回翻页(只对文件有用,对管线无用)
less(一页一页翻动)
- 用more时无法向前翻;用less时可以往前往后翻。指令有:
空格键 向下翻一页
pg down 向下翻一页
pg up 向上翻一页
/字符串 向下搜索字符串
?字符串 向上搜索字符串
n 重复前一个搜索(相对/或?)
N 反向重复前一个搜索(相对/或?)
g 到第一行
G 到最后一行
q 退出less
6.3.3资料撷取
head(取出前几行)
head [-n X] 文件
- 默认显示前十行。
-n
接正数X,代表显示前X行;接负数X,代表不显示后|X|行。
tail(取出后几行)
tail [-n X] 文件
- -n 默认显示最后十行。接数字X,代表显示X行
-f 若文件随时会有数据写入,且想让该文件有数据写入时就立刻显示。-f会持
续侦测文件,直至按下Ctrl+c tail -n +100 file
#只列出100行后的数据head -n 20 file | tail -n 10
显示file的11-20行
管线|:前面指令的输出通过管线交给后面指令使用。head -n 20 file
将文件的20行取出,但不输出到屏幕上,而是交给tail
指令,因此tail不需要接文件名。- cat -n file | head -n 20 | tail -n 10 #列出file的11-20行,且有行号。
6.3.4 非纯文本档:od
od [-t TYPE] 文件
-t
后接各种类型的输出:
a 使用默认字符输出
c 使用ASCII字符输出
d[size] 使用十进制(decimal)输出,每个整数占size bytes
f[size] 使用浮点数(floating)输出,每个数占size bytes
o[size] 使用八进制(octal)输出,每个整数占size bytes
x[size] 使用十六进制(hexadecimal)输出,每个整数占size bytes
xiang :~ $ od -t oCc /etc/issue #列出/etc/issue内容的8进制值与ASCII对照表
0000000 125 142 165 156 164 165 040 061 064 056 060 064 056 063 040 114
U b u n t u 1 4 . 0 4 . 3 L
0000020 124 123 040 134 156 040 134 154 012 012
T S \ n \ l \n \n
0000032
xiang :~ $ echo gaoxiangnumber1 | od -t dCc #找到gaoxiangnumber1的ASCII对照
0000000 103 97 111 120 105 97 110 103 110 117 109 98 101 114 49 10
g a o x i a n g n u m b e r 1 \n
0000020
6.3.5 修改文件时间或建置新档:touch
- Linux文件有三个主要的变化时间:
- modification time(mtime):当文件内容改变时更新该时间,不包括权限/属性的更改。
- status time(ctime):当文件状态改变时更新该时间。如文件内容、权限、属性被更改,都会更新该时间。
- access time(atime):当文件内容被取用时,更新该时间。
xiang :~ $ date; ls -l power.c ; ls -l --time=atime power.c ; ls -l --time=ctime power.c
2016年 10月 11日 星期二 08:18:40 CST #目前时间
-rw-rw-r-- 1 xiang xiang 393 10月 4 12:17 power.c #ls默认显示mtime
-rw-rw-r-- 1 xiang xiang 393 10月 10 23:23 power.c #atime
-rw-rw-r-- 1 xiang xiang 393 10月 4 12:17 power.c #ctime
touch [-acdmt] 文件
- -a 修改access time
-c 修改文件的时间,若该文件不存在则不建立新文件
-d 接欲修改的日期,也可以用--date="日期或时间"
-m 修改mtime
-t 接欲修改的时间,格式为YYYYMMDDhhmm
touch -d "2 days ago" file #将日期调整为两天前
touch -t 201406150202 bashrc #将日期改为2014/06/15 2:02
- touch新建的文件的三个时间(atime/ctime/mtime)默认为目前时间。
复制文件时,即使复制所有属性,也无法复制ctime。
6.4 文件与目录的默认权限与隐藏权限
6.4.1 文件默认权限umask
- umask是目前用户在建立文件或目录时的默认权限值。查阅方式有两种:
umask
得到数字形式的权限。umask -S
得到符号形式的权限。
xiang :~ $ umask
0002#与一般权限有关的是后三个数字
xiang :~ $ umask -S
u=rwx,g=rwx,o=rx
- 建立文件默认没有可执行权限,默认权限为
-rw-rw-rw-
建立目录默认所有权限均开放,默认权限为drwxrwxrwx
- umask的数字指默认需要减掉的权限。
6.4.2 文件隐藏属性
chattr(设置文件隐藏属性)
chattr [+-=][ASacdistu] 文件或目录 #该指令只在Ext2/Ext3/Ext4文件系统上有效
-
- 增加某个参数
- 移除某个参数
= 设定一定,且仅有后面接的参数
A 存取此文件/目录时,它的访问时间atime不会修改。
S 文件默认是异步写入磁盘;设定S后,任何文件的修改会同步写入磁盘。
a 文件只能增加数据,不能删除/修改数据。只有root才能设定该属性。
c 保存文件时,先将文件压缩再存储;读取时自动解压缩。
d 当dump程序执行时,设定d属性使该文件/目录不会被备份。
i 文件不能被删除、改名、设定链接、写入或新增数据。只有root能设定。
s 若该文件被删除,它将会被完全移除硬盘空间。若误删,无法还原。
u 若该文件被删除,它的数据还存在磁盘中,可以用来还原该文件。
lsattr(显示文件隐藏属性)
lsattr [-adR] 文件或目录
- -a 将隐藏文件的属性也列出来
-d 若接目录,仅列出目录的属性,不包括目录内的文件名
-R 连同子目录的数据也列出来
6.4.3 文件特殊权限:SUID,SGID,SBIT
xiang :~ $ ls -ld /tmp; ls -l /usr/bin/passwd
drwxrwxrwt 8 root root 44K 10月 11 10:13 /tmp
-rwsr-xr-x 1 root root 46K 7月 16 2015 /usr/bin/passwd
Set UID
- Set UID(SUID)出现在文件拥有者
x
位置上的s
。SUID的限制与功能:
- SUID仅对二进制程序(binary program)有效,不能用于shell script。
- 执行者对该程序需要有可执行权限
x
。 - 执行者在执行程序过程中具有程序owner的权限。
- Linux所有账号的密码都记录在
/etc/shadow
中,该文件的权限为
-rw-r----- 1 root shadow
。虽然只有root有w
权限,但一般用户xiang也能修改自己的密码,原因:
- 执行者xiang对/usr/bin/passwd程序具有
x
权限。 - /usr/bin/passwd的拥有者是root。
- xiang在执行passwd时会获得root的权限,所以
/etc/shadow
可以被xiang执行的passwd修改。
但是xiang不能用cat读取/etc/shadow因为cat不具有SUID权限。
- 执行者xiang对/usr/bin/passwd程序具有
Set GID
- Set GID(SGID):出现在文件拥有者
x
位置的s
。SGID可对文件或目录设定。 - SGID对文件的功能:
- SGID对二进制程序有效。
- 程序执行者对程序需具备
x
权限。 - 执行者在执行程序过程中获得程序群组的权限。
- SGID对目录的功能:
- 用户若对此目录有r与x权限,则用户能进入此目录;用户在此目录下的有效群组(effective group)变成该目录的群组。
- 用户若对此目录有w权限(可以新建文件),则用户建立的新文件的群组与此目录的群组相同。
Sticky Bit
- SBIT只对目录有效,作用:当用户对此目录有w、x权限时,对于用户在该目录下建立的文件或目录,仅有自己与root才有权限删除。
当甲用户对A目录是群组成员或其它人,并且拥有该目录的w权限时,甲对该目录内任何人建立的目录或文件均可进行删除等动作。但是若A目录加上SBIT,则甲只能对自己建立的文件或目录进行删除等动作,无法删除它人的文件。
SUID/SGID/SBIT权限设定
- SUID不用于目录,SBIT不用于文件。
- 数字形式权限三个数字前的数字代表SUID/SGID/SBIT:4-SUID、2-SGID、1-SBIT。
- 将文件权限改为
-rwsr-xr-x
:由于s在用户权力中,所以是SUID,在原先755前加上4:chmod 4755 file
。
xiang :~ $ touch test
xiang :~ $ chmod 4755 test ; ls -l test
-rwsr-xr-x 1 xiang xiang 0 10月 11 11:40 test
xiang :~ $ chmod 6755 test ; ls -l test
-rwsr-sr-x 1 xiang xiang 0 10月 11 11:40 test
xiang :~ $ chmod 1755 test ; ls -l test
-rwxr-xr-t 1 xiang xiang 0 10月 11 11:40 test
xiang :~ $ chmod 7666 test ; ls -l test
-rwSrwSrwT 1 xiang xiang 0 10月 11 11:40 test
- s与t都取代x权限;
7666
说明user/group/others都没有x权限,所以S、T代表空。也可以通过符号处理:SUID为u+s,SGID为g+s,SBIT为o+t。
6.4.4 观察文件类型:file
6.6 权限与指令间的关系
一、让用户能进入某目录成为工作目录的基本权限
- 目录所需权限:用户对该目录至少有x权限。
- 额外需要权限:若用户想在该目录内利用ls查阅文件名,则用户对此目录需要r权限。
二、用户在某目录内读取文件的基本权限
- 目录所需权限:用户对该目录至少有x权限。
- 文件所需权限:用户对文件至少有r权限。
三、让用户可以修改文件的基本权限
- 目录所需权限:用户对该文件所在的目录至少有x权限。
- 文件所需权限:用户对该文件至少有r、w权限。
四、让用户可以建立文件的基本权限
- 目录所需权限:用户在该目录要至少有w、x权限。
五、让用户进入某目录并执行该目录下的某个指令的基本权限
- 目录所需权限:用户在该目录至少有x的权限。
- 文件所需权限:用户对该文件至少有x的权限。
例题
- 用户xiang能进行
cp /dir1/file1 /dir2
,说明dir1、file1、dir2最小所需权限。
执行cp时,xiang要能读取源文件、写入目标文件:
dir1:至少有x权限;
file1:至少有r权限;
dir2:至少有w、x权限。
Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1