快乐的Linux命令行
备注
已完成的章节
1;2;3;4;5;6;7;8;9;10;
13;
11.进程
11.1 进程如何工作
内核进程-->init 进程(PID 为 1) -->/etc/rc.localxxx 脚本(系统服务脚本)
ps –报告当前进程快照
# 查看进程信息
ps -ef |grep java
# 查看进程的启动时间
ps -eo 'lstart,cmd,pid,ppid' | grep java
# 监控某个进程的状态变化
watch -n 1 'ps -p 1234 -o %cpu,%mem,etime'
[root@VM-0-12-centos ~]# cat test.sh
sleep 100
[root@VM-0-12-centos ~]# sh test.sh
^Z
[1]+ Stopped sh test.sh
[root@VM-0-12-centos ~]# jobs -l
[1]+ 31565 Stopped sh test.sh
[root@VM-0-12-centos ~]# bg %1
[1]+ sh test.sh &
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 31565 Running sh test.sh &
[root@VM-0-12-centos ~]# ps -p 31565 -o pid,%cpu,%mem,etime,cmd
PID %CPU %MEM ELAPSED CMD
31565 0.0 0.0 00:27 sh test.sh
[root@VM-0-12-centos ~]#
top –显示任务
# 以 batch mode 显示前10 个进程信息
top -b -n 1 | head -17
# 自动刷新
watch -n 2 'top -b -n 1 | head -17'
top
是一个强大的系统监控工具,掌握以下技巧可提高效率:
- 按
P
、M
、T
快速排序,找出高 CPU、高内存, 高CPU 时间消耗进程 - 使用
top -b -n 1
结合grep
进行自动化分析。 - 配合
watch
进行定期监控,或结合cron
记录日志。 - 隐藏空闲进程(
i
)或指定用户(u
)查看特定进程。
jobs –列出活跃的任务
bg – 让进程继续在后台运行。
fg –将后台进程恢复到前台运行
[root@VM-0-12-centos ~]# cat test.sh
sleep 100
[root@VM-0-12-centos ~]# sh test.sh
^Z
[1]+ Stopped sh test.sh
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 15365 Stopped sh test.sh
[root@VM-0-12-centos ~]# bg %1
[1]+ sh test.sh &
[root@VM-0-12-centos ~]# jobs -l
[1]+ 15365 Running sh test.sh &
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# bg %1
-bash: bg: job 1 already in background
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# fg %1
sh test.sh
^C
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[root@VM-0-12-centos ~]#
kill –给一个进程发送信号
常见信号:(kill -l)
信号 | 数值 | 作用 |
---|---|---|
SIGHUP |
1 | 终止进程并重新加载配置 |
SIGINT |
2 | 终止进程(相当于 Ctrl+C) |
SIGKILL |
9 | 强制终止进程(不可捕获、不可忽略) |
SIGTERM |
15 | 终止进程(默认) |
SIGSTOP |
19 | 暂停进程(可恢复) |
SIGCONT |
18 | 恢复暂停的进程 |
# kill -0 检查进程是否存在
if kill -0 1234 2>/dev/null; then
echo "进程 1234 存在"
else
echo "进程 1234 不存在"
fi
# kill -9 1234
[root@VM-0-12-centos ~]# sh test.sh &
[1] 14561
[root@VM-0-12-centos ~]# ps -ef |grep test.sh
root 14561 13464 0 15:13 pts/1 00:00:00 sh test.sh
root 14590 13464 0 15:13 pts/1 00:00:00 grep --color=auto test.sh
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# kill -STOP 14561
[1]+ Stopped sh test.sh
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 14561 Stopped (signal) sh test.sh
[root@VM-0-12-centos ~]# kill -CONT 14561
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 14561 Running sh test.sh &
[root@VM-0-12-centos ~]# kill -STOP 14561
[1]+ Stopped sh test.sh
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 14561 Stopped (signal) sh test.sh
[root@VM-0-12-centos ~]# bg %1
[1]+ sh test.sh &
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# jobs -l
[1]+ 14561 Running sh test.sh &
killall –杀死指定名字的进程
killall -9 java
shutdown –关机或重启系统
# 现在立即关机
shutdown now
# 设置 5 分钟后关机
shutdown +5
# 22:00 关机
shutdown 22:00
# 立即重启
shutdown -r now
# 十分钟之后重启
shutdown -r +10
# 设置 23:00 重启
shutdown -r 23:00
# 如果已经设置了关机或重启任务,可以通过以下命令取消:
shutdown -c
# init 0: 关机
# init 6 :重启
在使用 Ctrl-c 的情况下,会发送一个叫做 INT(Interrupt, 中断)的信号;
当使用 Ctrl-z 时,则发送一个叫做 TSTP(Terminal Stop,终端停止)的信号。
12. Shell 环境
登录 Shell 与 非登录 Shell
类别 | 登录 Shell | 非登录 Shell |
---|---|---|
触发方式 | ssh user@host |
直接运行 bash |
su - username |
su username |
|
TTY 登录 (Ctrl+Alt+F2 ) |
运行 Shell 脚本 (./script.sh ) |
|
bash --login |
终端内打开新 bash |
|
配置文件 | /etc/profile → ~/.bash_profile |
/etc/bashrc → ~/.bashrc |
主要影响 | 影响全局环境变量,如 $PATH |
影响交互式命令,如 alias |
变量加载 | export 变量影响所有子进程 |
仅影响当前 Shell |
13. VI 简介
1. 基本模式
Vim 有三种主要模式:
- 普通模式 (Normal Mode):用于导航和编辑。
- 插入模式 (Insert Mode):用于编辑文本。
- 命令模式 (Command Mode):用于执行命令。
默认情况下,Vim 启动时处于 普通模式。
2. 在不同模式之间切换
- 进入插入模式:
i
(在光标前插入)
或I
(在行首插入) - 退出插入模式:
Esc
- 进入命令模式:
:
(在普通模式下输入) - 进入可视模式:
v
(按字符选择) 或V
(按行选择)
3. 基本导航命令
- 移动光标:
h
:向左移动一个字符j
:向下移动一行k
:向上移动一行l
:向右移动一个字符
- 跳到行首:
0
- 跳到行尾:
$
- 跳到文件开始:
gg
- 跳到文件结尾:
G
- 跳到第 N 行:
N
(如:10
跳到第 10 行) - 跳到当前行的某个字符:
f<char>
(如:fa
跳到当前行第一个a
字符) - 跳到当前行的下一个字符:
t<char>
(如:ta
跳到当前行第一个a
字符之前)
4. 文本编辑命令
- 删除字符:
x
(删除光标所在字符) - 删除到行尾:
D
- 删除到行首:
d0
- 删除一行:
dd
- 删除多行:
dN
(删除从当前行到第 N 行) - 剪切选中的文本:
d
(可视模式下) - 复制一行:
yy
- 复制多行:
yN
(复制当前行和以下的 N 行) - 粘贴:
p
(粘贴到光标后) 或P
(粘贴到光标前) - 撤销:
u
- 重做:
Ctrl + r
- 替换字符:
r<char>
(将光标所在字符替换为<char>
) - 替换一个单词:
cw
(替换当前光标处的单词)
5. 查找与替换
- 查找文本:
/text
(向下查找text
) - 查找上一个文本:
?text
(向上查找text
) - 查找下一个匹配项:
n
- 查找上一个匹配项:
N
- 替换单个匹配项:
:s/old/new
- 替换当前行的所有匹配项:
:s/old/new/g
- 替换整个文件中的所有匹配项:
:%s/old/new/g
- 替换并询问确认:
:%s/old/new/gc
(c
表示确认每次替换)
6. 可视模式
- 按字符选择:
v
(进入可视模式,按字符选择) - 按行选择:
V
(进入可视模式,按行选择) - 块选择:
Ctrl + v
(进入块选择模式) - 删除选中的文本:
d
- 复制选中的文本:
y
- 粘贴选中的文本:
p
7. 文件操作
- 保存文件:
:w
- 保存并退出:
:wq
或ZZ
- 退出不保存:
:q!
- 只读模式下退出:
:q
- 另存为:
:w filename
- 打开新文件:
:e filename
- 关闭文件:
:bd
(删除当前缓冲区)
8. 窗口管理
- 水平分割窗口:
:split
或:sp
- 垂直分割窗口:
:vsplit
或:vs
- 切换窗口:
Ctrl + w
然后按h/j/k/l
(向左/下/上/右切换) - 关闭窗口:
:q
9. 配置与设置
- 显示行号:
:set number
或:set nu
- 关闭行号:
:set nonumber
或:set nonu
- 高亮搜索结果:
:set hlsearch
- 关闭搜索高亮:
:set nohlsearch
- 启用自动换行:
:set wrap
- 禁用自动换行:
:set nowrap
- 启用行尾空格显示:
:set list
- 禁用行尾空格显示:
:set nolist
10. 撤销与重做
- 撤销:
u
- 重做:
Ctrl + r
- 撤销多个操作:
u
(多次按u
可撤销多个操作) - 恢复已删除的文本:
p
11. 其他有用的命令
- 保存并退出:
:wq
或ZZ
- 跳转到文件顶部:
gg
- 跳转到文件底部:
G
- 查看帮助文档:
:help
- 查找命令的帮助文档:
:help <command>
(如:help :wq
)
12. 快捷键总结
快捷键 | 描述 |
---|---|
i |
进入插入模式(在光标前) |
I |
进入插入模式(行首) |
a |
进入插入模式(光标后) |
A |
进入插入模式(行尾) |
Esc |
退出插入模式 |
yy |
复制当前行 |
dd |
删除当前行 |
p |
粘贴剪贴板内容 |
u |
撤销上一个操作 |
Ctrl + r |
重做上一个操作 |
/ |
查找文本(向下) |
? |
查找文本(向上) |
n |
查找下一个匹配 |
N |
查找上一个匹配 |
:w |
保存文件 |
:q |
退出 Vim |
:wq |
保存并退出 |
:q! |
强制退出不保存 |
总结
Vim 是一个非常强大的文本编辑器,具有丰富的命令和模式。掌握了上述命令,你可以更加高效地编辑和管理文件。在 Vim 中练习和熟悉命令可以大大提高你的工作效率。
14. 自定制 Shell 提示符
15. 软件包管理
## 安装 rpm 包
rpm -iVh *.rpm --force
## 升级 rpm 包
rpm -Uvh *.rpm --nodeps
## 卸载
rpm -e git --force
## 解压 rpm 包
rpm2cpio *.rpm | cpio -idmv
## 查看哪个软件包安装了/usr/bin/vim 这个文件
rpm -qf /usr/bin/vim
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-02-28 解决 vi/vim 中粘贴会在行首多很多缩进和空格的问题
2017-02-28 电子书网站集
2017-02-28 程序员必备的网站收藏
2017-02-28 好用的工具