持续更新中
1.删除其他进程打开的文件
每个文件都有 2 个 link 计数器 —— i_count 和 i_nlink。i_count 的意义是当前使用者的数量,i_nlink 的意义是介质连接的数量;或者可以理解为 i_count 是内存引用计数器,i_nlink 是硬盘引用计数器。再换句话说,当文件被某个进程引用时,i_count 就会增加;当创建文件的硬连接的时候,i_nlink 就会增加。
对于 rm 而言,就是减少 i_nlink。这里就出现一个问题,如果一个文件正在被某个进程调用,而用户却执行 rm 操作把文件删除了,会出现什么结果呢?
当用户执行 rm 操作后,ls 或者其他文件管理命令不再能够找到这个文件,但是进程却依然在继续正常执行,依然能够从文件中正确的读取内容。这是因为,rm
操作只是将 i_nlink 置为 0 了;由于文件被进程引用的缘故,i_count 不为 0,所以系统没有真正删除这个文件。i_nlink 是文件删除的充分条件,而 i_count 才是文件删除的必要条件。
2.查看目录下的文件数量
ls -l |grep ^- |wc -l
^匹配行首 $匹配行尾 wc -l 统计数量
3.基本命令
mkdir创建文件夹
mkdir -p a/b/c递归创建。
mv 移动 或者重命名。
find -name"*.conf" 查找当前目录以.conf结尾的文件。
find . -type f -name "*.conf" -exec cp {} /tmp/ \ 找到当前目录 文件类型为文本 文件名字以“*.conf" 结尾的文件 执行命令复制到/tmp下。 {}是查找到的东西最后以\结尾表明结束
find /var/log -type f -mtime+20| xargs rm -f 查找文件时间超过二十天的并删除
cp -r 递归复制目录
cat -n 显示行号
wc -l 多少行 -w 多少个单词 -c 多少个字
sort -n 按数学形式排序 -r 倒序排序 cat access.log |awk '{print $1}'|sort -n|uniq -c |wc -l 统计有多少个ip访问 cat access.log |awk '{print $1}'|sort -n|uniq -c |sort -n 看出最大的 unqi -c 是将相同的合并。
grep -n 显示行号 -l 显示包含的文件名 grep "root" -l * 查找包含"root”的所有文件名
cut -d : -f1 /ect/passward 将/ect/passward 以:进行分割 输出第一列(f1)
tail -f 动态滑滚 tail -n 显示末尾多少行 head -n显示头多少行
vim:(只记我不会的)
d$删除光标到末尾 y$复制光标到末尾。
:/root 查找文件中的root
查看下一个匹配,按下n(小写n)
跳转到上一个匹配,按下N(大写N
:%s/root/lhb/g 将root全部替换为lhb
:%s/root/lhb/gc部分 替换
系统管理命令:
groupadd -g 100 test 创建GID为100的test组
groupdel test 删除GID为100的组
chown root:lhb a 把a文件的用户和组改为root 和Lhb
chown -R 把目录及目录下的所有更改
usradd -u 设置UID -g 设置GID(必须存在) -s 定义shell
w 查看当前登录的账号
top命令
从上到下分别为
1.系统启动时间 15:42:51 运行了37分钟 有一个用户 平均负载:1分钟以来 5分钟以来 15分钟以来(可以用uptime替代)
2.总共有 273个任务 1个在运行 272个在睡眠 0个停止 0个僵尸进程
3.cpu的使用率
- us, user: 运行(未调整优先级的) 用户进程的CPU时间
- sy,system: 运行内核进程的CPU时间
- ni,niced:运行已调整优先级的用户进程的CPU时间
- wa,IO wait: 用于等待IO完成的CPU时间
- hi:处理硬件中断的CPU时间
- si: 处理软件中断的CPU时间
- id :空闲cpu占比
4.MIB mem 物理内存使用率 buff/cache用作内核缓存的内存量(就是对磁盘的缓存)
5 MIB Swap 交换 当内存不足时候磁盘作为虚拟内存(可用free替代)
6:
- PR 进程优先级
- NI 进程 nice值
- VIRT 进程虚拟内存所占总量
- RES 进程所用的未被换出的物理内存大小
- SHR 共享内存大小(共享库)
- %CPU cpu占比
- %MEM 使用的物理内存占比
- TIME+ 进程使用的cpu时间总计
PS命令
ps命令显示进程的状态主要有几个参数
ps -a 显示现行终端机下的所有程序,包括其他用户的程序
ps -A 显示所有程序。
ps -u 以用户为主的格式来显示程序状况。
ps -x 显示所有程序,不以终端机来区分。
一般用ps -aux |grep xxx
ps -ef |grep xxx 不查看cpu状态
STAT:进程的状态
R:runingable可运行状态:此时进程正在运行或者正在运行队列中等待准备运行
S:sleep 可中断的等待状态:处于可中断的等待状态的进程可以被某一信号中断(阻塞可被信号打断)
D:不可中断的等待状态:处于不可中断的等待状态的进程不受信号的打扰,将一直等待事件的发生或等待某种系统资源(阻塞不可被信号打断)
T:暂停状态:处于暂停状态的进程被暂停运行(应该是信号被stop)
Z: 僵死状态:(等待回收,或者被杀死)
STAT常用附加标志有
<:高优先级进程
N:低优先级进程
L:有些页面被锁在内存中
s:主进程(回话的先导进程)
l:多线程进程
+:前台线程
ps -aux |grep Z 查看僵尸进程
ps是一个静态的命令 查看当前的系统状态是静态显示的 top 命令是一个动态刷新的过程当系统繁忙的时候建议使用ps
kill -9 进程Id 强制杀死进程
kill -l 查看信号列表
df-h 查看磁盘大小
netstat:
-t 查看tcp选项
-u 显示UDP协议的连接情况
-l 显示有在 Listen (监听) 的服务状态
-n 以网络IP地址代替名称,显示网络连接情形(好像是域名转ip)
-a 显示所有socket,包括正在监听的
-p 显示建立相关连接的程序名和PID
查看端口的命令:
netstat -nap | grep port a 显示所有socket p 显示进程pid 然后再进行grep
lsof -i:port
重定向:
| 管道将 前面的输出当作后面的输入
> 将输出输入到文件中(覆盖)
>>追加到文件中
>filename (清空文件)
linux命令都是操作文件
/etc/login.defs存放用户登录相关信息
awk学习
awk '{if(NR>=20 && NR<=30) print $1}' test.txt
awk '{print $1 ,$2}' test.txt 打印出test.txt的前两列
awk '{print NR "\t" NF"\t" $1 ,$2}' test.txt 打印出test.txt的行号 列的个数 和前两列
awk 'NR==7 {print}' test.text 行号为7时才打印
awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}}END{for i in name{print i "\t" name[i]}' test.txt 把第三列以"-" 进行分割 并将分割后以date命名