1. 特殊的目录:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表目前用户身份所在的主文件夹
~account 代表account这个用户的主文件夹
根目录的上一层(..)与根目录自己(.)是同一个目录。
2.处理目录的命令:
cd :切换目录 如:
cd ~apple 去到apple这个用户的主文件夹
cd ~ 回到自己的主文件夹
cd 回到自己的主文件夹
cd .. 去到上层目录
cd - 回到刚才的目录
cd /var/spool/mail 直接指定要去的完整路径名称
cd ../mqueue 相对路径的写法
pwd:显示当前目录 如:
pwd [-P] 参数-P:显示出当前的路径,而非使用连接(link)路径
mkdir:新建一个新的目录 如:
mkdir [-mp] 目录名称
-m 配置文件案的权限,直接设置,不看默认权限。
-p 帮助你直接将所需要目录递归创建起来。
mkdir –p test1/test2/test3/test4
mkdir –m 711 test2
rmdir:删除一个空的目录 如:
rmdir [-p] 目录名称
-p :连同上层“空的”目录也一起删除
rmdir -p test1/test2/test3/test4
2. 环境变量PATH:
echo $PATH 显示出当前用户包含的目录
如果需要执行的命令不在环境变量PATH的目录内,则必须使用绝对路径来执行命令。
加入目录:
PATH=”$PATH”:/root 将/root目录加入环境变量
不建议将本目录“.”加入PATH的查询目录中。
不同身份用户 的PATH不同,默认能够随意执行的命令不同。
使用绝对路径或相对路径直接指定某个命令的文件名来执行,比查询PATH正确。
命令应该放在正确的目录下,执行才比较方便。
4.查看文件与目录:ls
ls [-option] 目录名称
-a 全部文件连同隐藏文件一起列出来
-d 仅列出目录本身,而不是列出目录内的文件数据
-l 列出长数据串,包含文件的属性与权限等数据
--color=never 不要依据文件特性给予颜色显示
--color=always 显示颜色
--full-time 以完整时间模式输出
当执行ls 时,默认显示的只有非隐藏文件的文件名,以文件名进行排序及文件名代表的颜色显示。
很多distribution默认将ll(L的小写)设置为等同于ls -l 。
5.复制、删除与移动:cp、rm、mv
cp:
cp[-abfilprsu] 源文件 目标文件
-a 相当于-pdr的意思( cp -d -R --preserve=all)
-d 若源文件为连接文件的属性,则复制连接文件属性而非文件本身
-i 若目标文件已经存在时,覆盖时会先询问操作的进行
-l 进行硬连接的连接文件创建,而非复制文件本身
-p 连同文件的属性一起复制过去,而非使用默认属性(等于 cp --preserve=mode,ownership,timestamps)
-r 递归持续复制,用于目录的复制行为(-R, -r, --recursive copy directories recursively ,三者等同)
-s 复制成为符号连接文件,即快捷方式文件
-u 若目标文件比源文件旧才更新
默认条件中,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常是命令操作者本身。
如果没有加上任何参数,cp复制的是源文件,而非连接文件的属性。
将主文件夹的.bashrc及.bash_history复制到/tmp下面:
cp ~/.bashrc ~/.bash_history /tmp
//可以将多个数据一次复制到同一个目录去,最后面一定是目录
rm:移除文件或目录
rm [-fir] 文件或目录
-f force,忽略不存在文件,不会出现警告
-i 删除前会询问用户是否操作
-r 递归删除,最常用在目录的删除
rm -i bashrc*
//星号代表0到无穷多个任意字符
rmdir只能删除空目录
应该使用rm:
rm -r /tmp/etc
如果身份是root,则默认已经加入了 –i 参数,如果不想在删除的时候按y (确认),可以这样做:
/rm -r /tmp/etc
删除一个带有 - 开头的文件:
rm -aaa-
//因为“-”是参数,所以系统误判了
可以这样解决:
rm ./-aaa-
或者
rm -- -aaa-
mv:移动文件与目录,或更名
mv [-fiu] source destination
mv [-options] source1 source2 source3 source4 …directory
-f 强制,如果文件已存在,不会询问而直接覆盖
-i 若目标文件已存在,询问是否覆盖
-u 若目标文件已存在,且source比较新,才会更新
mv 文件名 目录 (将文件移到到某个目录中)
mv 文件名1 文件名2 (将文件名1改名为文件名2)
mv 文件名1 文件名2 文件名3 … 目录 (将多个文件移动到目录中去)
6.取得路径的文件名和目录名
basename /etc/sysconfig/network 取得最后的文件名
dirname /etc/sysconfig/network 取得目录名
7.文件内容查阅
(1)直接查看文件内容
cat:
cat [-AbEnTv]
-A 相当于vET,可以列出一些特殊字符,而不是空白而已
-b 列出行号,仅针对非空白行做行号显示,空白行不标行号
-E 将结尾的断行字符$显示出来
-n 打印出行号,连同空白行也有行号
-T 将[Tab]按键以^I显示出来
-v 列出看不出来的特殊字符
注意:$是linux下的断行字符
tac 反向列示
由最后一行到第一行反向在屏幕上显示出来、
nl 添加行号打印
nl [-bnw] 文件
-b :指定行号指定方式,主要有两种:
-b a:表示不论是否为空行,也同样列出行号
-b t:如果有空行,空的那一行不用列出行号
-n :列出行号表示的方法,有三种:
-n ln:行号在屏幕的最左方显示
-n rn:行号在自己字段的最右方显示,且不加0
-n rz:行号在自己字段的最右方显示,且加0
-w :行号字段占用的位数:
nl -b a -n rz -w 3
(2)可翻页查看:
more(一页一页翻动)
more /etc/man.config
空格键:代表向下翻一页
Enter : 代表向下滚动一行
/字符串:代表在这个显示的内容当中,向下查询“字符串“这个关键字
:f :立刻显示出文件名以及目前显示的行数
q :代表立刻离开more,不再显示该文件内容
b或[ctrl]+b :代表往回翻页,不过这操作只对文件有用,对管道无用
less(一页一页翻动)
比more更加灵活,more无法向前翻,只能往后面看,若使用了less,就可以使用上下等按键的功能来往前往后翻看文件。
空格键:向下翻一页
[PageDown]:向下翻动一页
[PageUp]:向上翻动一页
/字符串:向下查询“字符串”的功能
?字符串:向上查询“字符串”的功能
n: 重复前一个查询
N:反向重复前一个查询
q: 离开less这个程序
(3)数据选取:
head 取出前面几行
head [-n number] 文件
-n 后接数字,代表显示前几行的意思
默认情况中,显示前10行。
若要显示前20行,则需:
head -n 20 /etc/man.config
如果-n后接的是负数,例如-100,意思是列出前面所有行数,但是不包括后面100行。
tail(取出后面几行)
tail –n +100 /etc/man.config
意思是100行以后的都会列出来。
tail -f /var/log/messages
由于/var/log/messages随时都有数据写入,你想要让该文件有数据写入时就会立刻显示到屏幕上,就利用-f这个参数。它可以一直检测这个文件,新加入的数据都会被显示到屏幕上,直到你按下[ctrl]+c才会离开
(4)非纯文件:od
od [-t Type] 文件
-t 后面可接各种类型的输出
a 利用默认的字符来输出
c 使用ASCII字符来输出
d [size] 利用十进制来输出数据、每个数占用size bytes
f [size]利用浮点数来输出数据,每个数占用size bytes
o [size]利用八进制来输出数据,每个数占用 size bytes
x [size]利用十六进制来输出数据,每个数占用size bytes
8.修改文件时间或创建新文件:touch
三个时间参数:
mtime :当文件的内容数据更改时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性和权限
ctime:当该文件的状态改变时,就会更新这个时间。比如权限或属性改变都会更新这个时间。
atime:当该文件内容被取用时,就会更新这个读取时间。
默认情况下,ls显示出来的是该文件的mtime,也就是这个文件的内容上次被更改的时间。
ls -l /etc/man.config
ls -l --time=atime /etc/man.config
touch [-acdmt] 文件
-a:仅修改访问时间
-c:仅修改文件的时间,若该文件不存在则不创建新文件
-d:后面可以接欲修改的日期而不用目前的日期,也可以使用—date=“日期或时间“
-m:仅修改mtime
-t:后面可以接欲修改的时间而不用目前时间,格式为[YYMMDDhhmm]
默认情况下,touch后面有接文件时,则该文件的三个时间都会更新为目前的时间,若该文件不存在,则会主动创建一个新的空的文件。
ll bashrc; ll --time=atime bashrc; ll -time=ctime bashrc
//分号代表连续命令的执行
touch -d “2 days ago” 文件名
touch -t 1012171526 文件名
以上两种可修改atime和mtime.但是ctime并没有改变
9.文件与目录的默认权限umask
查看umask方式有两种:
umask 以数字形态显示
umask -S 以符号类型显示
文件的默认权限为666(无可执行权限x),目录的默认权限为777
umask的分数是指该默认值需要减掉的权限
设置umask,如
umask 002
10.文件的隐藏属性chattr、lsattr(只能在Ext2/Ext3的文件系统上生效)
chattr 设置文件的隐藏属性
chattr [+-=] [ASacdistu]
+:增加某个特殊参数
-:删除某个特殊参数
=:仅有后面接的参数
a:当设置了a之后,该文件将只能增加数据,而且不能删除页不能修改数据,只有root才能设置这个属性
i : 可以让文件不能被删除,改名,设置连接也无法写入或添加数据,对于系统安全性有很大的帮助,只有root才能设置。
lsattr 显示文件隐藏属性
lsattr [-adR]
-a:将隐藏文件的属性也列出来
-d:如果连接的是目录,仅列出目录本身的属性而非目录内的文件名
-R:连同目录的数据也一起列出来
11.文件特殊权限:SUID、SGID、SBIT
(1)SetUID -rwsr-xr-x
只对二进制程序有效
执行者需具有x权限
本权限仅在运行该程序的过程中有效
执行者将具有该程序所有者的权限
对于目录无效
以下这个例子帮助理解:
Linux系统中,所有账号和密码都记录在/etc/shadow这个文件里,这个 文件权限为-r-------- 1 root root,意思是这个文件仅有root可读且仅有root可以强制写入。但是一般账户要如何修改自己的密码呢?用apple这个账户执行passwd这个命令,发现可以修改密码。这就是特殊权限SUID的作用:
a. apple对于/usr/bin/passwd(-rwsr-xr-x)这个程序来说是具有x权限,表示apple能执行passwd;
b. passwd的拥有者是root这个账户
c. apple执行passwd的过程中,会暂时获得root的权限。
d. /etc/shadow可以被apple所执行的passwd所修改
(2)SetGID drwx--sr-x
当s标志在文件所有者的x项目为SUID,那s在用户组的x时则称为Set GID,SGID
对二进制程序有效
需具备x权限
执行者在执行过程将会获得该程序用户组的支持
可针对目录或文件来设置
当一个目录设置了SGID的权限后,将具有以下功能:
a.用户若对此目录具有r与x的权限时,该用户能够进入此目录
b.用户在此目录下的有效用户组将会变成该目录的用户组
c.若用户在此目录下具有w权限,则用户所创建的新文件的用户组与此目录的用户组相同
(3)StickyBit drwxrwxrwt
只对目录有效
其作用是:
当用户对于此目录具有w、x权限,即具有写入的权限时,当用户在该目录下创建文件或目录时,仅自己与root才有权利删除该文件 。
如果将A目录加上SBIT的权限项目时,则用户A只能对自己所创建的文件或目录进行删除,重命名,移动等操作,而无法删除他人的文件。
12.设置SUID SGID SBIT
4为SUID,2为SGID,1为SBIT
chmod 4755 文件名
chmod u=rwxs,go=x 文件名
chmod g+s,o+t 文件名
大写的S与T:代表空的权限。当user,group,others都没有x这个可执行标志时。
13.查看文件类型:file
file 文件的绝对路径或相对路径
14.命令与文件的查询:
(1)脚本文件名的查询:
which 寻找可执行文件
which [-a] command
-a将所有由PATH目录中可以找到的命令均列出,而不只是第一个被找到命令的名称
which是根据PATH这个环境变量所规范的路径去查找的。
(2)文件名的查找:
whereis 和locate 寻找特定文件,利用数据库查找,可能查找到已删除的文件
whereis [-bmsu] 文件或目录
-b 只查找二进制文件
-m 只找说明文件manual路径下的文件
-s 只找源文件
-u 查找不在上述三种文件中的其他文件
locate [-ir] keyword
-i 忽略大小写的差异
-r 后面可接正则表达式的显示方式
whereis和locate是由已创建的数据库/var/lib/mlocate/里面的数据所查找到的。
更新数据库:updateb
find [PATH] [option] [action]
时间参数:
-mtime n:n为数字,意思是n天之前的“一天以内”被更改过的文件
-mtime +n: 列出n天之前(不含n天本身)被更改过的文件名
-mtime -n:列出在n天内(含n天本身)给更改过的文件名
-newer file: file为一存在文件,列出比file还要新的文件名
find /ect -newer/etc/passwd
find / -mtime 0
与用户和用户组有关的参数:
-uid n :n是数字,是用户的账户ID,记录在/etc/passwd
-gid n :n为数字,是用户组名的ID,记录在/etc/group
-user name:name为用户账户名称
-group name:用户组名称
-nouser:寻找文件所有者不在/etc/passwd的人
-nogroup:寻找用户组不在/etc/group的文件
与文件权限和名字有关的参数:
-name filename:查找文件名为filename的文件
-size [+-] SIZE:查找比size还要大(+)或小(-)的文件c:代表byte k:代表1024bytes
-type TYPE:查找文件类型为TYPE的文件
-perm mode:查找文件权限等于mode的文件
-perm -mode:查找文件权限必须要全部包括mode的权限
-perm +mode:查找文件权限包含任一mode的权限
find / -perm +7000 7000即是---s—s—t,+7000即查找包含s或t的文件,
-7000既是查找含有---s—s—t的所有三个权限
其他参数:
-exec command :command为其他命令,exec后可以接其他命令
-print :将结果打印到屏幕上,是默认操作
find / -perm +7000 -exec ls -l {} /;
{}代表是由find找到的内容,find的结果将会放置到{}中。exec一直到”/;”是关键字。代表find额外命令的开始(-exec)到结束(/;)这中间就是额外命令
利用通配符查找:
find /etc -name ‘*httpd*’
查找包含“httpd”的文件
16.权限和命令的关系
(1)进入目录成为工作目录的权限:
目录所需权限x
如果想利用ls查询文件名,则需要目录r的权限
(2)在目录读取文件的权限:
对目录至少要有x权限
对文件至少要有r权限
(3)修改文件的基本权限:
所在目录至少需要x权限
文件至少需要r、w权限
(4)创建文件的权限:
目录所需权限:w 、x
(5)执行目录下的命令:
对目录至少要x权限
对文件至少要有x权限