权限管理 :chmod chown ln  top ps | service free netstat find

在Linux中般使用chmod命令来修改文件的属性。

利用 chmod 可以藉以控制文件如何被他人所调用。此命令所有使用者都可使用。

Linux chmod命令语法

Linux chmod命令语法

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
—help : 显示辅助说明
—version : 显示版本


二、Linux chmod命令使用示例


1)设置文件为所有人皆可读取

[linuxdaxue.com@/home/linuxdaxue.com]$chmod ugo+r file_new 
[linuxdaxue.com@/home/linuxdaxue.com]$ll file_new 
-rw-r--r-- 1 linuxdaxue.com linuxdaxue.com 0 Dec 31  2016 file_new

2)设置文件为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入

[linuxdaxue.com@/home/linuxdaxue.com]$chmod ug+w,o-w file_new 
[linuxdaxue.com@/home/linuxdaxue.com]$ll file_new 
-rw-rw-r-- 1 linuxdaxue.com linuxdaxue.com 0 Dec 31  2016 file_new

3)设置文件为只有该文件拥有者可以执行

[linuxdaxue.com@/home/linuxdaxue.com]$chmod u+x file_new 
[linuxdaxue.com@/home/linuxdaxue.com]$ll file_new 
---x------ 1 linuxdaxue.com linuxdaxue.com 0 Dec 31  2016 file_new

4)设置文件为所有人皆可写

[linuxdaxue.com@/home/linuxdaxue.com]$chmod a+w file_new 
[linuxdaxue.com@/home/linuxdaxue.com]$ll file_new 
--wx-w--w- 1 linuxdaxue.com linuxdaxue.com 0 Dec 31  2016 file_new

三、使用数字来表示权限


chmod abc file
a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1  若要rwx属性则4+2+1=7;若要rw-属性则4+2=6;若要r-x属性则4+1=5。r:代表可写 readw:代表可写 writex:代表是可执行 execution d:文件夹

-文件   (user的)rwx权限      (group的)rwx权限     (other非本人的)rwx权限     . 1 引用次数   yongpang用户人    shanren所在组  36 文件大小 5月  13 15:43 时间       qujinmiji.txt文件名

1)将文件权限设置为可所有人可读:

[linuxdaxue.com@/home/linuxdaxue.com]$chmod 444 file_new 
[linuxdaxue.com@/home/linuxdaxue.com]$ll file_new 
-r--r--r-- 1 linuxdaxue.com linuxdaxue.com 0 Dec 31  2016 file_new

linux中管道符“|”的作用就是将上一个的结果给到下一个

Linux chown(英文全拼:change owner

命令用于设置文件所有者和文件关联组的命令。

  • Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。 。
  • chown 需要超级用户 root 的权限才能执行此命令。
  • 只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用 chgrp 命令。
  • 使用权限 : root

语法

chown [-cfhvR] [--help] [--version] user[:group] file...

参数 :

  • user : 新的文件拥有者的使用者 ID
  • group : 新的文件拥有者的使用者组(group)
  • -c : 显示更改的部分的信息
  • -f : 忽略错误信息
  • -h :修复符号链接
  • -v : 显示详细的处理信息
  • -R : 处理指定目录以及其子目录下的所有文件
  • --help : 显示辅助说明
  • --version : 显示版本

实例

把 /var/run/httpd.pid 的所有者设置 root:

chown root /var/run/httpd.pid

将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :

chown runoob:runoobgroup file1.txt

将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:

chown -R runoob:runoobgroup *

把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:

chown :512 /home/runoob

ln是linux中一个非常重要命令

 

  • 功能:是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

  • 这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

  • 例如:ln -s /bin/less /usr/local/bin/less

  • -s 是代号(symbolic)的意思。 这 里有两点要注意:

  • 第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;

  • 第二,ln的链接又软链接 和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

  • 如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。 

 top命令

 

是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器



1.下面详细介绍它的使用方法。

top – 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si 
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers 
Swap: 192772k total, 0k used, 192772k free, 123988k cached 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd 
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top 
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init 
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 

01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下: Tasks: 29 total 进程总数 1 running 正在运行的进程数 28 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数 Cpu(s): 0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间占用CPU百分比 
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0% hi 0.0% si 最后两行为内存信息。内容如下: Mem: 191272k total 物理内存总量 173656k used 使用的物理内存总量 17616k free 空闲内存总量 22052k buffers 用作内核缓存的内存量 Swap: 192772k total 交换区总量 0k used 使用的交换区总量 192772k free 空闲交换区总量 123988k cached 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。 相应的内存再次被换出时可不必再对交换区写入。
进程信息区 

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。 
序号 列名 含义 
a PID 进程id 
b PPID 父进程id 
c RUSER Real user name 
d UID 进程所有者的用户id 
e USER 进程所有者的用户名 
f GROUP 进程所有者的组名 
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? 
h PR 优先级 
i NI nice值。负值表示高优先级,正值表示低优先级 
j P 最后使用的CPU,仅在多CPU环境下有意义 
k %CPU 上次更新到现在的CPU时间占用百分比 
l TIME 进程使用的CPU时间总计,单位秒 
m TIME+ 进程使用的CPU时间总计,单位1/100秒 
n %MEM 进程使用的物理内存百分比 
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES 
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA 
r CODE 可执行代码占用的物理内存大小,单位kb 
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb 
t SHR 共享内存大小,单位kb 
u nFLT 页面错误次数 
v nDRT 最后一次写入到现在,被修改过的页面数。 
w S 进程状态。 
D=不可中断的睡眠状态 
R=运行 
S=睡眠 
T=跟踪/停止 
Z=僵尸进程 
x COMMAND 命令名/命令行 
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 
z Flags 任务标志,参考 sched.h 
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。 
更改显示内容 
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。 
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。 
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。 


2.top命令使用 


显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. 
在Linux下使用。 
使用格式 
top [-] [d] [p] [q] [C] [S] [s] [n] 

参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程
c 显示整个命令行而不只是显示命令名
4.3其他
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

 

ps命令


    要对进程进行监测和控制,首先必须要 了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令 可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了.

1) ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u  以用户为主的格式来显示程序状况。
13)ps x  显示所有程序,不以终端机来区分。


最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。
例子:
1)查看当前系统进程的uid,pid,stat,pri, 以uid号排序.

ps -eo pid,stat,pri,uid –sort uid 


2)查看某用户总的内存使用量

ps -o user,%mem --user $user | awk '$2 == "'$user'" {sum +=$2}; END {print sum}'

3)固定用法

ps -ef    ps process status

 

|  管道符   前一个命令的结果 交给后一个命令执行 grep  过滤

ps -ef | grep 想要查询的进程
sshd 是deamon的意思 守护  ssh后台进程

Linux中service命令

service 服务名称 start
service 服务名称 stop
service 服务名称 restart

start是开启服务,stop是关闭服务,restart是重启服务

Linux free命令

Linux free命令用于显示内存状态。

free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

语法

free [-bkmotV][-s <间隔秒数>]

参数说明:

  • -b  以Byte为单位显示内存使用情况。

  • -k  以KB为单位显示内存使用情况。

  • -m  以MB为单位显示内存使用情况。

  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:

    B = bytes
    K = kilos
    M = megas
    G = gigas
    T = teras

  • -o  不显示缓冲区调节列。

  • -s<间隔秒数>  持续观察内存使用状况。

  • -t  显示内存总和列。

  • -V  显示版本信息。

实例

显示内存使用情况

# free //显示内存使用信息
total used free shared buffers cached
Mem: 254772 184568 70204 0 5692 89892
-/+ buffers/cache: 88984 165788
Swap: 524280 65116 459164

以总和的形式显示内存的使用信息

# free -t //以总和的形式查询内存的使用信息
total used free shared buffers cached
Mem: 254772 184868 69904 0 5936 89908
-/+ buffers/cache: 89024 165748
Swap: 524280 65116 459164
Total: 779052 249984 529068

周期性的查询内存使用信息

# free -s 10 //每10s 执行一次命令
total used free shared buffers cached
Mem: 254772 187628 67144 0 6140 89964
-/+ buffers/cache: 91524 163248
Swap: 524280 65116 459164

total used free shared buffers cached
Mem: 254772 187748 67024 0 6164 89940
-/+ buffers/cache: 91644 163128
Swap: 524280 65116 459164

Linux netstat命令

Linux netstat 命令用于显示网络状态。

利用 netstat 指令可让你得知整个 Linux 系统的网络情况。

语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数说明

  • -a或--all 显示所有连线中的Socket。

  • -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。

  • -c或--continuous 持续列出网络状态。

  • -C或--cache 显示路由器配置的快取信息。

  • -e或--extend 显示网络其他相关信息。

  • -F或--fib 显示路由缓存。

  • -g或--groups 显示多重广播功能群组组员名单。

  • -h或--help 在线帮助。

  • -i或--interfaces 显示网络界面信息表单。

  • -l或--listening 显示监控中的服务器的Socket。

  • -M或--masquerade 显示伪装的网络连线。

  • -n或--numeric 直接使用IP地址,而不通过域名服务器。

  • -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。

  • -o或--timers 显示计时器。

  • -p或--programs 显示正在使用Socket的程序识别码和程序名称。

  • -r或--route 显示Routing Table。

  • -s或--statistics 显示网络工作信息统计表。

  • -t或--tcp 显示TCP传输协议的连线状况。

  • -u或--udp 显示UDP传输协议的连线状况。

  • -v或--verbose 显示指令执行过程。

  • -V或--version 显示版本信息。

  • -w或--raw 显示RAW传输协议的连线状况。

  • -x或--unix 此参数的效果和指定"-A unix"参数相同。

  • --ip或--inet 此参数的效果和指定"-A inet"参数相同。

实例

显示详细的网络状况

# netstat -a

显示当前户籍UDP连接状况

# netstat -nu

显示UDP端口号的使用情况

# netstat -apu

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name  
udp    0   0 *:32768           *:*                   -          
udp    0   0 *:nfs            *:*                   -          
udp    0   0 *:641            *:*                   3006/rpc.statd   
udp    0   0 192.168.0.3:netbios-ns   *:*                   3537/nmbd      
udp    0   0 *:netbios-ns        *:*                   3537/nmbd      
udp    0   0 192.168.0.3:netbios-dgm   *:*                   3537/nmbd      
udp    0   0 *:netbios-dgm        *:*                   3537/nmbd      
udp    0   0 *:tftp           *:*                   3346/xinetd     
udp    0   0 *:999            *:*                   3366/rpc.rquotad  
udp    0   0 *:sunrpc          *:*                   2986/portmap    
udp    0   0 *:ipp            *:*                   6938/cupsd     
udp    0   0 *:1022           *:*                   3392/rpc.mountd   
udp    0   0 *:638            *:*                   3006/rpc.statd

显示网卡列表

# netstat -i
Kernel Interface table
Iface    MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0    1500  0  181864   0   0   0  141278   0   0   0 BMRU
lo    16436  0   3362   0   0   0   3362   0   0   0 LRU

显示组播组的关系

# netstat -g
IPv6/IPv4 Group Memberships
Interface    RefCnt Group
--------------- ------ ---------------------
lo       1   ALL-SYSTEMS.MCAST.NET
eth0      1   ALL-SYSTEMS.MCAST.NET
lo       1   ff02::1
eth0      1   ff02::1:ff0a:b0c
eth0      1   ff02::1

显示网络统计信息

# netstat -s
Ip:
  184695 total packets received
  0 forwarded
  0 incoming packets discarded
  184687 incoming packets delivered
  143917 requests sent out
  32 outgoing packets dropped
  30 dropped because of missing route
Icmp:
  676 ICMP messages received
  5 input ICMP message failed.
  ICMP input histogram:
    destination unreachable: 44
    echo requests: 287
    echo replies: 345
  304 ICMP messages sent
  0 ICMP messages failed
  ICMP output histogram:
    destination unreachable: 17
    echo replies: 287
Tcp:
  473 active connections openings
  28 passive connection openings
  4 failed connection attempts
  11 connection resets received
  1 connections established
  178253 segments received
  137936 segments send out
  29 segments retransmited
  0 bad segments received.
  336 resets sent
Udp:
  5714 packets received
  8 packets to unknown port received.
  0 packet receive errors
  5419 packets sent
TcpExt:
  1 resets received for embryonic SYN_RECV sockets
  ArpFilter: 0
  12 TCP sockets finished time wait in fast timer
  572 delayed acks sent
  3 delayed acks further delayed because of locked socket
  13766 packets directly queued to recvmsg prequeue.
  1101482 packets directly received from backlog
  19599861 packets directly received from prequeue
  46860 packets header predicted
  14541 packets header predicted and directly queued to user
  TCPPureAcks: 12259
  TCPHPAcks: 9119
  TCPRenoRecovery: 0
  TCPSackRecovery: 0
  TCPSACKReneging: 0
  TCPFACKReorder: 0
  TCPSACKReorder: 0
  TCPRenoReorder: 0
  TCPTSReorder: 0
  TCPFullUndo: 0
  TCPPartialUndo: 0
  TCPDSACKUndo: 0
  TCPLossUndo: 0
  TCPLoss: 0
  TCPLostRetransmit: 0
  TCPRenoFailures: 0
  TCPSackFailures: 0
  TCPLossFailures: 0
  TCPFastRetrans: 0
  TCPForwardRetrans: 0
  TCPSlowStartRetrans: 0
  TCPTimeouts: 29
  TCPRenoRecoveryFail: 0
  TCPSackRecoveryFail: 0
  TCPSchedulerFailed: 0
  TCPRcvCollapsed: 0
  TCPDSACKOldSent: 0
  TCPDSACKOfoSent: 0
  TCPDSACKRecv: 0
  TCPDSACKOfoRecv: 0
  TCPAbortOnSyn: 0
  TCPAbortOnData: 1
  TCPAbortOnClose: 0
  TCPAbortOnMemory: 0
  TCPAbortOnTimeout: 3
  TCPAbortOnLinger: 0
  TCPAbortFailed: 3
  TCPMemoryPressures: 0

显示监听的套接口

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State   
tcp    0   0 *:32769           *:*             LISTEN   
tcp    0   0 *:nfs            *:*             LISTEN   
tcp    0   0 *:644            *:*             LISTEN   
tcp    0   0 *:1002           *:*             LISTEN   
tcp    0   0 *:netbios-ssn        *:*             LISTEN   
tcp    0   0 *:sunrpc          *:*             LISTEN   
tcp    0   0 vm-dev:ipp         *:*             LISTEN   
tcp    0   0 *:telnet          *:*             LISTEN   
tcp    0   0 *:601            *:*             LISTEN   
tcp    0   0 *:microsoft-ds       *:*             LISTEN   
tcp    0   0 *:http           *:*             LISTEN   
tcp    0   0 *:ssh            *:*             LISTEN   
tcp    0   0 *:https           *:*             LISTEN   
udp    0   0 *:32768           *:*                   
udp    0   0 *:nfs            *:*                   
udp    0   0 *:641            *:*                   
udp    0   0 192.168.0.3:netbios-ns   *:*                   
udp    0   0 *:netbios-ns        *:*                   
udp    0   0 192.168.0.3:netbios-dgm   *:*                   
udp    0   0 *:netbios-dgm        *:*                   
udp    0   0 *:tftp           *:*                   
udp    0   0 *:999            *:*                   
udp    0   0 *:sunrpc          *:*                   
udp    0   0 *:ipp            *:*                   
udp    0   0 *:1022           *:*                   
udp    0   0 *:638            *:*                   
Active UNIX domain sockets (only servers)
Proto RefCnt Flags    Type    State     I-Node Path
unix 2   [ ACC ]   STREAM   LISTENING   10621 @/tmp/fam-root-
unix 2   [ ACC ]   STREAM   LISTENING   7096  /var/run/acpid.socket
unix 2   [ ACC ]   STREAM   LISTENING   9792  /tmp/.gdm_socket
unix 2   [ ACC ]   STREAM   LISTENING   9927  /tmp/.X11-unix/X0
unix 2   [ ACC ]   STREAM   LISTENING   10489 /tmp/ssh-lbUnUf4552/agent.4552
unix 2   [ ACC ]   STREAM   LISTENING   10558 /tmp/ksocket-root/kdeinit__0
unix 2   [ ACC ]   STREAM   LISTENING   10560 /tmp/ksocket-root/kdeinit-:0
unix 2   [ ACC ]   STREAM   LISTENING   10570 /tmp/.ICE-unix/dcop4664-1270815442
unix 2   [ ACC ]   STREAM   LISTENING   10843 /tmp/.ICE-unix/4735
unix 2   [ ACC ]   STREAM   LISTENING   10591 /tmp/ksocket-root/klauncherah3arc.slave-socket
unix 2   [ ACC ]   STREAM   LISTENING   7763  /var/run/iiim/.iiimp-unix/9010
unix 2   [ ACC ]   STREAM   LISTENING   11047 /tmp/orbit-root/linc-1291-0-1e92c8082411
unix 2   [ ACC ]   STREAM   LISTENING   11053 /tmp/orbit-root/linc-128e-0-dc070659cbb3
unix 2   [ ACC ]   STREAM   LISTENING   8020  /var/run/dbus/system_bus_socket
unix 2   [ ACC ]   STREAM   LISTENING   58927 /tmp/mcop-root/vm-dev-2c28-4beba75f
unix 2   [ ACC ]   STREAM   LISTENING   7860  /tmp/.font-unix/fs7100
unix 2   [ ACC ]   STREAM   LISTENING   7658  /dev/gpmctl
unix 2   [ ACC ]   STREAM   LISTENING   10498 @/tmp/dbus-s2MLJGO5Ci

lsof命令是列出当前系统打开文件

   lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。直接输入lsof部分输出如下:

COMMAND  PID  USER   FD  TYPE  DEVICE  SIZE/OFF    NODE NAME
bash    2811  devl  cwd   DIR   253,1      4096   81927 /home/devl
bash    2811  devl  rtd   DIR   253,1      4096       2 /
bash    2811  devl  txt   REG   253,1    964608  327823 /usr/bin/bash
bash    2811  devl  mem   REG   253,1   2151672  328342 /usr/lib64/libc-2.17.so
bash    2811  devl  mem   REG   253,1     19288  328814 /usr/lib64/libdl-2.17.so
bash    2811  devl  mem   REG   253,1    174576  328674 /usr/lib64/libtinfo.so.5.9
bash    2811  devl  mem   REG   253,1    163400  328378 /usr/lib64/ld-2.17.so
bash    2811  devl    0u  CHR   136,0       0t0       3 /dev/pts/0
bash    2811  devl    1u  CHR   136,0       0t0       3 /dev/pts/0
bash    2811  devl    2u  CHR   136,0       0t0       3 /dev/pts/0
bash    2811  devl  255u  CHR   136,0       0t0       3 /dev/pts/0
bash    6931  devl  cwd   DIR   253,1      4096   81927 /home/devl
bash    6931  devl  rtd   DIR   253,1      4096       2 /
bash    6931  devl  txt   REG   253,1    964608  327823 /usr/bin/bash

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

  1. COMMAND:进程的名称
  2. PID:进程标识符
  3. USER:进程所有者
  4. FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等
  5. TYPE:文件类型,如DIR、REG等
  6. DEVICE:指定磁盘的名称
  7. SIZE:文件的大小
  8. NODE:索引节点(文件在磁盘上的标识)
  9. NAME:打开文件的确切名称

FD列中的文件描述符cwd值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt类型的文件是程序代码,如应用程序二进制文件本身或共享库

常用命令

lsof filename 查看打开filename文件的所有进程
lsof -p procid 查看进程ID为procid的进程打开的文件列表
lsof -c command 查看进程名称为command的进程打开的文件列表

使用场景举例

同事今天请假了,但负责的webserver服务出现了问题,老板让你看一下webserver服务的日志,但你不知道webserver服务的日志文件路径,配置文件太复杂你不太懂,这时你可以执行以下命令查看日志文件路径。

[devl@xungen ~]$ lsof -c webserver | grep -e 'log$'
webserver  10124  devl  4u  REG 253,1  8814787  109523 /home/devl/application/webserver/log/webserver.00.log

新来的同事误删除了的webserver服务的日志文件,现在线上环境有一个问题,需要查看webserver日志,老板让紧急处理一下,这时你想到lsof命令。是的,你可以执行命令查看日志文件文件句柄,根据句柄得到日志文件在webserver进程中的映射路径(/proc/进程ID/fd/句柄)。

[devl@xungen ~]$ lsof -c webserver | grep -e 'log$'
webserver  10124  devl  4u  REG 253,1  8814787  109523 /home/devl/application/webserver/log/webserver.00.log

命令执行结果显示webserver服务的进程ID为10124,日志文件句柄为4u(即4号句柄),所以/proc/10124/fd/4就是日志文件在webserver进程中的映射路径,这时你用tail命令就可查看日志文件了。

[devl@xungen ~]$ tail -f /proc/10124/fd/4
[20190602 09:51:04|INF] start route ping process success
[20190602 09:51:04|INF] ping host[127.0.0.1:8888][3951] success
[20190602 09:51:09|INF] check session success
[20190602 09:51:09|INF] start route ping process success
[20190602 09:51:09|INF] ping host[127.0.0.1:8888][3596] success
[20190602 09:51:14|INF] start route ping process success
[20190602 09:51:14|INF] ping host[127.0.0.1:8888][3390] success
[20190602 09:51:19|INF] start route ping process success
[20190602 09:51:19|INF] ping host[127.0.0.1:8888][3383] success
[20190602 09:51:19|INF] check session success

当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。 在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234中包含的是 PID为1234的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。 当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。


find命令是查找

当你知道是哪个文件,然后可以用ls查找子文件;但是当不知道是什么盘符,哪个文件夹时就可以使用find命令查找。
用法:find / -name httpd.conf,下面为一些其他用法,
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
find /etc -name passwd #查找 /etc 目录下 名字为 passwd 的文件

find /etc -size +2M #查找 /etc 目录下 大小大于2兆的文件 M要大写

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值