目录与路径
特殊目录
.:此层目录
..:上层目录
~:目前用户身份所在的主文件夹
~account:account用户所在的主文件夹
处理目录的命令
cd:切换目录
change directory的缩写
pwd:显示目前所在目录
-P:显示当前路径,而非连接路径
mkdir:新建新目录
-m:配置文件的权限,而非使用默认权限(umask)
-p:递归创建
mkdir创建目录时,要求存在父目录,否则报错,因此可以使用-p参数,此时父目录不存在时会创建父目录
rmdir:删除空的目录
-p:连同上层空目录一起删除
执行文件路径的变量:$PATH
通过指令echo $PATH可以查看变量PATH中设置的目录:
[root@localhost 桌面]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
文件与目录管理
查看文件与目录:ls
-a:全部文件,包括隐藏文件(.开头的文件)
-d:仅列出目录本身,而不列出目录内的文件数据
-l:列出长数据串,包括属性和权限
复制、删除和移动:cp,rm,mv
cp:复制文件或目录
cp [options] source1 source2 .. directory
-a:相当于-pdr
-d:若源文件为连接文件的属性,则复制连接文件的属性而非文件本身
-i:若目标文件存在,则覆盖时先询问操作
-l:进行硬连接的连接文件创建,而非复制文件本身
-p:连同文件的属性一同复制,而不用默认属性(备份)
-r:递归连续复制(用于目录的复制)
-s:复制成为符号连接文件,即快捷方式
不同身份执行cp,区别很大
举例:
转到tmp目录,执行:
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /var/log/wtmp .
将/var/log/wtmp复制到当前文件夹,查看源文件和目标文件的属性:
[root@localhost tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 63744 6月 28 11:17 /var/log/wtmp
-rw-r--r--. 1 root root 63744 6月 28 12:28 wtmp
以上可以看出,源文件和目标文件的权限和修改时间都变了
若要复制的文件和源文件一模一样,可以使用-a参数:
[root@localhost tmp]# cp -ai /var/log/wtmp .
cp: overwrite ‘./wtmp’? y
[root@localhost tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 63744 6月 28 11:17 /var/log/wtmp
-rw-rw-r--. 1 root utmp 63744 6月 28 11:17 wtmp
以上可以看出,两个文件一模一样。
cp指令的源文件和目标文件在同一个目录,并且文件名不一样时,相当于重命名。
rm:移除文件或目录
-f:强制,忽略不存在的文件
-i:互动模式,删前询问
-r:递归删除
mv:移动目录或更名
-f:强制,若目标存在,直接覆盖而不询问
-i:目标存在,则询问
-u:目标存在且较新才覆盖
rename:重命名
rename 被替换的字符串 被替换成的字符串 匹配要替换的文件模式
举例:
创建四个文件:foo1,foo2,foo11,foo12
[root@localhost tmp]# touch foo1 foo2 foo11 foo12
[root@localhost tmp]# ls -a foo*
foo1 foo11 foo12 foo2
使用rename更改文件名:
[root@localhost tmp]# rename foo foo0 foo?
[root@localhost tmp]# ls -a foo*
foo01 foo02 foo11 foo12
“foo?”表示匹配以foo开头的后面仅有一个字符的文件名,并将这些文件的文件名中的foo替换成foo0
相似地,有以下:
[root@localhost tmp]# ls -a foo*
foo1 foo11 foo12 foo2
[root@localhost tmp]# rename foo foo0 foo??
[root@localhost tmp]# ls -a foo*
foo011 foo012 foo1 foo2
以及:
[root@localhost tmp]# ls -a foo*
foo1 foo11 foo12 foo2
[root@localhost tmp]# rename foo foo0 foo*
[root@localhost tmp]# ls -a foo*
foo01 foo011 foo012 foo02
以上举例只适用于red hat系统(如Centos),对于Ubuntu,则需要使用perl表达式:
匹配:m/<regexp>;/
替换:s/<pattern>;/<replacement>;/
转化:tr/<pattern>;/<replacemnt>;
举例:
wuchao@wuchao-Lenovo:~/work$ ls
dir1 foo1 foo11 foo12 foo2
wuchao@wuchao-Lenovo:~/work$ rename 's/foo/file/' foo*
wuchao@wuchao-Lenovo:~/work$ ls
dir1 file1 file11 file12 file2
wuchao@wuchao-Lenovo:~/work$ ls
dir1 file1 file11 file12 file2
wuchao@wuchao-Lenovo:~/work$ rename 'tr/a-z/A-Z/' file*
wuchao@wuchao-Lenovo:~/work$ ls
dir1 FILE1 FILE11 FILE12 FILE2
文件内容查阅
cat:由第一行显示文件内容
[root@localhost ~]# cat -n /etc/issue 1 S 2 Kernel on an m 3
tac:从最后一行显示文件内容
[root@localhost ~]# tac /etc/issue Kernel on an m S
nl:显示的时候,顺便输出行号
[root@localhost ~]# nl /etc/issue 1 S 2 Kernel on an m
仅仅显示非空行,若要显示空行,添加 -b a参数
more:一页一页的显示
只能向后翻动
less:与more相似,可以翻页
可以向前翻页,也可以向后翻页
空格:向下翻页
PageDown:下翻一页
PageUp:上翻一页
/字符串:向下查询字符串
?字符串:向上查询字符串
n:重复前一个查询
N:反向重复前一个查询
q:退出
head:只看头几行
-n number:当number为正数时,表示取前面number行显示,当number为负数时,表示取前几行,直到number行(不包括)
tail:只看结尾几行
-n number: 表示取最后number行显示,当number表示为+number时,表示从number行开始显示
-f:检测文件,当有数据写入就会显示出来,直到ctr+c退出该指令
od:以二进制的方式读取文件内容
当文件是非文本时,使用该指令
-t type:type如下:
a:默认类的字符输出
c:ascii字符输出
d[size]:利用十进制输出数据,每个整数占用size bytes
f[size]:利用浮点数输出数据,每个整数占用size bytes
o[size]:利用八进制输出数据,每个整数占用size bytes
x[size]:利用十六进制输出数据,每个整数占用size bytes
修改文件时间或创建新文件:touch
首先先了解文件的三个参数:
modification time(mtime):当文件内容改变,更新这个时间
status time(ctime):当文件状态(比如权限和属性)改变,更新该时间
access time(atime):文件的内容被取用时,更新这个时间
举例如下:
//创建新文件
[root@localhost ~]# touch /tmp/test.txt
//查看最后读取时间 [root@localhost ~]# ls -l --time=atime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:22 /tmp/test.txt
//查看最后状态更改时间 [root@localhost ~]# ls -l --time=ctime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:22 /tmp/test.txt [root@localhost ~]#
//读取文件 [root@localhost ~]# cat /tmp/test.txt
//查看最后读取时间 [root@localhost ~]# ls -l --time=atime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:23 /tmp/test.txt [root@localhost ~]#
//更改文件权限 [root@localhost ~]# chmod u=rwx,go=r /tmp/test.txt
//查看最后状态更改时间 [root@localhost ~]# ls -l --time=ctime /tmp/test.txt -rwxr--r--. 1 root root 0 6月 28 19:23 /tmp/test.txt
touch [-acdmt] 文件
-a:仅修改访问时间atime
-c:仅修改文件的时间,文件不存在不创建新的
-t:后面可以接想要修改的日期,格式为 YYYYMMDDhhmm
-m:仅修改mtime
举例:
[root@localhost ~]# touch -t 201302031103 /tmp/test.txt [root@localhost ~]# ls -l /tmp/test.txt -rwxr--r--. 1 root root 0 2月 3 2013 /tmp/test.txt
文件与目录的默认权限和隐藏权限
文件默认权限:umask
首先创建文件或目录时,有如下默认权限:
创建文件:-rw-rw-rw- 文件默认记录数据的,故默认是没有执行权限的
创建目录:drwxrwxrwx
接着用刚刚创建的文件或目录的默认权限减去umask的权限,查看umask:
[root@localhost ~]# umask 0022
第一个数字表示是特殊权限,后三个数字表示用户、用户组和其他人的权限:022表示--- -w- -w-
减去该权限得:
创建文件:-rw-rw-rw- 减 ---- -w- -w- = -rw- -r- -r--
创建目录:drwxrwxrwx 减 ---- -w- -w- = drwx r-x r-x
更改umask值
[root@localhost ~]# umask 0022
文件隐藏属性
chattr:设置文件的隐藏属性
chattr [+-=] [ASacdistu] 文件或目录名
参数:
+:增加某一个特殊参数,其他原本参数不动
-:删除某一个特殊参数,其他原本参数不动
=:仅有后面的参数
A:访问文件或目录时,不改变atime属性
S:文件的修改同步写入磁盘(默认异步写入)
a:这个文件只能增加数据,不能删除和修改数据,root才能设置该属性
c:自动压缩文件,读取时自动解压缩
i:让文件不能被删除、改名、写入和添加数据
s:文件删除后,完全从硬盘空间删除
u:文件删除后还可以找回
举例:
[root@localhost tmp]# touch attrtest
//添加i属性 [root@localhost tmp]# chattr +i attrtest
//尝试删除该文件 [root@localhost tmp]# rm attrtest rm: remove regular empty file ‘attrtest’? y
//即使root也无法删除该文件 rm: cannot remove ‘attrtest’: Operation not permitted
//移除i属性 [root@localhost tmp]# chattr -i attrtest [root@localhost tmp]# rm attrtest rm: remove regular empty file ‘attrtest’? y
lsattr:显示文件隐藏属性
-a:隐藏文件的属性也显示出来
-d:如果时目录,仅列出目录本身的属性而非目录内的文件名
-R:连同子目录的数据也列出来
文件的特殊权限:SUID,SGID,SBIT
SUID
当s出现在文件所有者的x权限上,称为Set UID,简称SUID的特殊权限。具有以下功能:
- SUID仅对二进制程序有效
- 执行者对于该程序具有x的权限
- 本权限仅在执行该程序的过程有效
- 执行者将具有该程序所有者的权限
举例:
所有账户密码都存在/etc/shadow内,该文件仅有root可读且仅有root可以强制写入,但普通用户却可以通过passwd指令更改自己的用户密码,这是为什么?
- wuchao用户对于/usr/bin/passwd这个程序具有x权限,即可以执行passwd,并且具有特殊权限SUID
- passwd的拥有着是root
- wuchao执行passwd时会暂时获得root的权限
- /etc/shadow可以被passwd所更改
因此,一般用户可以修改自己在shadow内的密码,尽管用户对该文件没有访问权限。
SGID
当s出现在用户组的x上,称为Set GID,SGID
对于文件而言:
- SGID对二进制程序有用
- 程序执行者对于该程序来说,需具备x属性
- 执行者在执行的过程中将会获得该程序用户组的支持
对目录而言:
- 用户若对此目录具有r和x的权限,该用户能够进入此目录
- 用户在此目录下的有效用户组将会变为该目录的用户组
- 若用户在此目录下具有w的权限,则用户所创建的新文件的用户组与此目录的用户组相同
SBIT
Sticky Bit,第三组的x权限变为t。只针对目录有效。
- 当用户对于此目录具有w,x权限,即具有写入的权限时
- 当用户在该目录创建文件或目录时,仅有自己与root才有权力删除该文件
举例:
用户甲对于A目录具有用户组或其他人身份,并且对于该目录具有w权限,这表示用户甲对该目录内任何其他人创建的文件都可以删除、重命名和移动。如果将目录A设置SBIT权限,则用户甲只能对自己创建的文件和哦目录进行删除、重命名和移动操作。
设置特殊权限
4表示SUID
2表示SGID
1表所SBIT
chmod 4755 filename 表示文件权限为:-rwsr-xr-x
查看文件类型
file filename
命令与文件的查询
脚本文件名的查询
which(寻找执行文件)
which [-a] command
-a:列出所有有PATH目录中可以找到的命令
[wuchao@localhost tmp]$ which ifconfig /usr/sbin/ifconfig [wuchao@localhost tmp]$ which cd /usr/bin/cd
注意:which是根据PATH变量来寻找执行文件的
文件名的查找
whereis(寻找特定文件)
whereis [-bmsu] 文件名或目录名
-b:二进制文件
-m:只找在说明文件manual路径下的文件
-s:只找source源文件
-u:查找上述三项以外的其他文件
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
locate
locate 文件名
注意:whereis和locate查找的是系统数据库,故速度很快,但系统数据库每天更新一次,因此和实际硬盘可能不同步。需要输入updatedb指令更新数据库。
find
find [PATH] [option] [action]
参数:
1.与时间有关的参数
-mtime,-ctime,-atime
以-mtime为例:
-mtime n:表示在n天之前的一天内被更改过的文件
-mtime +n:列出在n天之前(不含)被更改过的文件
-mtime -n:列出在n天之内(含)被更改过的文件
-newer file:列出比file还新的文件
2.与用户和用户组有关的参数
-uid n:n为数字,为用户的ID,存放在/etc/passwd内
-gid n:n为数字,为用户组的ID,存放在/etc/group内
-user name:用户账户名
-group name:用户组名
-nouser:寻找文件所有者不存在/etc/passwd的文件
-nogroup:寻找文件的所有用户组不存在/etc/group的文件
举例:
[root@localhost 桌面]# find /home -user wuchao /home /home/wuchao /home/wuchao/.mozilla /home/wuchao/.mozilla/extensions /home/wuchao/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
...省略
3.与文件权限和名称有关的
-name filename:查找文件名为filename的文件
-size [+-] SIZE:查找比SIZE还要大(+)或还要小(-)的文件。SIZE规格:c表所byte,k表示1024bytes。比50k大表示为-size + 50
-type TYPE:查找文件类型为TYPE的,类型有:一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),FIFO(f)
-perm mode:查找文件权限刚好等于mode 的文件,比如4755
-perm -mode:查找文件权限必须包括mode 的文件
-perm +mode:查找文件权限包含任一mode 的文件
4.其他可进行的操作
-exec command:用command指令来处理查找到的结果
-print:将结果打印(默认)
举例:
[root@localhost tmp]# find . -perm +600 find: warning: you are using `-perm +MODE'. The interpretation of `-perm +omode' changed in findutils-4.5.11. The syntax `-perm +omode' was removed in findutils-4.5.12, in favour of `-perm /omode'. ./yum.log ./hogsuspend ./ssh-Vl2SngviB1oB/agent.12163 ./ssh-UyGb6ozbY7Su/agent.2798 ./ssh-SlOFs0GOllv6/agent.3138 ./ssh-0ASJ8KD3h4uu/agent.4027 ./ssh-tk2YPsSGUr7c/agent.4794 ./yum_save_tx.2016-06-27.13-25.jKQG67.yumtx ./yum_save_tx.2016-06-28.09-26._uGWlP.yumtx ./yum_save_tx.2016-06-27.14-46.8vdzCP.yumtx ./testing/testing ./yum_save_tx.2016-06-27.13-40.sLfZTd.yumtx ./ssh-7pbhryxqFMUw/agent.2872 ./yum_save_tx.2016-06-27.14-37.wVK_cv.yumtx ./yum_save_tx.2016-06-27.14-40.YkzgxH.yumtx ./yum_save_tx.2016-06-28.08-15.U5XBSB.yumtx ./ssh-vMa62Qd9SUbS/agent.4144 [root@localhost tmp]# find . -perm +600 -exec ls -l {} ; find: warning: you are using `-perm +MODE'. The interpretation of `-perm +omode' changed in findutils-4.5.11. The syntax `-perm +omode' was removed in findutils-4.5.12, in favour of `-perm /omode'. -rw-------. 1 root root 0 6月 24 19:10 ./yum.log prw-------. 1 root root 0 6月 28 11:14 ./hogsuspend srw-------. 1 wuchao wuchao 0 6月 24 11:38 ./ssh-Vl2SngviB1oB/agent.12163 srw-------. 1 root root 0 6月 27 16:16 ./ssh-UyGb6ozbY7Su/agent.2798 srw-------. 1 root root 0 6月 28 08:14 ./ssh-SlOFs0GOllv6/agent.3138 srw-------. 1 root root 0 6月 28 08:17 ./ssh-0ASJ8KD3h4uu/agent.4027 srw-------. 1 root root 0 6月 28 08:18 ./ssh-tk2YPsSGUr7c/agent.4794 -rw-------. 1 root root 151271 6月 27 13:25 ./yum_save_tx.2016-06-27.13-25.jKQG67.yumtx -rw-------. 1 root root 151271 6月 28 09:26 ./yum_save_tx.2016-06-28.09-26._uGWlP.yumtx -rw-------. 1 root root 869 6月 27 14:46 ./yum_save_tx.2016-06-27.14-46.8vdzCP.yumtx -rw-------. 1 root root 0 6月 27 20:52 ./testing/testing -rw-------. 1 root root 151271 6月 27 13:40 ./yum_save_tx.2016-06-27.13-40.sLfZTd.yumtx srw-------. 1 root root 0 6月 27 14:24 ./ssh-7pbhryxqFMUw/agent.2872 -rw-------. 1 root root 869 6月 27 14:38 ./yum_save_tx.2016-06-27.14-37.wVK_cv.yumtx -rw-------. 1 root root 869 6月 27 14:40 ./yum_save_tx.2016-06-27.14-40.YkzgxH.yumtx -rw-------. 1 root root 151271 6月 28 08:15 ./yum_save_tx.2016-06-28.08-15.U5XBSB.yumtx srw-------. 1 root root 0 6月 28 11:17 ./ssh-vMa62Qd9SUbS/agent.4144 [root@localhost tmp]#
注意:发现在Ubuntu系统中没有-perm +mode,而是由-perm /mode替代,以下在Ubuntu的例子:
wuchao@wuchao-Lenovo:~/work$ ls -l -rw-rw-r-- 1 wuchao wuchao 12 9月 26 11:07 file1 664 -rwxrw---x 1 wuchao wuchao 7634 9月 26 10:56 read.md 761 wuchao@wuchao-Lenovo:~/work$ find . -perm -641 //权限为641及以上 . ./read.md wuchao@wuchao-Lenovo:~/work$ find . -perm -640 //权限为640及以上 . ./file1 ./read.md wuchao@wuchao-Lenovo:~/work$ find . -perm /640 //权限为640及以下 . ./file1 ./read.md wuchao@wuchao-Lenovo:~/work$ find . -perm /641 //权限为641及以下 . ./file1 ./read.md
wuchao@wuchao-Lenovo:~/work$ find . -perm -020 //查看用户组具有w权限的文件
.
./file1
./read.md