绝对路径;路径的写法一定由根目录/写起,例如/usr/share/doc这个目录

相对路径;路径的写法不是由/写起,例如由;/usr/share/doc要到/usr/share/man下面时,可以写成“cd…/man”这就是相对路径的写法。相对路径意指相对于目前工作目录的路径。

  相对路径的用途

 

cd后面跟的一些特殊目录

代表层次目录

.. 代表上一层目录

-      代表前一个工作目录

代表“目前用户身份”所在的朱文件夹

~account 代表account这个用户的主文件夹(account是个帐号名称)

特别注意;在所有目录下面都会存在的两个目录,分别是. 与.. 分别代表此层与上层目录的意思

创建的处理目录的命令;

Cd:切换目录

Pwd;显示当前目录;

Mkdir;新建一个新的目录;

Rmdir;删除一个空的目录

Cd(相对路径或绝对路径)

Cd ~vbird     代表去到vbird这个用户的主文件夹,即/home/vbird

Cd ~  表示回到自己的主文件夹,即是/root这个目录

Cd  没有加上任何路径,也还是代表回到自己主文件夹的意思

Cd..表示去到目前的上层目录,即是/root的上层目录的意思。

Cd – 表示回到刚才哪个目录,

Cd /var/spool/mail  这个就是绝对路径的写法,直接指定要去的完整路径名称

Cd ../mqueue  这个是相对路径的写法,我们由/var/spool/mail 到/var/spool/mqueue就这样写

 

Pwd (显示目前所在的目录)

Pwd (-P)  显示档期那的路径,而非使用连接(link)路径

加上-P参数后,会不以连接文件的数据显示,而是显示正确的完整路径

 

Mkdir (新建新目录)

Mkdir (-mp) 目录名称

参数;

-p;帮助你直接将所需要的目录(包含上层目录)递归创建起来

                           

加上-p可以递归创建多层目录

-m:配置文件案的权限,这届设置,不需要看默认权限(umask)

Mkdir -m

范例;新建权限为rwx—x—x的目录

-m 来强制为目录设置权限,否则系统会使用默认权限

 

Rmdir  -p 删除“空”的目录

参数;

-p;连同上层“空的”目录也一起删除

利用-p参数可以将空的多层递归目录删除 这个rmdir仅能“删除空的目录”

 

关于执行文件路径的变量:$PATH

例题;

使用一般账户A执行ifconfig时,会出现“-bash:ifconfig:commandnot found”的字样,因为ifconfigshi是放置到/sbin下面,而由上面的结果中我们还可以发现vbird的PATH并没有设置/sbin,所以默认无法执行

但是可以使用/sbin/ifconfig eth0来执行这个命令,因为一般用户还是可以使用ifconfig来查询系统IP的参数,既然PATH没有规范到/sbin,那么我们使用“绝对路径”也可以执行该命令

不同身份用户默认的PATH不同,默认能够随意执行的命令也不同(如root与vbird);

PATH是可以修改的,所以一般用户还是可以修改PATH来执行某些位于/sbin或/usr/sbin下的命令来查询;

使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来得正确;

命令应该放置到正确的目录下面,执行才会比较方便

本目录(.)最好不要放到PATH当中

 

文件与目录管理

在文件与目录的管理上,不外乎“显示属性”,“复制”“删除文件”及“移动文件或目录”等。

查看文件与目录:ls

Ls (-aAdfFhilnrRst) 目录名称

Ls (--color={never,auto,always}) 目录名称

Ls (--full-time) 目录名称

参数;

-a;全部的文件,连同隐藏文件(开头为.的文件)一起显示出来

-A;列出全部的文件(连同隐藏文件,但不包括.与..这两个目录)

-d:仅列出目录本事,而不是列出目录内的文件数据

-f:直接列出结果,而不进行排序(ls默认会以文件名排序)

-F;根据文件,目录等信息给与附加数据结构,例如;

*:代表可执行文件;   /:代表目录; =:代表 socket文件; | :代表FIFO文件

-h:将文件容量以人类易读的方式(例如GB,kb等)列出来

-i:列出inode号码,

-l:列出长数据串,包含文件的属性与权限等数据

-n;列出UID与GID;而非用户与用户组的名称(UID与GID会在帐号管理提到)

-r:将排序结果反向输出,例如;原本文件名由小到大,反向则由大变小

-R;连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来

-S;以文件容量大小排序,而不是用文件名排序

-t:依时间排序,而不是用文件名

--color=never:不要依据额外年间特性给与颜色显示

--color=always:显示颜色

--color=auto:让系统自行依据设置来判断是否给与颜色,

--full-time:以完整时间模式(包含年,月,日,时,分)输出

--time={atime,ctime};输出访问时件或改变权限属性事件(ctime)而非内容更改时间

 

案例一

将主文件夹下的所有文件列出来(含属性与隐藏文件)

-a全部的文件,连同隐藏文件(开头为.的文件)

-l列出长数据串,包含文件的属性与权限等数据

承上题;不显示颜色,但在文件名末显示出改文件名代表的类型

 

范例三;完整呈现文件的修改时间

通过—full-time可以查阅到比较正确的完整时间格式

 

复制,删除,与移动 :cp,rm,mv

要复制文件,使用cp(copy)这个命令即可,还可以创建连接文件(快捷方式),对比两文件的新旧而与更新,以及复制整个目录等的功能,至于移动目录与文件,则使用mv(move),这个命令也可以直接拿来作重命名,至于 删除就是rm(remove)命令

cp (复制文件或目录)

cp  (-adfilprsu) 源文件(source) 目标文件(destination)

cp  (options) source1  source2 source3 … directory

参数;

-a:相当与-pdr的意思,至于pad请参考后文(常用)

-d:若源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身;

-f:为强制(force)的意思了,若目标文件已经存在且无法开启,则删除后再尝试一次

-i;若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用)

-l:进行硬件连接(hard link)的连接文件创建,而非复制文件本身

-p;连同文件的属性一起复制过去,而非使用默认属性(备份常用);

-r;递归持续复制,用于目录的复制行为(常用);

-s;复制成为符号链接文件(symbolic link),即“快捷方式”文件;

-u;若destination比source旧才更新destination

最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才行!

复制(cp)这个命令非常重要的,不同身份者执行这个命令会有不同的结果产生,尤其是-a,-p的参数,对于不同身份来说,区别非常大,

拷贝文件极其所拥有的特性则加上-a即可

cp /etc 到 /tmp目录下

如果是目录则不能直接复制,要加上-r的参数

Cp -r /etc /tmp

-r是可以复制目录,但是文件与目录的权限可能会被改变

所以,也可以利用-a 来执行命令,尤其是在备份的情况下

Cp  -s  bashrc bashrc_slink

Cp  -l  bashrc  bashrc_hlink

Ls   -l   bashrc*

使用-s -l 都会创建所谓的连接文件

-l就是所谓的硬链接,bashrc_shlink 是一个“快捷方式,”这个快捷方式会连接到bashrc,所以你会看到文件名又侧会有一个指向(->)的符号

至于bashrc_hlink文件与bashrc的属性与权限完全一模一样,与尚未进行连接前的差异则是第二列的link数由1变成2了

 

若~/.bashrc  比 /tmp/bashrc新才复制过来

Cp  -u  ~/.bashrc  /tmp/bashrc

这个-u的特性是在目标文件与源文件有差异时才会复制的

所以,比较常用与“备份的工作当中”

 

rm (移除文件或目录)

rm(-fir)文件或目录

参数;

-f:就是force的意思,忽略不存在的文件,不会出现警告信息;

-i;互动模式,在删除前会询问用户是否操作;

-r;递归删除,最常用在目录的删除了,这是非常危险的参数!!!

rm -i bashrc*

将目录下的开头为bashrc文件名全部删除;

*代表的是0到无穷多个任意字符

将cp范例中所创建的/tmp/etc/这个目录删除掉

Rmdir /tmp/etc

删不掉 因为这不是空的目录!

Rm  -r  /tmp/etc

连续按y可删除

如果不想按y

\rm -r  /tmp/etc

在命令前面加上反斜杠,可以忽略掉alias的指定参数

 

Mv (移动文件或目录,或更名)

Mv (-fiu)source  destination

Mv  (options)source1  source2  source3 … directory

-f:force强制的意思,如果目标文件文件已经存在,不会询问而直接覆盖

-i:若目标文件(destianation)已经存在,就会询问是否覆盖

-u:若目标文件已经存在,且source比较新,才会更新(update)

 

 

Basename  /etc/sysconfig/network

Network                   很简单,就取得最后的文件名

Dirname   /etc/sysconfig/network

/etc/sysconfig  取得目录名

 

文件内容查阅

显示文件内容可以使用cat 与more即less,

Cat;由第一行开始显示文件内容

Tac;从最后一行开始显示,可以看出tac是cat的倒写形式

nl ;显示的时候,顺便输出行号,

more;一页一页地显示文件内容

less;与more类似,但是比more更好的是,它可以往前翻页

head;只看头几行

tail;只看结尾几行‘

od;以二进制的方式读取文件内容

 

cat  (-AbEnTv)

参数

-A:相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已

-b;列出行号,仅针对非空白行做行号显示,空白行不标行号;

-E;将结尾的断行字符$显示出来;

-n;打印出行号,连同空白行也会有行号,与-b的参数不同

-T:将(Tab)按键以^I显示出来;

-v:列出一些看不出来的特殊字符

 

 

More (一页一页翻动)

More /etc/man.config

空格键:代表向下翻一页;

Enter:代表向下滚动一行;

/字符串;代表在这个显示的内容中,向下查询“字符串”这个关键字

:f    立刻显示出文件名以及目前显示的行数

q       代表立即离开more,不再显示该文件内容

b或(ctrl)-b   代表往回翻页,不过这操作只对文件有用,对管道无用

 

 

使用more并不能往前翻页,使用less可以使用上下按键等功能前后翻看文件

空格键:向下翻动

Pagedown  向下翻动一页;

Pageup    向上翻动一夜

/字符串  向下查询“字符串”的功能

?/字符串   向上查询“字符串”的功能;

n     重复前一个查询(与/或?有关)

N     反向重复前一个查询(与/或?有关);

q     离开less这个程序

数据选取

我们可以将输出的数据做一个简单的选取,那就是取出前面(head)与取出后面(tail)文字的功能,不过 head与tail都是以行为单位来进行数据选取的

Head(取出前几行)

head (-n number)文件

-n  :后面接数字,代表显示几行的意思

tail (取出后面几行)

tail  -n  number 文件

取出文件后面几行 number行数

修改文件的时间或创建新文件:touch

Liunx下三个主要的时间变动

Modification time

当该文件的内容数据更改时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限

Status time

当该文件的状态改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更改这个时间

Access time

当该文件的内容被取用时,就会更新这个读取时间。举例来说,我们使用cat去读取/etc/man.config,就会更新该文件的atime了,

 

Touch (-acdmt) 文件

参数;

-a:仅修改访问时间;

-c:仅修改文件的时间,若该文件不存在则不创建新文件

-d:后面可以接欲修改的日期而不用目前的日期,也可以使用—date=“日期或时间”;

-m:仅修改mtime;

-t:后面可以接欲修改的时间而不用目前的时间

 创建一个bashrc文件日期为2007/09/15 2:02

Touch -t 0709150202  bashrc

-t 后面加上修改的时间

通过touch可以轻易修改文件的日期与时间,并且也可以创建一个空的文件夹,看文件什么时候被改动过查看ctime 就算是复制过来的文件,这个时间也是没有办法修改的。

 

创建一个空的文件

将某个文件日期修改为目前日期(mtime与atime)

除了rwx权限外,在linux的Ext2/Ext3文件系统下,我们还可以设置其他的系统隐藏属性,这部分可使用chattr来设置,而以lsattr来查看,最重要的属性就是可以设置其不可修改的特性,让连文件的所有者都不能进行修改,这个属性很重要,尤其是在安全机制方面

在/tmp下创建一个目录 名称为qwe  并且目录所有这为dmstai,用户组为users,此外任何人都可以进入该目录浏览文件,不过除了dmstai之外,其他人不能修改该目录下的文件

新建目录:Mkdir  /tmp/qwe

修改属性:Chown  -R  dmstai:users/tmp/qwe

修改权限:chmod  -R  755  /tmp/qwe

 

文件默认属性 :umask

Umask是指定;目前用户在新建文件或目录时候的权限默认值

022反掩码的权限

直接输入umask可以看到数字形态的权限设置分数,一种加入-S参数,就会以符号类型显示出来  第一组是特殊权限用的 先不用看

-     若用户创建“文件”则默认没有可执行权限(x),即只有r,w这两个选项,也就是最大为666,默认权限如下

-     rw-rw-rw-

-     若用户新建“目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认权限如下

-     Drwxrwxrwx

umask对新建目录与文件的默认权限很有关系

umask 002 即可修改umask的权限

 

 

文件隐藏属性 chattr,lsattr

下面的chattr只能在ext2和ext3的文件系统上面生效

Chattr(设置文件的隐藏属性)

Chattr(+-=)(ASacdistu)文件或目录名称

参数;

+:增加某一个特殊参数,其他原本存在参数则不动

-:删除某一个特殊参数,其他原本存在参数则不动

=:仅有后面接的参数

A:当设置了A这个属性时,若你有访问此文件(或目录)时,他的访问事件atime将不会被修改,可避免I/O较慢的机器过度访问磁盘,这对速度较慢的计算机有帮助

S:一般文件是异步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该行动都会同步到磁盘中

a:当设置a之后,这个文件将只能增加数据, 而不能删除也不能修改数据,只有root才能设置这个属性。

c:这个属性设置之后,就会自动将此文件压缩,在读取的时候就会自动解压缩。但是在存储的时候就会先进行压缩后在存储(对大文件挺有效的)

d:当dump程序被执行的时候,设置d属性将可使文件(或目录)不会被dumnp备份

i:这个i它可以让一个文件“不能被删除,改名,设置连接也无法写入或添加数据”对于系统安全性有很大的帮助,只有root能设置此属性

s:当文件设置了s属性时,如果这个文件被删除,它将会被完全从这个硬盘空间中删除

u:与相反,当使用u来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来找回该文件

注意;属性设置常见的是a与i的设置值,而且很多设置值必须要身为root才能设置

I在系统的数据安群上面,由于这些属性是隐藏的性质,所以需要以lsattr才能看到该属性,其中最重要的就是+i与+a这个属性了,+i可以让一个文件无法被更懂,

此外,如果是logfile这种的登录文件,就更需要+a这个可以增加但是不能修改旧有的数据与删除的参数了,

Lsattr(显示文件隐藏属性)

Lsattr  (-adR) 文件或目录

参数;

-a;将隐藏文件的属性也秀出来;

-d;如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

-R;连同子目录的数据也一并显示出来。

使用chattr设置后, 可以利用lsattr来查看隐藏的属性

 

文件的特殊权限,SUID,SGID,SBIT

SetUID出现


 

当s这个标志出现在文件所有者的x权限上时,例如上面的权限,此时就被称为set UID,简称为SUID的特殊权限,suid有这样的限制与功能

SUID权限仅对二进制程序有效

执行者对于该程序需要具有x的可执行权限

本权限仅在执行该程序的过程中有效

执行者将具有改程序所有则的权限

 SUID只可用在二进制程序上,不能够用在shell script上面,这是因为shell script只是将很多的二进制文件调进来执行而已,所以Sudi的权限部分,还是得看shell script调用进来的程序设置,而不是shell script本身,当然SUID对目也是无效的

Set GID

当s标志在文件所有者的x项目为suid,那s在用户组的x时则称为set GID,SGID。

查看具有SGID权限的文件

spacer.gif

与SUID不同的是,SGID可以针对文件或目录来设置,如果是对文件来说,SGID有如下的功能

SGID对二进制程序有用

程序执行者对与程序来说,需要备有x的权限;

执行者在执行的过程中将会获得该程序用户组的支持

StickyBit

这个Sticky Bit(SBIT)目前只针对目录有效,对于文件已经没有效果了。SBIT对于目录的作用是;

当用户对于此目录具有w,x权限,则具有写入的权限时;

当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件

 

SUID/SGID/SBIT权限设置

4为SUID

2为SGID

1为SBIT

例子;

假设要将一个万能键权限改为-rwsr-xr-x时,由于s在用户权利中,所以是GID,因此,在原有的755之前还有加上4,也就是“chmod4755 filename”来设置。此外还有大S与大T的产生,参考下面

touch test 创建一个测试用的空文件

chmod 4775 test;加入具有SUID的权限

ls -l test  查看

chmod 6755 test; 加入具有SUID/SGID的权限

ls -l test 查看

chmod 7666 test;具有空的SUID/SGID权限

ls -l test

st都是替代x权限,因为执行的是666并没有执行权限,

符号来代替

SUID为u+s  SGID为g+s,SBIT则是o+t,

乘上,在上述的文件权限中加入SGID与SBIT

 

查看文件类型;file

File;后面跟上需要查看的文件

 

命令与文件的查询

脚本文件名的查询

Which(寻找“执行文件”)

Which(-a) command

参数;

-a:将所有由PATH目录中可以找到的命令均列出来,而不是第一个被找到的命令名称

这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。所以,重点是找出执行文件而已,且Which后面接的是完整文件名,。若加上-a参数,则可以列出所有的额可以找到的同名执行文件,而非仅显示第一个而已

Which默认是查找PATH内所规范的目录。

 

文件名的查找

Whereis(寻找特定文件)

Whereis(-bmsu)文件或目录名

参数;

-b;只找二进制格式的文件

-m;只找在说明文件manual路径下的文件

-s;只找source源文件

-u;查找不在上述三个选项当中的其他特殊文件

 

Locate(寻找的数据是由已创建的数据库/var/lib/mlocate)里面的数据所查找到的

Locate(-ir) keyword

-i:忽略大小写的差异

-r:后面可接正则表达式的显示方式

范例;找出系统中所有与passwd相关的文件名

Locatepasswd

它是经由数据库查找的,数据库的创建默认是每台执行一次,手动更新数据库updatedb

Updated;根据/etc/updated.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件

Locate;依据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名

 

Find

Find(PATH)(option) (action)

参数;

1.  与实践有关的参数,共有-atime,-ctime与-mtime,下面以-mtime说明

-mtime n :为数字,意义为在n天之前的“一天之内”被更改过的文件;

-mtime +n :列出在n天之前(不含n天本身)被更改过的文件名;

-mtime-n ;列出n天之内(含n天本身)被更改过的文件名

-newer file :file为一个存在的文件,列出比file还要新的文件名

 

Find / -mtime 0

0代表目前的事件,所以从喜爱你在开始到24小时前,有改动过内容的万能键都会被列出来,那如果是3天之前的24小时内? Fine

 / -mtime  3   有改动过的文件都被列出来的意思

  寻找/etc下面的文件,如果文件日期比/etc/passwd新 就列出来

   Find /etc  -newer  /etc/passwd

-newer用在分辨两个文件之间的新旧关系是很有用的

 

  找出4天内被改动过的文件名

       Find /var -mtime -4

   找出4天前的那一天

Find/var -mtime 4

有没有加上+—差别很大

 

+4代表大于等于5天前的文件名;find /var -mtime +4

-4代表小于等于4天前的文件名;find /var -mtime -4

4则是代表4-5提起你那一天的文件名:find /var -mtime 4

 

参数

与用户或用户组名有关的参数;

-uidn :n为数字,这个数字是用户的帐号ID。即UID,这个UID是记录在/etc/passwd 里面与帐号名称对应的数字

-gidn :n为数字,这个数字是用户组名的ID.即GID,这个GID记录在/etc/group中,

 

-username :name为用户组名,例如users

-nouser:寻找文件的所有者不存在/etc/passwd 的人

-nogroup:寻找文件的所有用户组不存在于/etc/group中的文件,当你自行安装软件时,很可能该软件的属性当中并没有文件所有者,这是可能的,在这个时候就可以使用-nouser与-nogroup查找。

 

查找/home 下面属于vbird的文件

Find/home -user vbird

当我们要找出任何一个用户在系统当中的所有文件时,就可以利用这个命令将属于某个用户的所有文件都找出来。

 

查找系统中不属于任何人的文件

Find / -nouser

通过这个命令,可以轻易就找出哪些不太正常的文件

 

与文件权限及名称有关的参数

-name  filename;查找文件名为filename的文件

-size(+—)SIZE;查找比SIZE还要大(+)或小(-)的文件,这个size的规格有;c:代表byte;k:代表1024bytes。所以要找比50kb还大的文件,就是“-size  +50k”

 

-typeTYPE :查找文件的类型为TYPE的,类型主要有,一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),及fifi(p)等属性

-permmode ;查找文件权限“刚好等于”mode的文件,这个mode与类似chmod的属性值,举例来说,-rwsr-xr—r—的属性为4755

-perm-mode ;查找文件权限“必须要全部包括mode的权限”的文件,举例来说我们要查找-rwxr--r--,即0744的文件,使用-perm -0744,当一个文件的权限为-rwsr-wr-x,即4755时,也会被列出来,因为-rwsr-xr-x的属性已经包括了-rwxr—r—的属性了

-perm+mode:查找文件权限“包含任意mode的权限”的文件,举例来说,我们查找-rwxr-xr-x,即-perm +755时,但一个文件属性为-rw-------也会被列出来,因为它有-rw…的属性存在

范例;

找出文件名为passwd的这个文件

Find/ -name apsswd

利用这个-name可以查找文件名

 

找出/var目录下文件类型为Socket的文件名有哪些

Find/var -type s

 

查找文件当中含有SGID或SUID或SBIT的属性

Find/ -perm +7000

所谓的7000就是---s--s—t,那么只要含有s或t的就列出来

所以当然要使用+7000.使用-7000表示要含有—s—s—t的所有三个权限

因此就是+7000

将/bin目录下只要具有SUID或SGID的文件就列出来

Find/bin -perm +6000

因为SUID是4分,SGID是2分总共6分,因此可用+6000来处理这个权限,

 

其他可进行的操作;

-execcommand:command为其他命令,-exec后面可再接其他的命令来处理查找到的结果

-print:将结果打印到屏幕上,这个操作是默认操作

将上个范例找到的文件使用ls -l 列出来

Find/ -perm +7000 -exec ls -l {}\;

-perm后面跟的是具有SUID与SGID的权限

-exec后面跟的是额外的命令 比如 ls -l

{}代表的是“由find找到的内容”,find到的结果会被放到{}位置中

-exec一直到“\;”是关键字,代表find额外命令的开始(-exec)到结束(/;)在这中间的就是find命令内的额外命令,在本例中就是ls-l{}

因为“;”在bash环境下有特殊意思的;因此利用反斜杠来转义。

 

找出系统中大于1MB的文件

Find/  -size + 1000k

 

找出/etc下面文件名包含httpd的文件,

Find/etc -name ‘*httpd*;’

不但可以指定查找的目录(连同子目录)。并且额可以利用额外的参数来找到最正确的文件名。

 

权限与命令件的关系(极重要)

权限对于用户帐号来说是非常重要的,因为它可以限制用户能不能读取/新建/删除/修改文件或目录,在这一节将两者结合,说明一下什么命令在什么样的权限下才能够运行

让用户能进入某目录成为“可工作目录”的基本权限

可使用的命令;例如cd等切换工作目录的命令

目录所需权限;用户对这个目录至少需要具有x的权限

额外需求,如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需r的权限

用户在某个目录内读取一个文件的基本权限是什么

可使用的命令,