linux命令从入门到精通Word文档下载推荐.docx
《linux命令从入门到精通Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《linux命令从入门到精通Word文档下载推荐.docx(47页珍藏版)》请在冰豆网上搜索。
*在列文件或目录时,有时会遇到“t”位。
“t”位,这就意味着该目录中的文件只有其属主才可以删除,即使某个同组用户具有和属主
同等的权限。
不过有的系统在这一规则上并不十分严格。
还可以通过使用-R选项连同子目录下的文件一起设置:
chmod-R664/usr/local/home/dave/*
这样就可以一次将/usr/local/home/dave目录下的所有文件连同各个子目录下的文件的权限
全部设置为文件属主和同组用户可读和写,其他用户只读。
使用-R选项一定要谨慎,只有在
需要改变目录树下全部文件权限时才可以使用。
目录的读权限位意味着可以列出其中的内容。
写权限位意味着可以在该目录中创
建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。
执行权限
位则意味着搜索和访问该目录
chmod-R-hownerfile
-R选项意味着对所有子目录下的文件也都进行同样的操作。
-h选项意味着在改变符号链
接文件的属主时不影响该链接所指向的目标文件
如果你希望知道自己属于哪些用户组,可以用如下的命令:
group或者用id命令
为了找出其他用户所属于的组,可以用如下的命令:
groupJacky
当最初登录到系统中时,umask命令确定了你创建文件的缺省模式。
这一命令实际上和
chmod命令正好相反。
你的系统管理员必须要为你设置一个合理的umask值,以确保你创建的
文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。
在已经登录之后,可以按照个人的偏好使用umask命令来改变文件创建的缺省权限。
相应
的改变直到退出该shell或使用另外的umask命令之前一直有效。
一般来说,umask命令是在/etc/profile文件中设置的,每个用户在登录时都会引用这个文
件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。
如果希望永久性
地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、
其他用户)存在一个相应的umask值中的数字。
对于文件来说,这一数字的最大值分别是6。
系
统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一
权限。
目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。
该命令的一般形式为:
umasknnn
其中nnn为umask置000-777。
例如,umask值002所对应的文件和目录创建缺省权限分别为664和775
umask值与权限
umask文件目录
067
166
245
344
423
522
601
700
对于umask值002,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下具有全部权限的模式,即777(所有用户都具有读、写和执行权限)。
第二步,在下面一行按照umask值写下相应的位,在本例中是002。
第三步,在接下来的一行中记下上面两行中没有匹配的位。
这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即
可。
这就是上面的例子,其中umask值为002:
1)文件的最大权限rwxrwxrwx(777)
2)umask值为002-------w-
3)目录权限这就是目录创建缺省权限
rwxrwxr-x(775)
4)文件权限这就是文件创建缺省权限
rw-rw-r--(664)
下面是另外一个例子,假设这次umask值为022:
2)umask值为022----w--w-
rwxr-xr-x(755)
rw-r--r--(644)
如果想知道当前的umask值,可以使用umask命令:
wangjian@wangjian-laptop:
~$umask
0022
存在两种不同类型的链接,软链接和硬链接,这里我们只讨论软链接。
软链接实际上就
是一个指向文件的指针。
你将会发现这种软链接使用起来非常方便。
下面我们就解释一下符号链接是怎么回事。
比方说在/usr/local/admin/sales目录下有一个
含有销售信息的文件,销售部门的每一个人都想看这份文件。
你可以在每一位用户的$HOME
目录下建立一个指向该文件的链接,而不是在每个目录下拷贝一份。
这样当需要更改这一文
件时,只需改变一个源文件即可。
每个销售$HOME目录中的链接可以起任何名字,不必和源
文件一致。
如果有很多子目录,而进入这些目录很费时间,在这种情况下链接也非常有用。
可以针
对$HOME目录下的一个很深的子目录创建一个链接。
还有,比如在安装一个应用程序时,它
的日志被保存到/usr/opt/app/log目录下,如果想把它保存在另外一个你认为更方便目录下,可
以建立一个指向该目录的链接。
ln[-s]source_pathtarget_path
其中的路径可以是目录也可以是文件。
假如系统中有40个销售和管理用户,销售用户使用一个销售应用程序,而管理用户使用
一个管理应用程序。
我作为系统管理员该怎么做呢?
首先删除它们各自$HOME目录下的所
有.profile文件。
然后在/usr/local/menus/目录下创建两个profile文件,一个是sales.profile,一
个是admin.profile,它们分别为销售和管理人员提供了所需的环境,并引导他们进入相应的应
用程序。
现在我在所有销售人员的$HOME目录下分别创建一个指向sales.profile的链接,在所
有管理人员的$HOME目录下分别创建一个指向admin.profile文件的链接。
注意,不必在上面
命令格式中的target_path端创建相应文件,如果不存在这样一个文件,ln命令会自动创建该文件。
下面就是我对销售人员matty所做的操作。
下面是另外一个例子。
我所管理的系统中有一个网络监视器,它将日志写在/usr/opt/
monitor/regstar目录下,但其他所有的日志都保存在/var/adm/logs目录下,这样只需在该目录
下建立一个指向原有文件的链接就可以在一个地方看所有的日志了,而不必花费很多时间分
别进入各个相应的目录。
下面就是所用的链接命令:
$ln-s/usr/opt/monitor/regstar/reg.log/var/adm/logs/monitor.log
在创建链接的时候,不要忘记在原有
目录设置执行权限。
链接一旦创建,链接目录将具有权限777或rwxrwxrwx,但是实际的原
有文件的权限并未改变。
在新安装的系统上,通常要进行这样的操作,在/var目录中创建一个指向/tmp目录的链接,
因为有些应用程序认为存在/var/tmp目录(然而它实际上并不存在),有些应用程序在该目录中
保存一些临时文件。
为了使所有的临时文件都放在一个地方,可以使用ln命令在/var目录下建
立一个指向/tmp目录的链接。
ln-s/tmp/var/tmp
002
Find命令的一般形式为:
findpathname-options[-print-exec-ok]
让我们来看看该命令的参数:
pathnamefind命令所查找的目录路径。
例如用.来表示当前目录,用/来表示系统根目录。
-printfind命令将匹配的文件输出到标准输出。
-execfind命令对匹配的文件执行该参数所给出的shell命令。
相应命令的形式为'
comm-
and'
{}\;
注意{}和\;
之间的空格。
-ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,
在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
find命令有很多选项或表达式,每一个选项前面跟随一个横杠-。
让我们先来看一下该命
令的主要选项,然后再给出一些例子。
-name按照文件名查找文件。
-perm按照文件权限来查找文件。
-prune使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了-depth
选项,那么-prune选项将被find命令忽略。
-user按照文件属主来查找文件。
-group按照文件所属的组来查找文件。
-mtime-n+n按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n
表示文件更改时间距现在n天以前。
Find命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项。
-nogroup查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newerfile1!
file2查找更改时间比文件file1新但比文件file2旧的文件。
-type查找某一类型的文件,诸如:
b-块设备文件。
d-目录。
c-字符设备文件。
p-管道文件。
l-符号链接文件。
f-普通文件。
-sizen[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
-fstype
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount在查找文件时不跨越文件系统mount点。
-follow如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,
使用~作为'
pathname参数,波浪号~代表了你的$HOME目录。
$find~-name"
*.txt"
-print
想要在当前目录及子目录中查找所有的‘*.txt’文件,可以用:
$find.-name"
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
[A-Z]*"
想要在/etc目录中查找文件名以host开头的文件,可以用:
$find/etc-name"
host*"
想要查找$HOME目录中的文件,可以用:
$find~-name"
*"
-pri或find.-print
nt
要想让系统高负荷运行,就从根目录开始查找所有的文件。
如果希望在系统管理员那里
保留一个好印象的话,最好在这么做之前考虑清楚!
$find/-name"
*"
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是*.txt的文
件,下面的命令就能够返回名为ax37.txt的文件:
$find.-name"
[a-z][a-z][0--9][0--9].txt"
如果希望按照文件权限模式来查找文件的话,可以采用-perm选项。
你可能需要找到所有
用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。
在使用这一选
项的时候,最好使用八进制的权限表示法。
为了在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用
户可以读、执行的文件,可以用:
$find.-perm755-print
如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们
可以使用find命令的-perm选项。
在八进制数字前面要加一个横杠-。
在下面的命令中-perm代
表按照文件权限查找,而‘007’和你在chmod命令的绝对模式中所采用的表示法完全相同。
$find.-perm-007-print
2.1.3忽略某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,
那么可以使用-prune选项来指出需要忽略的目录。
在使用-prune选项时要当心,因为如果你同
时使用了-depth选项,那么-prune选项就会被find命令忽略。
如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$find/apps-name"
/apps/bin"
-prune-o-print
2.1.4使用user和nouser选项
如果希望按照文件属主查找文件,可以给出相应的用户名。
例如,在$HOME目录中查找
文件属主为dave的文件,可以用:
$find~-userdave-print
在/etc目录下查找文件属主为uucp的文件:
$find/etc-useruucp-print
为了查找属主帐户已经被删除的文件,可以使用-nouser选项。
这样就能够找到那些属主
在/etc/passwd文件中没有有效帐户的文件。
在使用-nouser选项时,不必给出用户名;
find命令
能够为你完成相应的工作。
例如,希望在/home目录下查找所有的这类文件,可以用:
$find/home-nouser-print
2.1.5使用group和nogroup选项
就像user和nouser选项一样,针对文件所属于的用户组,find命令也具有同样的选项,为
了在/apps目录下查找属于accts用户组的文件,可以用:
$find/apps-groupaccts-print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。
下面的find命令从文件
系统的根目录处查找这样的文件
$fine/-nogroup-print
2.1.6按照更改时间查找文件
如果希望按照更改时间来查找文件,可以使用mtime选项。
如果系统突然没有可用空间了,
很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的
文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$find/-mtime-5-print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$find/var/adm-mtime+3-print
2.1.7查找比某个文件新或旧的文件
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选
项。
它的一般形式为:
newest_file_name!
oldest_file_name
其中,!
是逻辑非符号。
这里有两个文件,它们的更改时间大约相差两天。
age.awk4/18belts.awk4/20
下面给出的find命令能够查找更改时间比文件age.awk新但比文件belts.awk旧的文件:
find.-newerage.awk!
-newerbelts.awk-execls-l{}\;
如果想使用find命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成
的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。
为了解决
这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。
这可以用touch
命令来实现。
假设现在的时间是23:
40,希望查找更改时间在两个小时以内的文件,可以首先创建这样
一个文件:
一个符合要求的文件已经被创建;
这里我们假设今天是五月四日,而该文件的更改时间
是21:
40,比现在刚好早两个小时。
现在我们就可以使用find命令的-newer选项在当前目录下查找所有更改时间在两个小时以
内的文件:
$find.-newerdstamp-print
2.1.8使用type选项
UNIX或LINUX系统中有若干种不同的文件类型,这部分内容我们在前面的章节已经做了
介绍,这里就不再赘述。
如果要在/etc目录下查找所有的目录,可以用:
$find/etc-typed-print
为了在当前目录下查找除目录以外的所有类型的文件,可以用:
$find.!
-typed-print
为了在/etc目录下查找所有的符号链接文件,可以用:
$find/etc-typel-print
2.1.9使用size选项
可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可
以用字节来计量。
以字节计量文件长度的表达形式为Nc;
以块计量文件长度只用数字表示即
就我个人而言,我总是使用以字节计的方式,在按照文件长度查找文件时,大多数人都
喜欢使用这种以字节表示的文件长度,而不用块的数目来表示,除非是在查看文件系统的大
小,因为这时使用块来计量更容易转换。
为了在当前目录下查找文件长度大于1M字节的文件,可以用:
$find.-size+1000000c-print
为了在/home/apache目录下查找文件长度恰好为100字节的文件,可以用:
$find/home/apache-size100c-print
为了在当前目录下查找长度超过10块的文件(一块等于512字节),可以用:
$find.-size+10-print
2.1.10使用depth选项
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。
使用depth选项就
可以使find命令这样做。
这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,
希望首先备份所有的文件,其次再备份子目录中的文件。
在下面的例子中,find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
CON.FILE"
-depth-print
2.1.11使用mount选项
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
在下面的例子中,我们从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
*.XC"
-mount-print
2.1.13使用exec或ok来执行shell命令
当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用-exec选项。
一旦
find命令匹配到了相应的文件,就可以用-exec选项中的命令对其进行操作(在有些操作系统
中只允许-exec选项执行诸如ls或ls-l这样的命令)。
大多数用户使用这一选项是为了查找旧文
件并删除它们。
这里我强烈地建议你在真正执行rm命令删除文件之前,最好先用ls命令看一
下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令,然后是一对儿{},一个空格和一个\,最后是一个
分号。
为了使用exec选项,必须要同时使用print选项。
如果验证一下find命令,会发现该命令只
输出从当前路径起的相对路径及文件名。
为了用ls-l命令列出所匹配到的文件,可以把ls-l命令放在find命令的-exec选项中,例如:
~$find.-namefile2-execls-l{}\;
-rw-rw-r--1wangjianwangjian02009-08-1409:
08./file2
上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls-l
命令