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 线程状态:
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
- 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
- 停止(进程收到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系统特有的现象。
- 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
#find . -inum INODE_NUM -delete
>find . -inum 230628 -delete
- 移动文件或重命名文件,只是改变文件名,不影响inode号码。
- 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
软件不关闭情况下更新:写入同名不同inode的文件,下次启动由于老的inode已经丢失,操作系统回收原来的Block。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
软链接和硬链接的区别
综上,总结一下软链接和硬链接的区别:
- 软链接可以施加在
文件和文件夹
上,而硬链接只能在文件
上创建 - 软链接指向的是文件名,而硬链接文件的inode(索引号)
- 硬链接不能跨分区,软链接可以(inode是分区相关的)
- 可以通过硬链接删除文件,不能通过软链接删除文件。(硬链接数为0则被回收)
参考:阮一峰的网络日志:理解inode
杂七杂八的命令
Ctrl+z 暂停进程执行
uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本
jobs: 查看后台任务
fg +jobNum: 将后台任务调到前台
未完,不定期更新中...