linux 常见命令 lsof,ps,ln...

linux 常用命令

[TOC]

lsof

可以列出被进程所打开的文件的信息。被打开的文件可以是

1.普通的文件
2.目录抽象为特殊文件
3.网络文件系统的文件,抽象为文件
4.字符设备文件在linux抽象为文件
5.(函数)共享库
6.管道,命名管道
7.符号链接
8.底层的socket字流,网络socket,unix域名socket
9.在linux里面,很多东西都抽象为文件,提供了统一的访问接口

# 文件查看
lsof 文件名
# 文件夹查看
lsof +D 目录名

# 查看mysql程序打开的文件
lsof -c mysql

# 列出所有网络连接
lsof -i
lsof -i tcp

# 列出占用tcp:80端口的c程序
lsof -i tcp:80

ls

>ls -al
total 124

#属性:文件数:用户名:组别:size:创建时间:文件名
drwx------ 12 root root  4096 Apr 15 14:46 .
drwxr-xr-x 25 root root  4096 Apr 15 15:08 ..
-rw-r--r--  1 root root 32598 Apr 15 15:08 .bash_history
-rw-r--r--  1 root root   653 Jan  1 22:54 .bashrc

属性第一个字符:

  • “d”目录direction
  • “l”符号链接link
  • “c”字符专门设备文件
  • “b”块专门设备文件 block
  • “p”先进先出
  • “s”套接字socket

rwx=0x111,二进制表示

  • r: read
  • w: write
  • x: excute
    9位权限,每三位分别是:user:group:other

ps

列出所有进程

> ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan01 ?        00:01:41 /sbin/init
root         2     0  0 Jan01 ?        00:00:00 [kthreadd]
root         3     2  0 Jan01 ?        00:07:38 [ksoftirqd/0]
root         5     2  0 Jan01 ?        00:00:00 [kworker/0:0H]
root         6     2  0 Jan01 ?        00:00:00 [kworker/u2:0]

-ef f:father

ps –el ,
e:every :显示所有进程信息,等价于A
a:all :显示除了当前终端进程外的其他进程
l: long 长格式显示进程信息。

linux 线程状态:

  1. 运行(正在运行或在运行队列中等待)
  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:

  • D 不可中断 uninterruptible sleep (usually IO)
  • R 运行 runnable (on run queue)
  • S 中断 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (”zombie”) process
To see every process on the system using standard syntax:
          ps -e
          ps -ef
          ps -eF
          ps -ely

       To see every process on the system using BSD syntax:
          ps ax
          ps axu

       To print a process tree:
          ps -ejH
          ps axjf
chmod user:group filename
chmod u+x

chmod 对象 +/- 模式
对象:u(user),g(group),o(other),a(all)
模式:r,w,x

压缩和解压缩 tar

  • c: create 创建归档文件
  • z: gzip 使用gzip方式对文件压缩或解压缩
  • v: verbose显示命令执行过程
  • f: filename
  • x: extract 提取
  • C: change 跳转到目录
# 压缩
tar -zcf test.tar.gz test

# 解压
tar -zxf test.tar.gz  -C /tmp

ln

硬链接和软链接

# 为test 创建软链接
ln -s test sln
# 为test创建硬链接
ln test hln
ln: ‘test’: hard link not allowed for directory
ln test/test.c  hln

  • 软链接指向的是文件名,而硬链接文件的inode(索引号)
> ls -il
total 8
230628 ----r--r-- 2 root root 19 Apr 15 14:46 hln
230630 lrwxrwxrwx 1 root root  6 Apr 15 15:47 sln -> test.c
230628 ----r--r-- 2 root root 19 Apr 15 14:46 test.c
  • inode存放文件和目录的基本信息,包含时间、档名、使用者及群组等
# 查看文件的inode信息
> stat test.c
  File: ‘test.c’
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: fe01h/65025d    Inode: 230628      Links: 2
Access: (0044/----r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-04-15 14:46:47.471020064 +0800
Modify: 2018-04-15 14:46:47.471020064 +0800
Change: 2018-04-15 15:48:46.269923224 +0800
 Birth: -
  • 硬盘最小存储单位:扇区: 512B=0.5KB

  • 文件存取的最小单位:块:8*512B=4KB

  • 硬盘空间=数据区+inode区(inode table),文件数据存放在数据区,文件元数据存放在inode中

#已经使用的inode情况
> df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/vda1      1310720 89315 1221405    7% /
udev            125949   273  125676    1% /dev
...
  • inode 号是文件的唯一标识
# 查看文件的inode号
> ls -i test.c 
230628 test.c

  • 目录=目录项[n],目录项 : dirent=inode+filename
# 目录即文件,目录文件记录 文件名和inode
> ls -i ../test
230628 hln  230630 sln  230628 test.c
  • 权限x 其实是对inode 信息的限制,没有x权限,也就无法读取inode索引信息

由于目录文件内只有文件名和inode号码,所以如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。

  • 目录中".",".." 这两个硬链接在创建目录时被创建。

目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

  • inode存放硬链接数,当硬链接数为0,即没有inode,则文件系统将文件删除,回收文件数据所在的Block
>ls -il
# 第三列为硬链接数,软链接不会计数
total 12
230628 ----r--r-- 3 root root 19 Apr 15 14:46 hln
230628 ----r--r-- 3 root root 19 Apr 15 14:46 hln2
230630 lrwxrwxrwx 1 root root  6 Apr 15 16:21 sln -> test.c
230628 ----r--r-- 3 root root 19 Apr 15 14:46 test.c

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
#find . -inum INODE_NUM -delete
>find . -inum 230628 -delete
  1. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  2. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

软件不关闭情况下更新:写入同名不同inode的文件,下次启动由于老的inode已经丢失,操作系统回收原来的Block。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

软链接和硬链接的区别

综上,总结一下软链接和硬链接的区别:

  • 软链接可以施加在文件和文件夹上,而硬链接只能在文件上创建
  • 软链接指向的是文件名,而硬链接文件的inode(索引号)
  • 硬链接不能跨分区,软链接可以(inode是分区相关的)
  • 可以通过硬链接删除文件,不能通过软链接删除文件。(硬链接数为0则被回收)

参考:阮一峰的网络日志:理解inode

杂七杂八的命令

Ctrl+z 暂停进程执行

uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本

jobs: 查看后台任务
fg +jobNum: 将后台任务调到前台

未完,不定期更新中...

你可能感兴趣的:(linux 常见命令 lsof,ps,ln...)