感谢支持
我们一直在努力

鸟哥的Linux私房菜 课后练习第二~六章

鸟哥的Linux私房菜下载见


http://www.linuxidc.net/thread-2200-1-1.html


http://www.linuxidc.net/thread-2268-1-1.html


第二章、


1.Linux对于硬件的要求是什么?是否一定要很高的配置才能安装Linux?


Linux对于硬件配置没有特殊的要求,不一定非要很高的配置才能安装Linux。


2. 一台好的主机在安装之前最好先进行规划,哪些是必需注意的Linux主机规划事项?


必须注意的是主机的用途,用途不同对主机硬件的需求也不同,硬盘的规划也不相同。


3. 请写下目前您使用的个人计算机中,各项设备的主要等级与厂商或芯片组名称:


主机板: CPU: 内存大小:


硬盘容量: 显卡: 网卡:


4. 请写下下列设备在Linux中的硬件代号:


IDE硬盘: /dev/hd[a-d] 光驱:/dev/cdrom  打印机:/dev/lp[0-2]


软驱:/dev/fd[0-1]  网卡:/dev/ethn(n由0开始)


第三章


1. 请以本章的Linux主机规划方式,仔细规划您的Linux主机,好开始您的Linux之旅。


2. Linux安装规范中,有两个分区一定要有,是哪两个?


是/ 根分区和/SWAP 交换分区


3. 请问,一个硬盘最多可以有几个Primary + Extended扇区?


最多可以有3个Primary和1个Extended分区.


4. 如果我的硬盘接在IDE 2的Master上,请问这个硬盘的第一个 Logical磁盘代号为多少?


/dev/hdc1


备注:















IDE\Jumper 主硬盘 从硬盘
IDE1 (Primary) /dev/hda /dev/hdb
IDE2 (Primary) /dev/hdc /dev/hdd

5. 一般Swap的建议大小为多少?


一般为内存的2倍.


6. 如果我在分割磁盘时设定了4个Primary扇区,但是磁盘还有空间,请问还能不能使用这些空间?


不能.


备注:


硬盘分为两个区域,一个用于放置这个硬盘的信息,我们称为主引导扇区(Master Boot Recorder,MBR),一个则是放置实际数据文件的地方。在MBR中记录了两个重要的东西,分别是启动管理程序与硬盘分区表(partition table)。硬盘分区表定义了第n个磁盘区块是由第x磁柱到第y个磁柱。MBR区块当初设计的时候就只设计成4个分割记录,这些分割记录就被称为Primary(主分区)及Extended(扩展分区),也就是说,一块硬盘最多可以有4个Primary+ Extended区,其中,Extended只能有一个。扩展分区本身不能在任何系统上使用,还需要额外地分割成Logical(逻辑分区)才能使用


第四章


在Linux上实际记录用户身份的是UID与GID,分别代表用户ID与群组ID。系统管理员(root)的号码即是0,所以您进入/etc/passwd文件即可看到root的两个ID号都是0,基本上,您只要建立一个账号,并且将其UID设定为0,那么它就具有root的身份了。而一般用户的ID号通常在500以后,1~499之间多会留给系统使用。


图形模式与文字模式的切换


Ctrl + Alt + [F1] ~ [F6] :文字界面tty1 ~ tty6终端


Ctrl + Alt + [F7]            : 图形界面


从文字界面切换到图形界面,也可以直接输入


[root@test root]# startx


指令输入与基本指令


指令的输入格式为:


[root@test root]# command [-options] parameter1 parameter2 …


                              指令              选项      参数(1)          参数(2)


说明:


1. 指令与参数区分字母大小写;


2. command为指令的名称,例如变换路径的指令为cd,等等;


3. 中括号[]实际并不存在,在进行参数设定时,通常为“-”号,若为完整参数名称,则输入“–”符号;


4. parameter1,parameter2……为跟在option后面的参数,或是command的参数;


5. command,-options,parameter这几项之间以空格分开,不论空几个格,shell都视为一个空格;


6. 指令太长的时候,可以使用“\”符号使指令连续到下一行。


显示日期的指令:date


[root@test root]# date +%Y/%m/%d


2002/10/16


[root@test root]# date +%H:%M


15:32


显示日历的指令:cal


显示2011年一整年的的日历:cal 2011


cal的语法为:[root@test root]# cal [month] [year]


简单好用的计算器:bc


再改计算器下,几个常用的运算符:


+ 加法


– 减法


* 乘法


/ 除法


^ 指数


% 余数


Ctrl + c:在Linux下,如果输入了错误的指令或参数,有时候系统会一直运行而不停止,可以键入Ctrl + c,这就是中断当前程序。


在线求助 man指令


[root@test root]# man date


出来的页面叫做man page,退出man page可直接输入q这个字母。在man page中可以按的键有:


· 空格键: 向下翻页;


· page up: 向上翻页;


· page down: 向下翻页;


· home: 回到最前面;


· end: 转到最终页;


· /word: 搜寻word所代表的文件。


这些man page通常是放在/usr/share/man中


除了man之外,Linux中还提供另外一种查询方式,即info


[root@test root]# info command

正确的关机方式


观察系统的使用状态:如果要看目前有谁在线,可以输入who指令,而如果要看网络的联机状态,可以输入netstat -a指令,而要看背景执行的程序可以执行ps -aux指令


只有root有权关机


shutdown指令


它的参数有如下几个。


-t sec: -t后面跟秒数,亦即“过几秒后关机”的意思


-k: 不要真的关机,只是发送警告信息


-r: 在将系统的服务停掉之后就重新开机


-h: 将系统的服务停掉后,立即关机


-n: 不经过init程序,直接以shutdown功能关机


-f: 关机并开机之后,强制略过fsck工具的磁盘检查


-F: 系统重新开机之后,强制执行fsck磁盘检查


-c: 取消已经在进行的shutdown指令内容


例子:


shutdown -h now 立刻关机,其中now相当于时间为0


shutdown -h 20:25 系统在今天的20:25分关机


shutdown -h +10 系统再过十分钟后自动关机


shutdown -r now 系统立刻重新开机


shutdown -r +30 ‘The system will reboot’


再过三十分钟系统会重新开机,并显示后面的信息。


shutdown -k ‘This system will reboot’


仅发出引号内的警告信息,系统不会关机


课后练习


1. 请问,如果我以文字模式登入Linux主机,我有几个终端接口可以使用?如何切换各个不同的终端接口?


    6个


    Ctrl + Alt + [F1] ~ [F6] :文字界面tty1 ~ tty6终端


2. 在Linux系统中,VBird与vbird是否为相同的文件?


    不是,区分大小写


3. 我想知道date如何使用,应该如何查询?


    man date


    或者


    info date


4. 我想在今天的1:30让系统自动关机,要怎么做?


    shutdown –h 1:30


5. man page的配置文件在哪里?


    man page通常是放在/usr/share/man中


6. 我想知道2003年5月2日是星期几,该怎么做?


    使用命令:cal 5 2003


7. 使用man date然后找出显示当前日期与时间的参数,使其显示格式类似:2002/10/16-20:03


    date %Y/%m/%d-%H:%M


第五章


一个常用指令:


[root@test root]# ls -al


ls是list的意思,参数-al则表示列出所有的文件(包含隐藏文档,就是文件名前第一个字符为“.”的文件)


-rwxrwxrwx 1 root root 293 Oct 19 21:24 test


第一栏(-rwxrwxrwx)代表这个文件的属性:此处需要特别注意。细心的读者可以发现这一栏其实共有10个属性


其中第一个属性代表这个文件是目录、文件或者链接文件。


· 若为[ d ],则是目录,例如上面的tmp/行;


· 若为[ – ],则是文件,例如上面的.bashrc行;


· 若是[ l ],则表示为链接文件(link file);


· 若是[ b ],则表示为设备文件中可供储存的接口设备;


· 若是[ c ],则表示为设备文件中的串行端口设备,例如键盘、鼠标。


第一栏中剩下的属性,三个为一组,且均为“rwx”的组合形式。其中:


· [ r ]代表可读


· [ w ]代表可写


· [ x ]代表可执行


如果不具备某个属性,则相应字母会被删掉。例如,如果仅有读写能力,没有执行能力,那么x会被删掉,而成为[rw-]。


· 第一组[ rwx ]为“拥有者的权限,owner”,例子中,该文件的拥有者可以读写及执行;


· 第二组[ rwx ]为“群组的权限,group”,例子中,和该文件的拥有者属于同一群组的用户,均可擦写及执行;


· 第三组[ — ]为“其他非本群组的用户的权限,others”,上面则显示其他人均不可擦写与执行。


范例:若有一个文件的属性为-rwxr-xr–,则说明:


· 这个文档为一个常规文件;


· 拥有人的权限为可读、可写、可执行;


· 同群组用户权限为可读可执行,但不可写入;


· 其他用户权限仅为可读。


② 第二栏表示链接占用的节点(i-node)(若为目录,通常与该目录下有多少子目录有关),这部分将在介绍链接文件时(下一节)深入介绍。


③ 第三栏表示这个文件(或目录)的“拥有者”。


④ 第四栏表示拥有者的群组。


⑤ 第五栏为这个文件的大小。


⑥ 第六栏为这个文件的建档日期或最近的修改日期,分别为月份、日期及时间。


⑦ 第七栏为这个文件的文件名。如果文件名之前多一个“.”,则表明这个文件为“隐藏文档”


如何改变文件权限


改变群组chgrp


语法:


chgrp 群组名称  文件或目录(改变的目标群组名称必须在/etc/group中存在,否则会显示错误。)

改变拥有者chown


文件的拥有者必须已经存在于系统中,也就是说,拥有者名称在/etc/passwd文件中存在才能改变。chown的用途很多,它还可以直接修改群组的名称。此外,如果要将目录下的所有子目录或文件同时更改文件拥有者,直接加–R参数即可


语法:


chown [ -R ] 账号名称  文件或目录


chown [ -R ] 账号名称:群组名称  文件或目录


改变权限chmod


数字类型改变文件权限


r: 4


w: 2


x: 1


将同一组数字相加。属性[ -rwxrwx— ]的相加结果为:


owner = rwx = 4+2+1 = 7


group = rwx = 4+2+1 = 7


others = — = 0+0+0 = 0


所以,三组属性生成的数值就是770。


更改属性的指令为chmod,其语法为:


chmod [-R] xyz 文件或目录


其中,xyz为同三组rwx属性数值的相加


符号类型改变文件形态


基本上9个属性分别是user,group和others三组,那么我们可以用u,g和o来代表3个组的属性。此外,a则代表all亦即全部的三组。那么读写属性就可以写成r,w,x。所以,可以使用下面的方式:





















chmod u +(加入) r 文件或目录
g -(除去) w
o =(设定) x
a    

举例:


[root@test root]# chmod u=rwx,og=rx .bashrc


[root@test root]# chmod a+w .bashrc


[root@test root]# chmod a-x .bashrc


Linux支持的文件格式与文件种类


文件格式


可以到Linux 系统的/lib/modules/`uname–r`/kernel/fs下查看,如果有您想要的文件格式,那么这个核心就支持它。


目前使用的最广泛的虽然还是ext2,不过,最近发布的Linux版本大多已经默认采用ext3或reiserfs这种具有日志管理功能(Journaling)的文件格式


文件种类


Linux主要有下面几种文件种类:


· 正规文件(regular file):就是一般类型的文件,即由ls -al显示出的文件中其第一个属性为[ – ]的文件。另外,依照文件的内容,又可以将其细分为下列两种:


?? 纯文本文件(ASCII):这是Unix系统中最多的一种类型,我们可以用来设定的文件几乎都属于这一种;


?? 二进制文件(binary):通常除了脚本(文字型批处理文件)之外,执行文件就是这种文件格式。


· 目录(directory):就是目录,其第一个属性为[ d ]。


· 链接文件(link):类似Windows下的快捷方式,其第一个属性为[ l ]。


· 设备文件(device):与系统外设相关的文件,通常都集中在/dev目录下。通常又分为两种:


?? 块(block)设备文件:就是用于储存数据以提供系统存取的接口设备,简单地说就是硬盘。例如您的主硬盘代码是/dev/hda1。这类文件的第一个属性为[ b ];


?? 字符(character)设备文件:即一些串行端口的接口设备,例如键盘、鼠标等。这类文件的第一个属性为[ c ]。


另外,在Linux下,每个文件或目录的文件名最长可以达到256个字符。


Linux目录配置

















































/bin 这是存放诸如ls、mv、rm、mkdir等常用执行文件的地方。有时这个目录的内容与/usr/bin一样,专门用于放置一般用户使用的执行程序
/boot 这里是放置Linux核心与启动相关文件的地方,目录下的vmlinuz-xxx就是Linux的内核。如果启动管理程序选择grub,那么这个目录内还有/boot/grub子目录
/dev 存放与设备有关的文件。如/dev/fd0:软驱、/dev/cdrom:光驱
/etc 系统在启动过程中需要读取的文件均在这个目录下,用户账号与密码、系统的主要设定、http架站参数、您要启动的服务项等,所以一般要备份这个目录
/etc/rc.d 这个目录主要存放开关机过程中用到的脚本文件
/etc/rc.d/init.d 所有服务默认的启动脚本文件都放在这里
/home 这是系统默认的用户根目录(home directory),在新增一个一般用户的账号时,默认的用户根目录已在这里设定好
/lib Linux执行或编译某些程序时要用到的函数库(library)就在这个目录下
/root 系统管理员的根目录
/sbin 放置系统管理常用的程序,例如fdisk,mke2fs,fsck,mkswap和mount等。与/bin不太一样,这个目录下的程序通常是root等系统管理员使用的程序
/tmp 这是让一般用户存放临时文件的地方
/usr 这是最重要的一个目录,,里面含有很多系统信息
/usr/share/man 放置一些程序的说明文件的地方,就是您使用man时会查询的路径
/usr/src 是放置核心源代码的默认目录
/var 所有服务的登录文件或错误信息文件(log files)都在/var/log下,一些数据库如MySQL则在/var/lib下,用户未读取邮件的默认存放地点为/var/spool/mail


需要注意的目录


在Linux系统中,有几个目录需要特别注意,下面列出这几个目录及相关的用途。


· /etc:这个目录相当重要,如前所述,启动与系统数据文件均在这个目录下,因此当这个目录被破坏,您的系统也就差不多该死掉了!而在后面,您会发现我们常常使用这个目录下的/etc/rc.d/init.d子目录,因为该目录用于存放启动一些Linux系统服务的脚本(可以认为是批处理文档)。而在/etc/rc.d/rc.local这个文件是启动执行文件,有点类似旧Windows系统下的autoexec.bat及config.sys。所以,如果您有需要在启动时加载的服务或执行文件,可以写在这个文件的最后一行,则启动时就会自动加载执行文件了。


· /bin,/sbin,/usr/bin,/usr/sbin:这是系统默认的执行文件的放置目录,例如root常用的userconf,netconf,perl,gcc,C++等数据都放在这几个目录中,所以如果您在提示符下找不到某个执行文件,可以在这4个目录中查找。其中,/bin和/usr/bin是系统用户使用的目录,而/sbin和/usr/sbin则是系统管理员使用的目录。


· /usr/local:这是系统预留的让您安装后来升级的套件的目录。例如,当您发现有更新的Web套件(如Apache),而又不想以RPM的方式升级套件,则可以将apache套件安装在/usr/local下。安装在这里有个好处,因为目前大家的系统都差不多,所以如果您的系统要让别人接管,也较容易上手,比较容易找到数据。因此,如果需要,通常我都会将/usr/local/bin路径加到我的path中。


· /home:这是系统默认的用于存放用户账号的根目录。


· /var:这个目录很重要。登入、各类服务发生问题时的记录,以及常规性的服务记录等都记在这个目录下,所以当您的系统出现问题,就需要在这个目录记录的文件数据中查看问题所在。另外,mail的默认位置也在这里,所以这个目录非常重要。


· /usr/share/man,/usr/local/man:这两个目录为放置各类套件说明文档的地方,例如,您执行man man,则系统自动查找这两个目录下的所有说明文件,如果有相同的数据就会显示出来。


课后练习:


1. 早期的Unix系统文件名最多允许14个字符,而新的Unix与Linux系统,其文件名最多可以容许多少字符?


在Linux下,每个文件或目录的文件名最长可以达到256个字符。


2. 若文件属性为–rwxrwxrwx,则表示这个文件的意义是什么?


该文件的拥有者具有可读可写可执行的权利


该拥有者所属的群组具有可读可写可执行的权利


其他人具有可读可写可执行的权利。


3. 我需要将一个文件的属性改为–rwxr-xr–,请问该输入什么指令?


方法一:chmod u=rwx, g=rx, o=r 文件名


方法二:chmod 754 文件名


4. 若需要更改一个文件的拥有者与群组,该用什么指令?


chown


5. Linux传统的文件系统是什么?此外,常用的带有日志管理功能的文件格式有哪些?


linux传统的文件系统为:ext2。常用的带有日志管理功能的文件格式有:ext3和reiserfs.


6. 请说出下面的目录主要放置什么数据。


/etc/:系统在启动过程中需要读取的文件均在这个目录下


/etc/rc.d/init.d:所有服务默认的启动脚本文件都放在这里


/boot:这里是放置Linux核心与启动相关文件的地方


/usr/bin,/bin:系统用户使用的目录,系统默认的执行文件的存放位置


/usr/sbin,/sbin:系统管理员使用的目录,系统默认的执行文件的存放位置


/dev:存放与设备有关的文件


/var/log:所有服务的登录文件或错误信息文件


7. 若一个文件的文件名以“.”开头,例如.bashrc文件,这代表什么?如何显示这种文件的文件名及其相关属性?


这个文件为隐藏文件,


用ls -al 命令显示


第六章


绝对路径:路径的写法一定是从根目录“/”写起,例如:/usr/share/doc 目录。


相对路径:路径的写法不是由“/”写起,例如从/usr/share/doc转到/usr/share/man下时,可以写成cd ../man。这就是相对路径的写法。


一些常用的目录“符号”代表的意义,如下表所示。
















. 代表当前层目录
.. 代表上层目录
~ 代表自己的根目录
~user 代表到user这个人的根目录


目录与路径的几个常用指令


cd 变换目录


pwd 显示当前目录


mkdir 建立一个新目录


rmdir 删除一个内容为空的空目录


cd语法


[root @test /root ]# cd [相对路径或绝对路径]


范例:


[root @test /root]# cd .. <==回到上一层目录


[root @test /root]# cd ../home <==相对路径的写法


[root @test /root]# cd /var/www/html <==绝对路径的写法


[root @test /etc]# cd <==回到用户的根目录


[root @test /etc]# cd ~ <==回到用户的根目录


[root @test /etc]# cd ~test <==回到test用户的根目录


pwd语法


[root @test /root ]# pwd


pwd是print working directory的缩写,是显��当前目录的指令


mkdir语法


[root @test /root ]# mkdir [目录名称]


范例:


[root @test /root]# mkdir test <==建立名为test的目录


rmdir语法


[root @test /root ]# rmdir [目录名称]


范例:


[root @test /root]# rmdir test <==删除名为test的目录


环境变量PATH


echo $PATH(会显示当前PATH)


[root@test root]# echo $PATH


/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin


将/root的路径加入PATH中,可以使用如下指令


PATH=”$PATH”:/root

文件与目录管理基础


ls 显示文件名称、属性等


cp 复制文件或目录


rm 删除文件或目录


mv 移动文件或目录


ls


语法:


[root @test /root ]# ls [-ailS]


参数说明:


-a :列出所有文件(连同隐藏文档)


-i :打印inode的值


-l :详细列出,连同文件大小、属性数据等


-S :以文件大小排序


–color=never :不显示颜色


–color=always :均显示颜色


–color=auto :由系统自行判断


cp


语法:


[root @test /root ]# cp [-drsu] [源文件] [目标文件]


参数说明:


-d :进行复制时,如果是复制到链接文件,若不加任何参数,则默认情况下会将链接到的源文件复制到目的地,若加-d,则链接文件可原封不动地将链接这个快捷方式复制到目的地。


-r :可以进行目录的复制。


-s :做成链接文件,与ln指令功能相同。


-u, –update:如果源文件较新,或者没有目标文件,才会进行复制动作。可用于备份操作。


范例:


[root @test /root]# cp .bashrc bashrc


将.bashrc复制成bashrc文件!


rm


语法:


[root @test /root ]# rm [-fir] [文件名]


参数说明:


-i :提供用户确认(这是默认值)。


-r :循环删除,直到没有东西为止。


-f :force,就是强制删除。


mv


语法:


[root @test /root ]# mv [-u] [源文件] [目标文件]


参数说明:


-u :同样,为update的简写,当源文件比目标文件还新时才会动作!


范例:


[root @test /root]# cp .bashrc bashrc


[root @test /root]# mv bashrc bashrc.old <==也可以用来更改文件名


[root @test /root]# mv bashrc bashrc2 /tmp <==将bashrc与bashrc2移到/tmp目录下。请注意,最后一个才是最终的目标文件,其他的都是源文件


这个指令有两个用途,第一个是移动。在您要移动文件或目录时这个指令很重要。同样,您也可以使用-u (update)测试新旧文件,看看是否需要搬移。另外一个用途就是变更文件名,我们可以很轻易地使用mv来变更文件的文件名。


查看文件内容


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


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


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


less 与more类似,但其优点是,可以往前翻页


head 只看头几行


tail 只看末尾几行


nl 显示时同时输出行号


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


cat


语法:


[root @test /root ]# cat [-n]


参数说明:


-n: 显示时,连行号一起输出到屏幕上。


范例:


[root @test /root]# cat ~/.bashrc <==显示.bashrc文件


cat较不常见,因为在文件内容行数超过40行以上时根本来不及看,所以,配合more或者less执行比较好。


tac


语法:


[root @test /root ]# tac [文件名]


参数说明:


范例:


[root @test /root]# tac ~/.bashrc <==发现了没?是反向显示


cat是从第一行到最后一行连续显示在屏幕上,而tac则是从最后一行到第一行反向显示在屏幕上。


more


语法:


[root @test /root ]# more [文件名]


参数说明:


范例:


[root @test /root]# more ~/.bashrc <==一页一页地显示文件内容


[root @test /]# ls -al | more <==一页一页地将ls的内容显示出来


less


语法:


[root @test /root ]# less [文件名]


参数说明:


范例:


[root @test /root]# less ~/.bashrc


less的用法比more更有弹性,使用more时,我们没有办法向前翻看,用less时就可以使用[pageup]、[pagedown]等按键的功能向前向后翻看文件


head与tail常用于仅想读取某个文件的前几行或后几行的情况。


head


语法:


[root @test /root ]# head [-n number] [文件名]


参数说明:


-n :显示number行


范例:


[root @test /root]# head ~/.bashrc <==默认情况下,显示前10行


[root @test /root]# head -n 20 ~/.bashrc <==显示前20行


tail


语法:


[root @test /root ]# tail [-n number] [文件名]


参数说明:


-n :显示number行


范例:


[root @test /root]# tail ~/.bashrc


[root @test /root]# tail -n 5 ~/.bashrc <==只显示最后5行


nl


语法:


[root @test /root ]# nl [文件名]


参数说明:


范例:


[root @test /root]# nl ~/.bashrc


nl指令的用法和cat -n用法相似,即查看文件的同时可以显示行号。


od


语法:


[root @test /root ]# od [文件名]


参数说明:


范例:


[root @test /root]# od ~/.bashrc


Block是记录文件内容数据的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜寻inode table找到这个文件的属性及数据放置地点,然后再查找数据存放的Block进而将数据取出

链接又分为硬链接(hard link)与符号链接(symbolic link)两种方式


硬链接就是再建立一个inode链接到文件放置的Block块。


符号链接是再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。


一个文件名实际上是指向一个inode。然后inode中的信息存放文件的实际存放位置。


硬链接就是在创建一个inode,这个inode里面的信息跟原先的那个inode的存放的信息一样(即指向文件的实际存放位置)。


符号链接是建立一个inode,这个inode里面的信息指向原先的那个inode(指向原先的那个inode)。


语法:


[root @test /root ]# ln [-s] [源文件] [目标文件]


参数说明:


-s :提供符号链接


:如果直接使用ln而不加任何参数,就属于硬链接


文件与目录权限


chown 改变文件的拥有者


chgrp 改变文件的所属群组


chmod 改变文件的可写、可读、可执行等属性


umask 改变预设的建立文件或目录时的属性


chattr 改变文件的特殊属性


lsattr 显示文件的特殊属性


语法:


[root @test /root ]# chown [-R] user:group [目录名称]


参数说明:


-R :循环地将该目录下的所有文件都改成 user 与 group 的名称


范例:


[root @test /root]# mkdir /home/test/testing


在/home/test根目录中建立一个名为testing的子目录


语法:


[root @test /root ]# chmod [-R] [parameter] [目录名称]


参数说明:


-R :循环地将该目录的文件都改变


范例:


[root @test /root]# chmod 777 .bashrc


一个文件或目录至少有9个属性,三三一组,共分为三组。可以使用数字当作变换属性


的参考依据


umask用于指定当前用户在建立文件或目录时的属性默认值。


查看umask数值直接输入umask即可,要设定其值,在umask之后接3个数字。如何指定这3个数字呢?主要还是和Linux的文件属性(那9个属性,r, w, x)有关,同时参考下面的规则。


· 若用户建立的是“文件”,则默认没有可执行(x)项,即只有rw这两个项,也就


是最大为666(-rw-rw-rw);


· 若用户建立的是“目录”,则由于x与是否可以进入此目录有关,因此默认为所有


权限均开放,亦即777(drwxrwxrwx)。


umask指定的是“该默认值需要取消的权限”,因为r,w,x分别是4,2,1,所以,当要取消写权限,就输入2,而如果要取消读权限,就输入4


chattr


语法:


[root @test /root ]# chattr [+-=][ASacdistu] [文件或目录名称]


参数说明:


+-= :分别为“+”(增加)、“-”(减少)、“=”(设定)属性


A :当设定了属性A,这个文件(或目录)的存取时间atime (access)将不可被修改,可避免


诸如手提电脑容易产生磁盘I/O错误的情况


S :这个功能有点类似sync,是将数据同步写入磁盘中,可以有效避免数据流失


a :设定a后,这个文件将只能增加数据而不能删除,只有root才能设定这个属性。


c :设定这个属性之后,将会自动将此文件压缩,在读取时自动解压缩。但是在存储的时候,会


先进行压缩再存储(对于大文件很有用)


d :当dump(备份)程序被执行,设定d属性将可使该文件(或目录)具有dump功效


i :这个参数可以让一个文件“不能被删除、更名、设定链接也无法写入或新增数据”,对于系


统安全性有相当大的助益


j :当使用ext3文件系统格式时,设定j属性将使文件在写入时先记录在日志中,但是当


filesystem设定参数为data=journalled时,由于已经设定了日志,所以这个属性无效


s :当文件设定了s参数时,它会被完全移出这个硬盘空间


u :与s相反,当使用u配置文件时,数据内容其实还存在于磁盘中,可以用来取消删除

范例:


[root @test /root]# chattr +i /etc/shadow


如此则无法更动这个文件


[root @test /root]# chattr -i /etc/shadow


解除该属性


lsattr


语法:


[root @test /root ]# lsattr [-aR]


参数说明:


-a :将隐藏文件的属性也显示出来


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


搜寻文件或目录


which 查看可执行文件的位置


whereis 查看文件的位置


locate 配合数据库查看文件位置


find 实际搜寻硬盘查询文件名称


which


语法:


[root @test /root ]# which [文件名称]


参数说明:


范例:


[root @test /root]# which passwd


/usr/bin/passwd


which的基本功能是通过PATH环境变量到该路径内寻找可执行文件,所以基本的功能在于寻找可执行文件。


whereis


语法:


[root @test /root ]# whereis [-bmsu] [目录名称]


参数说明:


-b :只找二进制文件


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


-s :只找source源文件


-u :没有说明文档的文件!


范例:


[root @test /root]# whereis passwd


passwd:/usr/bin/passwd/etc/passwd /usr/share/man/man1/passwd.1.bz2


将passwd相关字的文件或目录都列出来。


[root @test /root]# whereis -b passwd


passwd: /usr/bin/passwd /etc/passwd


仅列出二进制文件。


[root @test /root]# whereis -m passwd


passwd: /usr/share/man/man1/passwd.1.bz2


仅搜寻man page所在的目录。


locate


语法:


[root @test /root ]# locate [目录名称]


参数说明:


范例:


[root @test /root]# locate root


……一大堆带有root字符串的文件都会显示出来


[root @test /root]# updatedb


立刻更新数据库


locate的使用方式就更简单了,直接输入要找的文件名即可。但是,这个工具有一些使用限制。您会发现,使用locate查找数据特别快,这是因为locate是从已建立的数据库/var/lib/slocate中查找数据,不用直接在硬盘中存取数据,所以自然很快。


find


语法:


[root @test /root ]# find [路径] [参数]


参数说明:


1. 时间:


-atime n :将n*24小时内被存取过的文件列出来


-ctime n :将n*24小时内被改变、新增的文件或目录列出来


-mtime n :将n*24小时内被修改过的文件列出来


-newer file :把比file还要新的文件列出来


2. 使用名称:


-gid n :寻找群组ID为n的文件


-group name :寻找群组名称为name的文件


-uid n :寻找拥有者ID为n的文件


-user name :寻找用户名称为name的文件


-name file :寻找文件名为file的文件名称(可以使用通配符)


-type type :寻找文件属性为type的文件,type包含了b, c, d, p, l, s,


这些与前一章的属性相同。例如l为Link而d为目录


范例:


[root @test /root]# find / -name testing <==寻找文件名为testing


[root @test /root]# find / -name ‘test*’ <==寻找文件名包含test的


[root @test /root]# find . -ctime 1


寻找当前目录下一天内新增的目录或文件

第五章 Linux文件权限与目录配置

一个常用指令:


[root@test root]# ls -al


ls是list的意思,参数-al则表示列出所有的文件(包含隐藏文档,就是文件名前第一个字符为“.”的文件)


-rwxrwxrwx 1 root root 293 Oct 19 21:24 test


第一栏(-rwxrwxrwx)代表这个文件的属性:此处需要特别注意。细心的读者可以发现这一栏其实共有10个属性


其中第一个属性代表这个文件是目录、文件或者链接文件。


· 若为[ d ],则是目录,例如上面的tmp/行;


· 若为[ – ],则是文件,例如上面的.bashrc行;


· 若是[ l ],则表示为链接文件(link file);


· 若是[ b ],则表示为设备文件中可供储存的接口设备;


· 若是[ c ],则表示为设备文件中的串行端口设备,例如键盘、鼠标。


第一栏中剩下的属性,三个为一组,且均为“rwx”的组合形式。其中:


· [ r ]代表可读


· [ w ]代表可写


· [ x ]代表可执行


如果不具备某个属性,则相应字母会被删掉。例如,如果仅有读写能力,没有执行能力,那么x会被删掉,而成为[rw-]。


· 第一组[ rwx ]为“拥有者的权限,owner”,例子中,该文件的拥有者可以读写及执行;


· 第二组[ rwx ]为“群组的权限,group”,例子中,和该文件的拥有者属于同一群组的用户,均可擦写及执行;


· 第三组[ — ]为“其他非本群组的用户的权限,others”,上面则显示其他人均不可擦写与执行。


范例:若有一个文件的属性为-rwxr-xr–,则说明:


· 这个文档为一个常规文件;


· 拥有人的权限为可读、可写、可执行;


· 同群组用户权限为可读可执行,但不可写入;


· 其他用户权限仅为可读。


② 第二栏表示链接占用的节点(i-node)(若为目录,通常与该目录下有多少子目录有关),这部分将在介绍链接文件时(下一节)深入介绍。


③ 第三栏表示这个文件(或目录)的“拥有者”。


④ 第四栏表示拥有者的群组。


⑤ 第五栏为这个文件的大小。


⑥ 第六栏为这个文件的建档日期或最近的修改日期,分别为月份、日期及时间。


⑦ 第七栏为这个文件的文件名。如果文件名之前多一个“.”,则表明这个文件为“隐藏文档”


如何改变文件权限


改变群组chgrp


语法:


chgrp 群组名称  文件或目录(改变的目标群组名称必须在/etc/group中存在,否则会显示错误。)


改变拥有者chown


文件的拥有者必须已经存在于系统中,也就是说,拥有者名称在/etc/passwd文件中存在才能改变。chown的用途很多,它还可以直接修改群组的名称。此外,如果要将目录下的所有子目录或文件同时更改文件拥有者,直接加–R参数即可


语法:


chown [ -R ] 账号名称  文件或目录


chown [ -R ] 账号名称:群组名称  文件或目录


改变权限chmod


数字类型改变文件权限


r: 4


w: 2


x: 1


将同一组数字相加。属性[ -rwxrwx— ]的相加结果为:


owner = rwx = 4+2+1 = 7


group = rwx = 4+2+1 = 7


others = — = 0+0+0 = 0


所以,三组属性生成的数值就是770。


更改属性的指令为chmod,其语法为:


chmod [-R] xyz 文件或目录


其中,xyz为同三组rwx属性数值的相加


符号类型改变文件形态


基本上9个属性分别是user,group和others三组,那么我们可以用u,g和o来代表3个组的属性。此外,a则代表all亦即全部的三组。那么读写属性就可以写成r,w,x。所以,可以使用下面的方式:





















chmod u +(加入) r 文件或目录
g -(除去) w
o =(设定) x
a    

举例:


[root@test root]# chmod u=rwx,og=rx .bashrc


[root@test root]# chmod a+w .bashrc


[root@test root]# chmod a-x .bashrc


Linux支持的文件格式与文件种类


文件格式


可以到Linux 系统的/lib/modules/`uname–r`/kernel/fs下查看,如果有您想要的文件格式,那么这个核心就支持它。


目前使用的最广泛的虽然还是ext2,不过,最近发布的Linux版本大多已经默认采用ext3或reiserfs这种具有日志管理功能(Journaling)的文件格式


文件种类


Linux主要有下面几种文件种类:


· 正规文件(regular file):就是一般类型的文件,即由ls -al显示出的文件中其第一个属性为[ – ]的文件。另外,依照文件的内容,又可以将其细分为下列两种:


?? 纯文本文件(ASCII):这是Unix系统中最多的一种类型,我们可以用来设定的文件几乎都属于这一种;


?? 二进制文件(binary):通常除了脚本(文字型批处理文件)之外,执行文件就是这种文件格式。


· 目录(directory):就是目录,其第一个属性为[ d ]。


· 链接文件(link):类似Windows下的快捷方式,其第一个属性为[ l ]。


· 设备文件(device):与系统外设相关的文件,通常都集中在/dev目录下。通常又分为两种:


?? 块(block)设备文件:就是用于储存数据以提供系统存取的接口设备,简单地说就是硬盘。例如您的主硬盘代码是/dev/hda1。这类文件的第一个属性为[ b ];


?? 字符(character)设备文件:即一些串行端口的接口设备,例如键盘、鼠标等。这类文件的第一个属性为[ c ]。


另外,在Linux下,每个文件或目录的文件名最长可以达到256个字符。


Linux目录配置

















































/bin 这是存放诸如ls、mv、rm、mkdir等常用执行文件的地方。有时这个目录的内容与/usr/bin一样,专门用于放置一般用户使用的执行程序
/boot 这里是放置Linux核心与启动相关文件的地方,目录下的vmlinuz-xxx就是Linux的内核。如果启动管理程序选择grub,那么这个目录内还有/boot/grub子目录
/dev 存放与设备有关的文件。如/dev/fd0:软驱、/dev/cdrom:光驱
/etc 系统在启动过程中需要读取的文件均在这个目录下,用户账号与密码、系统的主要设定、http架站参数、您要启动的服务项等,所以一般要备份这个目录
/etc/rc.d 这个目录主要存放开关机过程中用到的脚本文件
/etc/rc.d/init.d 所有服务默认的启动脚本文件都放在这里
/home 这是系统默认的用户根目录(home directory),在新增一个一般用户的账号时,默认的用户根目录已在这里设定好
/lib Linux执行或编译某些程序时要用到的函数库(library)就在这个目录下
/root 系统管理员的根目录
/sbin 放置系统管理常用的程序,例如fdisk,mke2fs,fsck,mkswap和mount等。与/bin不太一样,这个目录下的程序通常是root等系统管理员使用的程序
/tmp 这是让一般用户存放临时文件的地方
/usr 这是最重要的一个目录,,里面含有很多系统信息
/usr/share/man 放置一些程序的说明文件的地方,就是您使用man时会查询的路径
/usr/src 是放置核心源代码的默认目录
/var 所有服务的登录文件或错误信息文件(log files)都在/var/log下,一些数据库如MySQL则在/var/lib下,用户未读取邮件的默认存放地点为/var/spool/mail


需要注意的目录


在Linux系统中,有几个目录需要特别注意,下面列出这几个目录及相关的用途。


· /etc:这个目录相当重要,如前所述,启动与系统数据文件均在这个目录下,因此当这个目录被破坏,您的系统也就差不多该死掉了!而在后面,您会发现我们常常使用这个目录下的/etc/rc.d/init.d子目录,因为该目录用于存放启动一些Linux系统服务的脚本(可以认为是批处理文档)。而在/etc/rc.d/rc.local这个文件是启动执行文件,有点类似旧Windows系统下的autoexec.bat及config.sys。所以,如果您有需要在启动时加载的服务或执行文件,可以写在这个文件的最后一行,则启动时就会自动加载执行文件了。


· /bin,/sbin,/usr/bin,/usr/sbin:这是系统默认的执行文件的放置目录,例如root常用的userconf,netconf,perl,gcc,C++等数据都放在这几个目录中,所以如果您在提示符下找不到某个执行文件,可以在这4个目录中查找。其中,/bin和/usr/bin是系统用户使用的目录,而/sbin和/usr/sbin则是系统管理员使用的目录。


· /usr/local:这是系统预留的让您安装后来升级的套件的目录。例如,当您发现有更新的Web套件(如Apache),而又不想以RPM的方式升级套件,则可以将apache套件安装在/usr/local下。安装在这里有个好处,因为目前大家的系统都差不多,所以如果您的系统要让别人接管,也较容易上手,比较容易找到数据。因此,如果需要,通常我都会将/usr/local/bin路径加到我的path中。


· /home:这是系统默认的用于存放用户账号的根目录。


· /var:这个目录很重要。登入、各类服务发生问题时的记录,以及常规性的服务记录等都记在这个目录下,所以当您的系统出现问题,就需要在这个目录记录的文件数据中查看问题所在。另外,mail的默认位置也在这里,所以这个目录非常重要。


· /usr/share/man,/usr/local/man:这两个目录为放置各类套件说明文档的地方,例如,您执行man man,则系统自动查找这两个目录下的所有说明文件,如果有相同的数据就会显示出来。


课后练习:

1. 早期的Unix系统文件名最多允许14个字符,而新的Unix与Linux系统,其文件名最多可以容许多少字符?


在Linux下,每个文件或目录的文件名最长可以达到256个字符。


2. 若文件属性为–rwxrwxrwx,则表示这个文件的意义是什么?


该文件的拥有者具有可读可写可执行的权利


该拥有者所属的群组具有可读可写可执行的权利


其他人具有可读可��可执行的权利。


3. 我需要将一个文件的属性改为–rwxr-xr–,请问该输入什么指令?


方法一:chmod u=rwx, g=rx, o=r 文件名


方法二:chmod 754 文件名


4. 若需要更改一个文件的拥有者与群组,该用什么指令?


chown


5. Linux传统的文件系统是什么?此外,常用的带有日志管理功能的文件格式有哪些?


linux传统的文件系统为:ext2。常用的带有日志管理功能的文件格式有:ext3和reiserfs.


6. 请说出下面的目录主要放置什么数据。


/etc/:系统在启动过程中需要读取的文件均在这个目录下


/etc/rc.d/init.d:所有服务默认的启动脚本文件都放在这里


/boot:这里是放置Linux核心与启动相关文件的地方


/usr/bin,/bin:系统用户使用的目录,系统默认的执行文件的存放位置


/usr/sbin,/sbin:系统管理员使用的目录,系统默认的执行文件的存放位置


/dev:存放与设备有关的文件


/var/log:所有服务的登录文件或错误信息文件


7. 若一个文件的文件名以“.”开头,例如.bashrc文件,这代表什么?如何显示这种文件的文件名及其相关属性?


这个文件为隐藏文件,


用ls -al 命令显示

第六章 文件与目录管理

绝对路径:路径的写法一定是从根目录“/”写起,例如:/usr/share/doc 目录。


相对路径:路径的写法不是由“/”写起,例如从/usr/share/doc转到/usr/share/man下时,可以写成cd ../man。这就是相对路径的写法。


一些常用的目录“符号”代表的意义,如下表所示。
















. 代表当前层目录
.. 代表上层目录
~ 代表自己的根目录
~user 代表到user这个人的根目录


目录与路径的几个常用指令


cd 变换目录


pwd 显示当前目录


mkdir 建立一个新目录


rmdir 删除一个内容为空的空目录


cd语法


[root @test /root ]# cd [相对路径或绝对路径]


范例:


[root @test /root]# cd .. <==回到上一层目录


[root @test /root]# cd ../home <==相对路径的写法


[root @test /root]# cd /var/www/html <==绝对路径的写法


[root @test /etc]# cd <==回到用户的根目录


[root @test /etc]# cd ~ <==回到用户的根目录


[root @test /etc]# cd ~test <==回到test用户的根目录


pwd语法


[root @test /root ]# pwd


pwd是print working directory的缩写,是显示当前目录的指令


mkdir语法


[root @test /root ]# mkdir [目录名称]


范例:


[root @test /root]# mkdir test <==建立名为test的目录


rmdir语法


[root @test /root ]# rmdir [目录名称]


范例:


[root @test /root]# rmdir test <==删除名为test的目录


环境变量PATH


echo $PATH(会显示当前PATH)


[root@test root]# echo $PATH


/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin


将/root的路径加入PATH中,可以使用如下指令


PATH=”$PATH”:/root


文件与目录管理基础


ls 显示文件名称、属性等


cp 复制文件或目录


rm 删除文件或目录


mv 移动文件或目录


ls


语法:


[root @test /root ]# ls [-ailS]


参数说明:


-a :列出所有文件(连同隐藏文档)


-i :打印inode的值


-l :详细列出,连同文件大小、属性数据等


-S :以文件大小排序


–color=never :不显示颜色


–color=always :均显示颜色


–color=auto :由系统自行判断


cp


语法:


[root @test /root ]# cp [-drsu] [源文件] [目标文件]


参数说明:


-d :进行复制时,如果是复制到链接文件,若不加任何参数,则默认情况下会将链接到的源文件复制到目的地,若加-d,则链接文件可原封不动地将链接这个快捷方式复制到目的地。


-r :可以进行目录的复制。


-s :做成链接文件,与ln指令功能相同。


-u, –update:如果源文件较新,或者没有目标文件,才会进行复制动作。可用于备份操作。


范例:


[root @test /root]# cp .bashrc bashrc


将.bashrc复制成bashrc文件!


rm


语法:


[root @test /root ]# rm [-fir] [文件名]


参数说明:


-i :提供用户确认(这是默认值)。


-r :循环删除,直到没有东西为止。


-f :force,就是强制删除。


mv


语法:


[root @test /root ]# mv [-u] [源文件] [目标文件]


参数说明:


-u :同样,为update的简写,当源文件比目标文件还新时才会动作!


范例:


[root @test /root]# cp .bashrc bashrc


[root @test /root]# mv bashrc bashrc.old <==也可以用来更改文件名


[root @test /root]# mv bashrc bashrc2 /tmp <==将bashrc与bashrc2移到/tmp目录下。请注意,最后一个才是最终的目标文件,其他的都是源文件


这个指令有两个用途,第一个是移动。在您要移动文件或目录时这个指令很重要。同样,您也可以使用-u (update)测试新旧文件,看看是否需要搬移。另外一个用途就是变更文件名,我们可以很轻易地使用mv来变更文件的文件名。


查看文件内容


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


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


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


less 与more类似,但其优点是,可以往前翻页


head 只看头几行


tail 只看末尾几行


nl 显示时同时输出行号


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


cat


语法:


[root @test /root ]# cat [-n]


参数说明:


-n: 显示时,连行号一起输出到屏幕上。


范例:


[root @test /root]# cat ~/.bashrc <==显示.bashrc文件


cat较不常见,因为在文件内容行数超过40行以上时根本来不及看,所以,配合more或者less执行比较好。


tac


语法:


[root @test /root ]# tac [文件名]


参数说明:


范例:


[root @test /root]# tac ~/.bashrc <==发现了没?是反向显示


cat是从第一行到最后一行连续显示在屏幕上,而tac则是从最后一行到第一行反向显示在屏幕上。


more


语法:


[root @test /root ]# more [文件名]


参数说明:


范例:


[root @test /root]# more ~/.bashrc <==一页一页地显示文件内容


[root @test /]# ls -al | more <==一页一页地将ls的内容显示出来


less


语法:


[root @test /root ]# less [文件名]


参数说明:


范例:


[root @test /root]# less ~/.bashrc


less的用法比more更有弹性,使用more时,我们没有办法向前翻看,用less时就可以使用[pageup]、[pagedown]等按键的功能向前向后翻看文件


head与tail常用于仅想读取某个文件的前几行或后几行的情况。


head


语法:


[root @test /root ]# head [-n number] [文件名]


参数说明:


-n :显示number行


范例:


[root @test /root]# head ~/.bashrc <==默认情况下,显示前10行


[root @test /root]# head -n 20 ~/.bashrc <==显示前20行


tail


语法:


[root @test /root ]# tail [-n number] [文件名]


参数说明:


-n :显示number行


范例:


[root @test /root]# tail ~/.bashrc


[root @test /root]# tail -n 5 ~/.bashrc <==只显示最后5行


nl


语法:


[root @test /root ]# nl [文件名]


参数说明:


范例:


[root @test /root]# nl ~/.bashrc


nl指令的用法和cat -n用法相似,即查看文件的同时可以显示行号。


od


语法:


[root @test /root ]# od [文件名]


参数说明:


范例:


[root @test /root]# od ~/.bashrc


Block是记录文件内容数据的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜寻inode table找到这个文件的属性及数据放置地点,然后再查找数据存放的Block进而将数据取出


链接又分为硬链接(hard link)与符号链接(symbolic link)两种方式


硬链接就是再建立一个inode链接到文件放置的Block块。


符号链接是再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。


一个文件名实际上是指向一个inode。然后inode中的信息存放文件的实际存放位置。


硬链接就是在创建一个inode,这个inode里面的信息跟原先的那个inode的存放的信息一样(即指向文件的实际存放位置)。


符号链接是建立一个inode,这个inode里面的信息指向原先的那个inode(指向原先的那个inode)。


语法:


[root @test /root ]# ln [-s] [源文件] [目标文件]


参数说明:


-s :提供符号链接


:如果直接使用ln而不加任何参数,就属于硬链接


文件与目录权限


chown 改变文件的拥有者


chgrp 改变文件的所属群组


chmod 改变文件的可写、可读、可执行等属性


umask 改变预设的建立文件或目录时的属性


chattr 改变文件的特殊属性


lsattr 显示文件的特殊属性


语法:


[root @test /root ]# chown [-R] user:group [目录名称]


参数说明:


-R :循环地将该目录下的所有文件都改成 user 与 group 的名称


范例:


[root @test /root]# mkdir /home/test/testing


在/home/test根目录中建立一个名为testing的子目录


语法:


[root @test /root ]# chmod [-R] [parameter] [目录名称]


参数说明:


-R :循环地将该目录的文件都改变


范例:


[root @test /root]# chmod 777 .bashrc


一个文件或目录至少有9个属性,三三一组,共分为三组。可以使用数字当作变换属性


的参考依据


umask用于指定当前用户在建立文件或目录时的属性默认值。


查看umask数值直接输入umask即可,要设定其值,在umask之后接3个数字。如何指定这3个数字呢?主要还是和Linux的文件属性(那9个属性,r, w, x)有关,同时参考下面的规则。


· 若用户建立的是“文件”,则默认没有可执行(x)项,即只有rw这两个项,也就


是最大为666(-rw-rw-rw);


· 若用户建立的是“目录”,则由于x与是否可以进入此目录有关,因此默认为所有


权限均开放,亦即777(drwxrwxrwx)。


umask指定的是“该默认值需要取消的权限”,因为r,w,x分别是4,2,1,所以,当要取消写权限,就输入2,而如果要取消读权限,就输入4


chattr


语法:


[root @test /root ]# chattr [+-=][ASacdistu] [文件或目录名称]


参数说明:


+-= :分别为“+”(增加)、“-”(减少)、“=”(设定)属性


A :当设定了属性A,这个文件(或目录)的存取时间atime (access)将不可被修改,可避免


诸如手提电脑容易产生磁盘I/O错误的情况


S :这个功能有点类似sync,是将数据同步写入磁盘中,可以有效避免数据流失


a :设定a后,这个文件将只能增加数据而不能删除,只有root才能设定这个属性。


c :设定这个属性之后,将会自动将此文件压缩,在读取时自动解压缩。但是在存储的时候,会


先进行压缩再存储(对于大文件很有用)


d :当dump(备份)程序被执行,设定d属性将可使该文件(或目录)具有dump功效


i :这个参数可以让一个文件“不能被删除、更名、设定链接也无法写入或新增数据”,对于系


统安全性有相当大的助益


j :当使用ext3文件系统格式时,设定j属性将使文件在写入时先记录在日志中,但是当


filesystem设定参数为data=journalled时,由于已经设定了日志,所以这个属性无效


s :当文件设定了s参数时,它会被完全移出这个硬盘空间


u :与s相反,当使用u配置文件时,数据内容其实还存在于磁盘中,可以用来取消删除


范例:


[root @test /root]# chattr +i /etc/shadow


如此则无法更动这个文件


[root @test /root]# chattr -i /etc/shadow


解除该属性


lsattr


语法:


[root @test /root ]# lsattr [-aR]


参数说明:


-a :将隐藏文件的属性也显示出来


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


搜寻文件或目录


which 查看可执行文件的位置


whereis 查看文件的位置


locate 配合数据库查看文件位置


find 实际搜寻硬盘查询文件名称


which


语法:


[root @test /root ]# which [文件名称]


参数说明:


范例:


[root @test /root]# which passwd


/usr/bin/passwd


which的基本功能是通过PATH环境变量到该路径内寻找可执行文件,所以基本的功能在于寻找可执行文件。


whereis


语法:


[root @test /root ]# whereis [-bmsu] [目录名称]


参数说明:


-b :只找二进制文件


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


-s :只找source源文件


-u :没有说明文档的文件!


范例:


[root @test /root]# whereis passwd


passwd:/usr/bin/passwd/etc/passwd /usr/share/man/man1/passwd.1.bz2


将passwd相关字的文件或目录都列出来。


[root @test /root]# whereis -b passwd


passwd: /usr/bin/passwd /etc/passwd


仅列出二进制文件。


[root @test /root]# whereis -m passwd


passwd: /usr/share/man/man1/passwd.1.bz2


仅搜寻man page所在的目录。


locate


语法:


[root @test /root ]# locate [目录名称]


参数说明:


范例:


[root @test /root]# locate root


……一大堆带有root字符串的文件都会显示出来


[root @test /root]# updatedb


立刻更新数据库


locate的使用方式就更简单了,直接输入要找的文件名即可。但是,这个工具有一些使用限制。您会发现,使用locate查找数据特别快,这是因为locate是从已建立的数据库/var/lib/slocate中查找数据,不用直接在硬盘中存取数据,所以自然很快。


find


语法:


[root @test /root ]# find [路径] [参数]


参数说明:


1. 时间:


-atime n :将n*24小时内被存取过的文件列出来


-ctime n :将n*24小时内被改变、新增的文件或目录列出来


-mtime n :将n*24小时内被修改过的文件列出来


-newer file :把比file还要新的文件列出来


2. 使用名称:


-gid n :寻找群组ID为n的文件


-group name :寻找群组名称为name的文件


-uid n :寻找拥有者ID为n的文件


-user name :寻找用户名称为name的文件


-name file :寻找文件名为file的文件名称(可以使用通配符)


-type type :寻找文件属性为type的文件,type包含了b, c, d, p, l, s,


这些与前一章的属性相同。例如l为Link而d为目录


范例:


[root @test /root]# find / -name testing <==寻找文件名为testing


[root @test /root]# find / -name ‘test*’ <==寻找文件名包含test的


[root @test /root]# find . -ctime 1


寻找当前目录下一天内新增的目录或文件


1. 什么是绝对路径与相对路径?


2. 如何更改一个目录的名称,例如由/home/test变为/home/test2?


3. PATH环境变量的意义是什么?


4. umask有什么用处与优点?


5. 当一个用户的umask分别为033与044,他所建立的文件与目录的权限为什么?


6. 什么是SUID?


7. 当要查询/usr/bin/passwd文件的一些属性时,可以使用什么指令?


8. 尝试用find找出当前Linux系统中所有具有SUID的文件。


课后练习

1. 什么是绝对路径与相对路径?


    绝对路径:从根目录开始的路径
    相对路径:从当前路径开始的路径


2. 如何更改一个目录的名称,例如由/home/test变为/home/test2?


    mv /home/test /home/test2


3. PATH环境变量的意义是什么?


    命令搜索的路径


4. umask有什么用处与优点?


    umask 可以拿掉一些权限,因此,适当的定义 umask 有助於系统的安全, 因为他可以用来创建默认的目录或文件的权限。


5. 当一个用户的umask分别为033与044,他所建立的文件与目录的权限为什么?


    umask指的是“该默认值要减掉的权限”,文件最大权限为-rw-rw-rw,
    目录最大权限为-rwxrwxrwx,所以
    文件:033表示:-rw-r–r– 目录:-rwxr–r–
    文件:044表示:-rw–w–w- 目录:-rwx-w–w-


6. 什么是SUID?


    当一个命令具有 SUID 的功能时,则:



  • SUID 权限仅对二进位程序(binary program)有效;
  • 运行者对於该程序需要具有 x 的可运行权限;
  • 本权限仅在运行该程序的过程中有效 (run-time);
  • 运行者将具有该程序拥有者 (owner) 的权限。

7. 当要查询/usr/bin/passwd文件的一些属性时,可以使用什么指令?


    传统权限 ls -al


    文件类型 file


    文件的隐藏属性 lsattr /usr/bin/passwd


8. 尝试用find找出当前Linux系统中所有具有SUID的文件。


    find / -perm +4000 -print


9.找出 /etc 底下,文件容量大於 50K 且文件所属人不是 root 的档名,且将权限完整的列出 (ls -l);


   find /etc -size +50k -a ! -user root -exec ls -ld {} \;
   find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;
   上面两式均可!注意到 ! ,那个 ! 代表的是反向选择,亦即『不是后面的项目』之意!


10.找出 /etc 底下,容量大於 1500K 以及容量等於 0 的文件:


  
   find /etc -size +1500k -o -size 0
   相对於 -a ,那个 -o 就是或 (or) 的意思罗!

赞(0) 打赏
转载请注明出处:服务器评测 » 鸟哥的Linux私房菜 课后练习第二~六章
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏