linux

1
2
如 /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
2
3
4
5
6
7
8
9
nano 文件名

vim 文件名

gedit 文件名

code文件名

cat 主要用于查看和操作文件内容,而不是编辑。

新建文件夹

1
2
3
mkdir 文件夹名
mkdir -p 多重文件夹名

删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
删除 file1.txt 文件:
$ rm file1.txt

删除 test 目录及其下的所有文件:

rmdir 空文件夹名
rmdir -r 文件夹名
$ rm -r test/


删除 test1/、test2/、file1.txt 这些文件、目录。其中,这些文件或者目录可能不存在、写保护或者没有权限读写:


$ rm -rf test1/ test2/ file1.txt

image-20241119094611064

image-20241119094646417

pwd查看当前目录

source +文件名 重启

sudo apt update

ssh username@server_ip连接云服务器

  • cat主要用于查看和操作文件内容,而不是编辑。
  • nano是一个简单、用户友好的文本编辑器,适合初学者和不经常进行复杂编辑的用户。
  • vi(或vim)是一个复杂且功能强大的文本编辑器,适合需要进行高级文本处理和编程的用户。
1
2
ssh-keygen
ssh-copy-id root@ip
1
2
3
4
5
6
7
8
绝对路径
根目录 /bin/ls
相对路径
./file.txt当前目录下文件
../file.txt上一级目录下的文件
../abc/file.txt上一级的abc文件夹下的文件

mv ../source/file.txt ../dest/
1
2
3
4
5
6
7
8
9
10
11
12
创建新用户
sudo useradd gyx

sudo apt install code
sudo -u gyx code go.md
code --no-sandbox go.md

code 命令创建别名(可选)
如果你每次都需要避免使用管理员权限启动 VS Code,可以为 code 命令创建一个别名,使其自动以普通用户身份运行。你可以在 /etc/sudoers 文件中为你自己设置别名,或者直接在你的 shell 配置文件(例如 .bashrc 或 .zshrc)中设置别名。

例如,编辑 .bashrc 或 .zshrc 文件,添加以下内容:
alias code="sudo -u username code"
1
2
3
4
5
sudo apt install tldr
# 更新 tldr pages
tldr --update

tldr tar
1
2
nginx

ip a查看服务器ip地址

1
2
3
4
5
6
7
8
9
10
c的编译环境
sudo apt install build-essential
sudo apt install codeblocks
gcc -o hello hello.c
./hello

sudo apt install gdb
gdb ./hello


tmux

一个终端(硬件概念)只有一套鼠标键盘,只能有一个 shell 主持一个 session,那如果我在 SSH 连接的时候有几个程序需要同时交互的话,只有一个前台进程很不方便。而且上面说过如果 SSH 网络断开,视为终端被关闭,也就意味着前后台一起收到 SIGHUP 一起退出,好不容易设置好的临时变量什么的还得重设。

开启多个 SSH 连接似乎可以解决这个问题。但是如果程序既需要交互,又想保证不因意外断线而停止程序,就是 nohup 也帮不了。

这时 tmux 的出现,解决了会话保持与窗口复用的问题。正如上图所示,tmux 是一个分屏的、运行在命令行的模拟终端,意味着只要有命令行可用,就可以将多个交互进程集成在在一个窗口上。该窗口不因断开连接或者暂时登出而消失,而是会保存在后台,下一次登录时可以立即还原。

刚才提到如果不幸掉线,会话仍然被保存在后台,如果再次登录,可使用 tmux attach [-t 窗口名称] 重新连接窗口,不加 -t 参数将默认连接最后一次打开的窗口。

image-20241119114405413

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sudo apt install tmux

tmux

tmux new-session -s 名字

创建新窗口: 按 Ctrl-b 后松开,然后按 c 来创建一个新的窗口。

切换窗口:

切换到下一个窗口:按 Ctrl-b 然后按 n。
切换到上一个窗口:按 Ctrl-b 然后按 p。
切换到指定窗口:按 Ctrl-b 然后按窗口编号,例如按 Ctrl-b 然后按 0 切换到第一个窗口。
列出所有窗口: 按 Ctrl-b 后松开,然后按 w 显示所有窗口并选择要切换的窗口。

关闭当前窗口: 按 Ctrl-b 后松开,然后按 &,tmux 会提示你是否关闭当前窗口。

重命名窗口: 按 Ctrl-b 后松开,然后按 , 来重命名当前窗口。
Ctrl+b " 水平分屏
Ctrl+b % 垂直分屏
在分屏之间切换
当你在 tmux 中创建了多个面板后,可以使用以下命令在不同的面板之间切换:

切换到上一个面板:Ctrl-b <方向键>
Ctrl-b ↑:切换到上方的面板
Ctrl-b ↓:切换到下方的面板
Ctrl-b ←:切换到左边的面板
Ctrl-b →:切换到右边的面板

#退出 tmux 会话
退出当前会话:如果你希望退出当前会话并返回到普通 shell,
按 Ctrl-b 然后按 d 键(d 是 "detach" 的缩写)。
你可以随时重新连接到已分离的会话,方法如下:
tmux attach-session -t mysession
杀死会话:如果你希望完全退出并终止当前会话,可以输入:
exit

列出所有会话
要查看当前正在运行的 tmux 会话,输入:

tmux list-sessions
1
2
3
4

大概流程
tmux attach-session -t boss-session

vim

Vim 有三种基本的模式,每种模式的功能不同:

1. 普通模式(Normal Mode)

  • 启动 Vim 后,默认进入普通模式。在这个模式下,你可以执行各种命令,例如导航、删除文本、复制和粘贴等。
  • 进入普通模式:按 Esc 键。

2. 插入模式(Insert Mode)

  • 在插入模式下,你可以编辑文本(即输入内容)。
  • 进入插入模式:按 iI(在光标前)、aA(在光标后)等。
  • 返回普通模式:按 Esc 键。

3. 命令模式(Command Mode)

  • 在命令模式下,你可以执行保存文件、退出 Vim、搜索文本等操作。
  • 进入命令模式:在普通模式下按 : 键。
  • 返回普通模式:按 Esc 键。

image-20241119105420595

1
2
3
4
htop
ps
ps aux
strace ps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vimtutor



jklh

:q! wq w
i
x dw de d$ dd d2e
怎么撤销
u U ctrl-R


a A i I r R
o O
0 2w 2e e
y p

:s/old/new/g
v
:r

image-20241120190311829只保存更改:w

image-20241120192549573

deleteimage-20241120193601809

p

r ce c$

image-20241120202653371

image-20241120202724544

image-20241120204804885

append o

e a

image-20241120211026404

1
:e
  • 功能:在 Vim 的命令行模式下输入命令的开头部分。
  • 效果:这里输入 :e,表示你打算使用 :edit 命令来打开一个文件。
1
:e<Ctrl-D>
  • 功能:按 CTRL-D 键,Vim 会显示所有以 e 开头的命令。
  • 效果:你会看到一个列表,其中包含所有以 e 开头的命令,例如 :edit:execute 等。
1
2
:e<Ctrl-D>
:e d<TAB>
  • 功能:输入 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 会显示所有匹配的文件名供你选择。

image-20241120212629101

用户进程控制

要想控制进程,首先要与进程对话,那么必然需要了解进程间通信机制。由于进程之间不共享内存空间,也就无法直接发送信息,必须要操作系统帮忙,于是信号机制就产生了。

fg, bg 和 Ctrl + Z,涉及到的正是 shell 中前后台的概念。在 shell 中直接运行命令,将挂到前台,而如果不希望无力地看着屏幕输出不能做其他事情,那么便需要将程序切换到后台了。

默认情况下,在 shell 中运行的命令都在前台运行,如果需要在后台运行程序,需要在最后加上 &。任务前的代号在 fg,bg,乃至 kill 命令中发挥作用。使用时需要在前面加 %,如将 2 号进程放入后台,则使用 bg %2,效果如图所示。

nohup

nohup,字面含义,就是「不要被 SIGHUP 影响」。

1
2
3
$ nohup ping 101.lug.ustc.edu.cn &
[1] 19258
nohup: ignoring input and appending output to '/home/ustc/nohup.out'

在需要屏蔽 SIGHUP 的程序前添加 nohup,则运行时的输出将被重定向到 nohup.out,也可以通过重定向手段自定义输出的文件。

信号

进程组

服务

例行性任务

所谓例行性任务,是指基于时间的一次或多次周期性定时任务。在 Linux 中,实现定时任务工作的程序主要有 at 和 crontab,它们无一例外都作为系统服务存在。

bash

chmod +x myscript.sh

. 文件测试

Bash 中有很多用于文件测试的条件判断符:

  • **-e**:检查文件是否存在。

    1
    2
    3
    bash复制代码if [ -e "myfile.txt" ]; then
    echo "File exists"
    fi
  • **-d**:检查是否为目录。

    1
    2
    3
    bash复制代码if [ -d "myfolder" ]; then
    echo "Directory exists"
    fi
  • **-f**:检查是否为普通文件。

    1
    2
    3
    bash复制代码if [ -f "myfile.txt" ]; then
    echo "File exists"
    fi
9. 调试脚本

可以使用 -x 选项来调试脚本,查看每一行的执行过程:

1
bash -x myscript.sh
10. 错误处理

在脚本中处理错误是个好习惯。你可以通过以下方式检查命令是否成功:

1
2
3
4
command
if [ $? -ne 0 ]; then
echo "Command failed"
fi

也可以通过设置脚本的执行策略来让脚本在遇到错误时自动退出:

1
2

set -e # 遇到错误就退出

装vscode

sudo apt update

sudo apt install snapd

sudo systemctl enable –now snapd

sudo snap install code –classic