linux边用边记
linux
1 | 如 /bin 和 /sbin 存储基本命令和系统管理工具,而 /home 存储用户数据,/etc 存储配置文件,/tmp 存储临时文件。/var — 可变数据 用途:存放经常变化的数据,如日志文件、数据库、缓存等。/var/log 包含系统日志,/var/www 包含 Web 服务器的文件 |
apt的包管理器安装通常会被安装到系统级的目录中,如 /usr/bin
、/usr/local/bin
等,这些目录已经在系统的 $PATH
环境变量中,因此安装后的程序可以直接在任何位置通过命令行调用。
而npm安装
全局安装:使用 npm install -g <package_name>
命令安装的包会被放置在一个全局的位置,通常是 /usr/local/lib/node_modules
(或通过 NVM 安装时位于 ~/.nvm/versions/node/<node_version>/lib/node_modules
)。
局部安装:默认情况下,使用 npm install <package_name>
命令安装的包会被安装在当前项目的 node_modules
文件夹中,这个文件夹位于你执行安装命令的目录下。
新建文件
1 | nano 文件名 |
新建文件夹
1 | mkdir 文件夹名 |
删除
1 | 删除 file1.txt 文件: |
pwd查看当前目录
source +文件名 重启
sudo apt update
ssh username@server_ip连接云服务器
cat
主要用于查看和操作文件内容,而不是编辑。nano
是一个简单、用户友好的文本编辑器,适合初学者和不经常进行复杂编辑的用户。vi
(或vim
)是一个复杂且功能强大的文本编辑器,适合需要进行高级文本处理和编程的用户。
1 | ssh-keygen |
1 | 绝对路径 |
1 | 创建新用户 |
1 | sudo apt install tldr |
1 | nginx |
ip a查看服务器ip地址
1 | c的编译环境 |
tmux
一个终端(硬件概念)只有一套鼠标键盘,只能有一个 shell 主持一个 session,那如果我在 SSH 连接的时候有几个程序需要同时交互的话,只有一个前台进程很不方便。而且上面说过如果 SSH 网络断开,视为终端被关闭,也就意味着前后台一起收到 SIGHUP 一起退出,好不容易设置好的临时变量什么的还得重设。
开启多个 SSH 连接似乎可以解决这个问题。但是如果程序既需要交互,又想保证不因意外断线而停止程序,就是 nohup 也帮不了。
这时 tmux 的出现,解决了会话保持与窗口复用的问题。正如上图所示,tmux 是一个分屏的、运行在命令行的模拟终端,意味着只要有命令行可用,就可以将多个交互进程集成在在一个窗口上。该窗口不因断开连接或者暂时登出而消失,而是会保存在后台,下一次登录时可以立即还原。
刚才提到如果不幸掉线,会话仍然被保存在后台,如果再次登录,可使用 tmux attach [-t 窗口名称]
重新连接窗口,不加 -t
参数将默认连接最后一次打开的窗口。
1 | sudo apt install tmux |
1 |
|
vim
Vim 有三种基本的模式,每种模式的功能不同:
1. 普通模式(Normal Mode)
- 启动 Vim 后,默认进入普通模式。在这个模式下,你可以执行各种命令,例如导航、删除文本、复制和粘贴等。
- 进入普通模式:按
Esc
键。
2. 插入模式(Insert Mode)
- 在插入模式下,你可以编辑文本(即输入内容)。
- 进入插入模式:按
i
、I
(在光标前)、a
、A
(在光标后)等。 - 返回普通模式:按
Esc
键。
3. 命令模式(Command Mode)
- 在命令模式下,你可以执行保存文件、退出 Vim、搜索文本等操作。
- 进入命令模式:在普通模式下按
:
键。 - 返回普通模式:按
Esc
键。
1 | htop |
1 | vimtutor |
只保存更改:w
delete
p
r ce c$
append o
e a
1 | :e |
- 功能:在 Vim 的命令行模式下输入命令的开头部分。
- 效果:这里输入
:e
,表示你打算使用:edit
命令来打开一个文件。
1 | :e<Ctrl-D> |
- 功能:按
CTRL-D
键,Vim 会显示所有以e
开头的命令。 - 效果:你会看到一个列表,其中包含所有以
e
开头的命令,例如:edit
、:execute
等。
1 | :e<Ctrl-D> |
- 功能:输入
d
后按<TAB>
键,Vim 会自动补全命令名。 - 效果:
d<TAB>
会补全为:edit
,因为:edit
是以e
开头并且包含d
的唯一命令。
1 | :edit FIL |
- 功能:在
:edit
命令后面添加一个空格和文件名的开头部分。 - 效果:假设你有一个文件名为
file.txt
,输入FIL
作为文件名的开头。
1 | :edit FIL<TAB> |
- 功能:按
<TAB>
键,Vim 会自动补全文件名。 - 效果:如果
FIL
是唯一的匹配项,Vim 会将其补全为file.txt
。如果有多个匹配项,Vim 会显示所有匹配的文件名供你选择。
用户进程控制¶
要想控制进程,首先要与进程对话,那么必然需要了解进程间通信机制。由于进程之间不共享内存空间,也就无法直接发送信息,必须要操作系统帮忙,于是信号机制就产生了。
fg
, bg
和 Ctrl + Z,涉及到的正是 shell 中前后台的概念。在 shell 中直接运行命令,将挂到前台,而如果不希望无力地看着屏幕输出不能做其他事情,那么便需要将程序切换到后台了。
默认情况下,在 shell 中运行的命令都在前台运行,如果需要在后台运行程序,需要在最后加上 &
。任务前的代号在 fg,bg,乃至 kill 命令中发挥作用。使用时需要在前面加 %
,如将 2 号进程放入后台,则使用 bg %2
,效果如图所示。
nohup¶
nohup,字面含义,就是「不要被 SIGHUP 影响」。
1 | $ nohup ping 101.lug.ustc.edu.cn & |
在需要屏蔽 SIGHUP 的程序前添加 nohup,则运行时的输出将被重定向到 nohup.out,也可以通过重定向手段自定义输出的文件。
信号
进程组
服务
例行性任务
所谓例行性任务,是指基于时间的一次或多次周期性定时任务。在 Linux 中,实现定时任务工作的程序主要有 at 和 crontab,它们无一例外都作为系统服务存在。
bash
chmod +x myscript.sh
. 文件测试
Bash 中有很多用于文件测试的条件判断符:
**
-e
**:检查文件是否存在。1
2
3bash复制代码if [ -e "myfile.txt" ]; then
echo "File exists"
fi**
-d
**:检查是否为目录。1
2
3bash复制代码if [ -d "myfolder" ]; then
echo "Directory exists"
fi**
-f
**:检查是否为普通文件。1
2
3bash复制代码if [ -f "myfile.txt" ]; then
echo "File exists"
fi
9. 调试脚本
可以使用 -x
选项来调试脚本,查看每一行的执行过程:
1 | bash -x myscript.sh |
10. 错误处理
在脚本中处理错误是个好习惯。你可以通过以下方式检查命令是否成功:
1 | command |
也可以通过设置脚本的执行策略来让脚本在遇到错误时自动退出:
1 |
|
装vscode
sudo apt update
sudo apt install snapd
sudo systemctl enable –now snapd
sudo snap install code –classic