当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪linux命令实例教程之lsof命令      本节内容: linux下的lsof命令的用法。 在linux操作系统中,lsof(list open files)是一个列出当前系统打开文件的工具。 在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常.........
    ▪linux命令实例教程之find命令参数      本节内容: linux下find 命令的常用参数。 在linux操作系统中,find命令用于查找指定条件的文件,find一些常用参数的一些常用实例和一些具体用法和注意事项。 1.使用name选项: 文件名选项.........
    ▪linux命令实例教程之chmod命令      本节内容: chmod 命令的用法 在linux操作系统中,chmod命令用于改变linux系统文件或目录的访问权限。 用它控制文件或目录的访问权限。 该命令有两种用法。一种是包含字母和操作符表达式的.........

[1]linux命令实例教程之lsof命令
    来源: 互联网  发布时间: 2013-12-24

本节内容:
linux下的lsof命令的用法。

在linux操作系统中,lsof(list open files)是一个列出当前系统打开文件的工具。

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。

因为,应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

下面就开始这个linux命令的学习吧,在查找某些进程占用问题时,可以使用lsof命令列出当前系统打开的文件,很方便的。

1.命令格式:
lsof [参数][文件]

2.命令功能:
用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要root用户执行。
lsof打开的文件可以是:
 

1.普通文件
2.目录
3.网络文件系统的文件
4.字符或设备文件
5.(函数)共享库
6.管道,命名管道
7.符号链接
8.网络文件(例如:NFS file、网络socket,unix域名socket)
9.还有其它类型的文件,等等

3.命令参数:
 

-a 列出打开文件存在的进程
-c<进程名> 列出指定进程所打开的文件
-g  列出GID号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录>  列出目录下被打开的文件
+D<目录>  递归列出目录下被打开的文件
-n<目录>  列出使用NFS的文件
-i<条件>  列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> 列出指定进程号所打开的文件
-u  列出UID号进程详情
-h 显示帮助信息
-v 显示版本信息

4.使用实例:
实例1:无任何参数
 

代码示例:
命令:
lsof
输出:
[root@xxx ~]# lsof
COMMAND     PID USER   FD      TYPE             DEVICE     SIZE       NODE NAME
init          1 root  cwd       DIR                8,2     4096          2 /
init          1 root  rtd       DIR                8,2     4096          2 /
init          1 root  txt       REG                8,2    43496    6121706 /sbin/init
init          1 root  mem       REG                8,2   143600    7823908 /lib64/ld-2.5.so
init          1 root  mem       REG                8,2  1722304    7823915 /lib64/libc-2.5.so
init          1 root  mem       REG                8,2    23360    7823919 /lib64/libdl-2.5.so
init          1 root  mem       REG                8,2    95464    7824116 /lib64/libselinux.so.1
init          1 root  mem       REG                8,2   247496    7823947 /lib64/libsepol.so.1
init          1 root   10u     FIFO               0,17                1233 /dev/initctl
migration     2 root  cwd       DIR                8,2     4096          2 /
migration     2 root  rtd       DIR                8,2     4096          2 /
migration     2 root  txt   unknown                                        /proc/2/exe
ksoftirqd     3 root  cwd       DIR                8,2     4096          2 /
ksoftirqd     3 root  rtd       DIR                8,2     4096          2 /
ksoftirqd     3 root  txt   unknown                                        /proc/3/exe
migration     4 root  cwd       DIR                8,2     4096          2 /
migration     4 root  rtd       DIR                8,2     4096          2 /
migration     4 root  txt   unknown                                        /proc/4/exe
ksoftirqd     5 root  cwd       DIR                8,2     4096          2 /
ksoftirqd     5 root  rtd       DIR                8,2     4096          2 /
ksoftirqd     5 root  txt   unknown                                        /proc/5/exe
events/0      6 root  cwd       DIR                8,2     4096          2 /
events/0      6 root  rtd       DIR                8,2     4096          2 /
events/0      6 root  txt   unknown                                        /proc/6/exe
events/1      7 root  cwd       DIR                8,2     4096          2 /

说明:
lsof输出各列信息的意义如下:
 

COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
 

(1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
(2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
(3)lnn:library references (AIX);
(4)er:FD information error (see NAME column);
(5)jld:jail directory (FreeBSD);
(6)ltx:shared library text (code and data);
(7)mxx :hex memory-mapped type number xx.
(8)m86:DOS Merge mapped file;
(9)mem:memory-mapped file;
(10)mmap:memory-mapped device;
(11)pd:parent directory;
(12)rtd:root directory;
(13)tr:kernel trace file (OpenBSD);
(14)v86  VP/ix mapped file;
(15)0:表示标准输出
(16)1:表示标准输入
(17)2:表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
(1)u:表示该文件被打开并处于读取/写入模式
(2)r:表示该文件被打开并处于只读模式
(3)w:表示该文件被打开并处于
(4)空格:表示该文件的状态模式为unknow,且没有锁定
(5)-:表示该文件的状态模式为unknow,且被锁定
同时在文件状态模式后面,还跟着相关的锁
(1)N:for a Solaris NFS lock of unknown type;
(2)r:for read lock on part of the file;
(3)R:for a read lock on the entire file;
(4)w:for a write lock on part of the file;(文件的部分写锁)
(5)W:for a write lock on the entire file;(整个文件的写锁)
(6)u:for a read and write lock of any length;
(7)U:for a lock of unknown type;
(8)x:for an SCO OpenServer Xenix lock on part      of the file;
(9)X:for an SCO OpenServer Xenix lock on the      entire file;
(10)space:if there is no lock.
TYPE:文件类型,如DIR、REG等,常见的文件类型
(1)DIR:表示目录
(2)CHR:表示字符类型
(3)BLK:块设备类型
(4)UNIX: UNIX 域套接字
(5)FIFO:先进先出 (FIFO) 队列
(6)IPv4:网际协议 (IP) 套接字
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

实例2:查看谁正在使用某个文件,也就是说查找某个文件相关的进程
 

代码示例:
命令:
lsof /bin/bash
输出:
[root@xxx ~]# lsof /bin/bash
COMMAND   PID USER  FD   TYPE DEVICE   SIZE    NODE NAME
bash    24159 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24909 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24941 root txt    REG    8,2 801528 5368780 /bin/bash
[root@xxx ~]#

说明:

实例3:递归查看某个目录的文件信息
 

代码示例:
命令:
lsof test/test3
输出:
[root@xxx ~]# cd /opt/soft/
[root@xxx soft]# lsof test/test3
COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME
bash    24941 root  cwd    DIR    8,2 4096 2258872 test/test3
vi      24976 root  cwd    DIR    8,2 4096 2258872 test/test3
[root@xxx soft]#

说明:
使用了+D,对应目录下的所有子目录和文件都会被列出

实例4:不使用+D选项,遍历查看某个目录的所有文件信息的方法
 

代码示例:
命令:
 lsof |grep 'test/test3'
输出:
[root@xxx soft]# lsof |grep 'test/test3'
bash      24941 root  cwd       DIR                8,2     4096    2258872 /opt/soft/test/test3
vi        24976 root  cwd       DIR                8,2     4096    2258872 /opt/soft/test/test3
vi        24976 root    4u      REG                8,2    12288    2258882 /opt/soft/test/test3/.log2013.log.swp
[root@xxx soft]#

实例5:列出某个用户打开的文件信息
命令:
lsof -u username
说明:
-u 选项,u其实是user的缩写

实例6:列出某个程序进程所打开的文件信息
命令:
lsof -c mysql
说明:
 -c 选项将会列出所有以mysql这个进程开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符了

实例7:列出多个进程多个打开的文件信息
命令:
lsof -c mysql -c apache

实例8:列出某个用户以及某个进程所打开的文件信息
命令:
lsof  -u test -c mysql
说明:
用户与进程可相关,也可以不相关

实例9:列出除了某个用户外的被打开的文件信息
命令:
lsof -u ^root
说明:
^这个符号在用户名之前,将会把是root用户打开的进程不让显示

实例10:通过某个进程号显示该进行打开的文件
命令:
lsof -p 1

实例11:列出多个进程号对应的文件信息
命令:
lsof -p 1,2,3

实例12:列出除了某个进程号,其他进程号所打开的文件信息
命令:
lsof -p ^1

实例13:列出所有的网络连接
命令:
lsof -i

实例14:列出所有tcp 网络连接信息
命令:
lsof -i tcp

实例15:列出所有udp网络连接信息
命令:
lsof -i udp

实例16:列出谁在使用某个端口
命令:
lsof -i :3306

实例17:列出谁在使用某个特定的udp端口
命令:
lsof -i udp:55
或者:特定的tcp端口
命令:
lsof -i tcp:80

实例18:列出某个用户的所有活跃的网络端口
命令:
lsof -a -u test -i

实例19:列出所有网络文件系统
命令:
lsof -N

实例20:域名socket文件
命令:
lsof -u

实例21:某个用户组所打开的文件信息
命令:
lsof -g 5555

实例22:根据文件描述列出对应的文件信息
命令:
lsof -d description(like 2)
例如:lsof  -d  txt
例如:lsof  -d  1
例如:lsof  -d  2
说明:
0表示标准输入,1表示标准输出,2表示标准错误,从而可知:所以大多数应用程序所打开的文件的 FD 都是从 3 开始

实例23:根据文件描述范围列出文件信息
命令:
lsof -d 2-3

实例24:列出COMMAND列中包含字符串" sshd",且文件描符的类型为txt的文件信息
 

代码示例:
命令:
lsof -c sshd -a -d txt
输出:
[root@xxx soft]# lsof -c sshd -a -d txt
COMMAND   PID USER  FD   TYPE DEVICE   SIZE    NODE NAME
sshd     2756 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24155 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24905 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24937 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
[root@xxx soft]#
[root@xxx soft]#

实例25:列出被进程号为1234的进程所打开的所有IPV4 network files
命令:
lsof -i 4 -a -p 1234

实例26:列出目前连接主机peida.linux上端口为:20,21,22,25,53,80相关的所有文件信息,且每隔3秒不断的执行lsof指令
命令:
lsof -i @peida.linux:20,21,22,25,53,80  -r  3

>>> 查看更多 linux命令实例教程 <<<


    
[2]linux命令实例教程之find命令参数
    来源: 互联网  发布时间: 2013-12-24

本节内容:
linux下find 命令的常用参数。

在linux操作系统中,find命令用于查找指定条件的文件,find一些常用参数的一些常用实例和一些具体用法和注意事项。

1.使用name选项:
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。  可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。  不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.log的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
 

代码示例:
find ~ -name "*.log" -print 

想要在当前目录及子目录中查找所有的‘ *.log‘文件,可以用:
 

代码示例:
find . -name "*.log" -print 

想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用: 
 

代码示例:
find . -name "[A-Z]*" -print 

想要在/etc目录中查找文件名以host开头的文件,可以用: 
 

代码示例:
find /etc -name "host*" -print 

想要查找$HOME目录中的文件,可以用: 
 

代码示例:
find ~ -name "*" -print 或find . -print 

要想让系统高负荷运行,就从根目录开始查找所有的文件。 
 

代码示例:
find / -name "*" -print 

如果想在当前目录查找文件名以一个个小写字母开头,最后是4到9加上.log结束的文件: 
 

代码示例:
命令:
find . -name "[a-z]*[4-9].log" -print
输出:
[root@xxx test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root   4096 10-27 01:58 scf
drwxrwxr-x 2 root root   4096 11-13 06:08 test3
drwxrwxr-x 2 root root   4096 11-13 05:50 test4
[root@xxx test]# find . -name "[a-z]*[4-9].log" -print
./log2014.log
./log2015.log
./test4/log2014.log
[root@xxx test]#

2.用perm选项:
按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。 
如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用: 
 

代码示例:
[root@xxx test]# find . -perm 755 -print
.
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
[root@xxx test]#
 

还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-005相当于555,
 

代码示例:
命令:
find . -perm -005
输出:
[root@xxx test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root   4096 10-27 01:58 scf
drwxrwxr-x 2 root root   4096 11-13 06:08 test3
drwxrwxr-x 2 root root   4096 11-13 05:50 test4
[root@xxx test]# find . -perm -005
.
./test4
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
./test3
[root@xxx test]#

3.忽略某个目录:
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。如果希望在test目录下查找文件,但不希望在test/test3目录下查找,可以用: 
 

代码示例:
命令:
find test -path "test/test3" -prune -o -print
输出:
[root@xxx soft]# find test -path "test/test3" -prune -o -print
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@xxx soft]#

4.使用find查找文件的时候怎么避开某个文件目录:
实例1:在test 目录下查找不在test4子目录之内的所有文件
 

代码示例:
命令:
find test -path "test/test4" -prune -o -print
输出:
[root@xxx soft]# find test
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@xxx soft]# find test -path "test/test4" -prune -o -print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@xxx soft]#
 

说明:
find [-path ..] [expression]
在路径列表的后面的是表达式
-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果
-path "test" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "test" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为:
 

if -path "test" then 
-prune 
else 
-print 

实例2:避开多个文件夹:
 

代码示例:
命令:
find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
输出:
[root@xxx soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@xxx soft]#
 

说明:
圆括号表示表达式的结合。  \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。 

实例3:查找某一确定文件,-name等选项加在-o 之后
 

代码示例:
命令:
find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
输出:
[root@xxx soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
test/log2014.log
test/log2015.log
test/log2013.log
test/log2012.log
[root@xxx soft]#

5.使用user和nouser选项:
按文件属主查找文件:

实例1:在$HOME目录中查找文件属主为peida的文件
 

代码示例:
命令:
find ~ -user peida -print 

实例2:在/etc目录下查找文件属主为peida的文件:
 

代码示例:
命令:
find /etc -user peida -print 
说明:

实例3:为了查找属主帐户已经被删除的文件,可以使用-nouser选项。在/home目录下查找所有的这类文件
 

代码示例:
命令:
find /home -nouser -print

说明:
这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。

6.使用group和nogroup选项:
就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用: 
find /apps -group gem -print 
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件:
find / -nogroup-print

7.按照更改时间或访问时间等查找文件:
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。 
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
find /var/adm -mtime +3 -print

8.查找比某个文件新或旧的文件:
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。
它的一般形式为: 
newest_file_name ! oldest_file_name 
其中,!是逻辑非符号。 

实例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件
 

代码示例:
命令:
find -newer log2012.log ! -newer log2017.log
输出:
[root@xxx test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log
-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log
-rw-r--r-- 1 root root      0 11-16 14:43 log2017.log
drwxr-xr-x 6 root root   4096 10-27 01:58 scf
drwxrwxr-x 2 root root   4096 11-13 06:08 test3
drwxrwxr-x 2 root root   4096 11-13 05:50 test4
[root@xxx test]# find -newer log2012.log ! -newer log2017.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@xxx test]#

实例2:查找更改时间在比log2012.log文件新的文件 
 

代码示例:
命令:
find . -newer log2012.log -print
输出:
[root@xxx test]# find -newer log2012.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@xxx test]#
 

9.使用type选项:
实例1:在/etc目录下查找所有的目录 
 

代码示例:
命令:
find /etc -type d -print 

实例2:在当前目录下查找除目录以外的所有类型的文件 
 

代码示例:
命令:
find . ! -type d -print 

实例3:在/etc目录下查找所有的符号链接文件
 

代码示例:
命令:
find /etc -type l -print

10.使用size选项:
可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。 
在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。 

实例1:在当前目录下查找文件长度大于1 M字节的文件 
 

代码示例:
命令:
find . -size +1000000c -print

实例2:在/home/apache目录下查找文件长度恰好为100字节的文件: 
 

代码示例:
命令:
find /home/apache -size 100c -print 

实例3:在当前目录下查找长度超过10块的文件(一块等于512字节)
 

代码示例:
命令:
find . -size +10 -print

11.使用depth选项:
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 

实例1:find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。  
 

代码示例:
命令:
find / -name "CON.FILE" -depth -print
 

说明:
它将首先匹配所有的文件然后再进入子目录中查找

12.使用mount选项:
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
实例1:从当前目录开始查找位于本文件系统中文件名以XC结尾的文件 
 

代码示例:
命令:
find . -name "*.XC" -mount -print

>>> 查看更多 linux命令实例教程 <<<


    
[3]linux命令实例教程之chmod命令
    来源: 互联网  发布时间: 2013-12-24

本节内容:
chmod 命令的用法

在linux操作系统中,chmod命令用于改变linux系统文件或目录的访问权限。

用它控制文件或目录的访问权限。

该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。

  有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。

  每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。

例如:
 

代码示例:
命令:
ls -al
输出:
[root@xxx test]# ll -al
总计 316lrwxrwxrwx 1 root root     11 11-22 06:58 linklog.log -> log2012.log
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log
-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log
-rw-r--r-- 1 root root      0 11-16 14:43 log2017.log
 

我们以log2012.log为例:
-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log
第一列共有10个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。从第二个字符开始到第十个共9个字符,3个字符一组,分别表示了3组用户对文件或者目录的权限。权限字符用横线代表空许可,r代表只读,w代表写,x代表可执行。
例如:
  - rw- r-- r--
  表示log2012.log是一个普通文件;log2012.log的属主有读写权限;与log2012.log属主同组的用户只有读权限;其他用户也只有读权限。

确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

下面就开始详细介绍下这个linux命令的用法,希望对大家理解与掌握chmod命令,有一定的帮助吧。

chmod命令详细情况如下。
1. 命令格式:
chmod [-cfvR] [--help] [--version] mode file  

2. 命令功能:
用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。

3. 命令参数:
必要参数:
 

-c 当发生改变时,报告处理信息
-f 错误信息不输出
-R 处理指定目录以及其子目录下的所有文件
-v 运行时显示详细处理信息

选择参数:
 

--reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限
--version 显示版本信息
<权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限
<权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限
<权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值
 

权限范围:
 

u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

权限代号:
 

r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限
 

该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
  1). 文字设定法:
   chmod [who] [+ | - | =] [mode] 文件名
  2). 数字设定法
  我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
  例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
  数字设定法的一般形式为:
   chmod [mode] 文件名
数字与字符对应关系如下:
 

r=4,w=2,x=1
若要rwx属性则4+2+1=7
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

4. 使用实例:
实例1:增加文件所有用户组可执行权限
 

代码示例:
命令:
chmod a+x log2012.log
输出:
[root@xxx test]# ls -al log2012.log
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
[root@xxx test]# chmod a+x log2012.log
[root@xxx test]# ls -al log2012.log
-rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log
[root@xxx test]#
 

说明:
即设定文件log2012.log的属性为:文件属主(u) 增加执行权限;与文件属主同组用户(g) 增加执行权限;其他用户(o) 增加执行权限。
 
实例2:同时修改不同用户权限
 

代码示例:
命令:
chmod ug+w,o-x log2012.log
输出:
[root@xxx test]# ls -al log2012.log
-rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log
[root@xxx test]# chmod ug+w,o-x log2012.log
[root@xxx test]# ls -al log2012.log
-rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log

说明:
  即设定文件text的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限
实例3:删除文件权限
 

代码示例:
命令:
chmod a-x log2012.log
输出:
[root@xxx test]# ls -al log2012.log
-rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log
[root@xxx test]# chmod a-x log2012.log
[root@xxx test]# ls -al log2012.log
-rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log
 

说明:
  删除所有用户的可执行权限
 
实例4:使用“=”设置权限
 

代码示例:
命令:
chmod u=x log2012.log
输出:
[root@xxx test]# ls -al log2012.log
-rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log
[root@xxx test]# chmod u=x log2012.log
[root@xxx test]# ls -al log2012.log
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
 

说明:
撤销原来所有的权限,然后使拥有者具有可读权限

实例5:对一个目录及其子目录所有文件添加权限
 

代码示例:
命令:
chmod -R u+x test4
输出:
[root@xxx test]# cd test4
[root@xxx test4]# ls -al
总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .
drwxr-xr-x 5 root root   4096 11-22 06:58 ..
-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log
-rw-r--r-- 1 root root     61 11-12 22:54 log2013.log
-rw-r--r-- 1 root root      0 11-12 22:54 log2014.log
[root@xxx test4]# cd ..
[root@xxx test]# chmod -R u+x test4
[root@xxx test]# cd test4
[root@xxx test4]# ls -al
总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .
drwxr-xr-x 5 root root   4096 11-22 06:58 ..
-rwxr--r-- 1 root root 302108 11-12 22:54 log2012.log
-rwxr--r-- 1 root root     61 11-12 22:54 log2013.log
-rwxr--r-- 1 root root      0 11-12 22:54 log2014.log
 

说明:
递归地给test4目录下所有文件和子目录的属主分配权限

其他一些实例:
1).
命令:
chmod 751 file  
说明:
给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

2).
命令:
chmod u=rwx,g=rx,o=x file
说明:
上例的另一种形式

3).
命令
chmod =r file
说明:                    
为所有用户分配读权限

4).
命令:
chmod 444 file
说明:
    同上例
5).
命令:
chmod a-wx,a+r   file
说明:
同上例

>>> 查看更多 linux命令实例教程 <<<


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3