Skip to content

Linux101

Linux Bash

参考资料

进程管理

终端中Ctrl+Z暂停命令, Ctrl+C停止

tmux

  1. 启动tmux会话 train_session是我们自己指定的名字

    tmux new -s train_session
    

  2. 在新的终端里面运行命令

  3. 分离到后台运行: Ctrl + B 然后按 D
  4. 重新连接
    tmux attach -t train_session
    

列出所有会话

tmux ls 

删除会话:在窗口里Ctrl+B, 然后按Shift+6。 或者在外部tmux kill-session -t <session_name>

设置默认终端为zsh:

  1. 先获取路径which zsh
  2. nano ~/.tmux.conf, 添加这一行
    set -g default-shell /bin/zsh
    

然后重新开一个tmux会话,旧的会话不会改变

下面的方法已过时

建议使用tmux实现关闭终端后仍能继续运行

后台运行

nohup后台运行command

nohup command > output.txt &

终端中运行的命令放到后台

如果已经启动了一个前台命令,可以按 Ctrl + Z 暂停它,然后将它移到后台并继续运行:

# 按 Ctrl + Z 暂停命令
bg #将命令移到后台
disown -h #使用 disown 解除与终端的关联,这样退出终端后,该进程不会退出

后台指令放到终端

首先使用 jobs 命令查看 当前终端 所有的后台任务,例如:

jobs

输出类似这样:

[1]-  Running                 long-command-1 &
[2]+  Running                 long-command-2 &

然后使用 fg 命令将你需要的任务调至前台,例如将第二个任务调至前台:

fg %2

ps

查找名为abcd的进程

ps aux | grep abcd #结果会包括grep命令本身
ps aux | grep "[a]bcd" #正则表达式,强制匹配以a开头的

kill

kill -SIG  PID

常用的选项有:

  • SIGSTOP(19) 暂停进程
  • SIGCONT(18) 继续执行被暂停的进程
  • SIGKILL(9) 强制终止进程,不能被捕捉、阻塞、忽略

查看端口占用

ss -tuln | grep 端口号  #t是tcp,u是udp

sudo lsof -i 协议名:端口号

文件系统

cprm处理文件夹的时候要加-r

find /home -name "*.txt" #索索

文件结构

根目录/ 用户目录/home/username

  • /etc: 配置文件
  • /bin: 实际上是指向/usr/bin的软链接
  • /etc 配置文件
  • /opt 大型的商业软件(有自己的安装程序)
  • /usr 大部分软件安装的地方
    • /usr/local 用户自行安装软件(不通过apt)

文件权限

ls -l

文件类型(一位)、文件所属用户的权限(三位)、文件所属用户组的权限(三位)、其他人的权限(三位)。对于每个权限,第一位 r 代表读取 (Read),第二位 w 代表写入 (Write),第三位 x 代表执行 (Execute),- 代表没有对应的权限

目录权限: 可以把目录视为一个「文件」来看待,这个文件包含了目录中下一层的文件列表——「读取」对应读取文件列表的权限,「写入」对应修改文件列表(添加、删除、重命名文件)的权限,「执行」对应实际去访问列表中文件、以及使用 cd 切换当前目录到此目录的权限。

查看目录

  • ls -a查看隐藏文件:以“.”开头的文件或目录默认被视为隐藏文件或目录,通常是一些系统配置文件。
  • ls -l 查看文件和目录的详细信息,包括文件权限,文件数量,文件所有者,文件大小(以字节为单位),和最近修改的时间。如果想以更易读的方式查看文件大小(例如KB,MB等),可以使用ls -lh
  • du -sh dir 查看目录总大小(ls只能看文件)。du -sh dir/*查看目录下所有子目录大小

解压文件

# .tar.gz 和 .tgz
tar -zcvf FileName.tar.gz DirName       # 将DirName和其下所有文件(夹)压缩
tar -zxvf FileName.tar.gz               # 解压
tar -C DesDirName -zxvf FileName.tar.gz # 解压到目标路径

#.zip
unzip file.zip 

unzip file.zip -d /path/to/destination/directory/
-P password

# 参考https://blog.csdn.net/songbinxu/article/details/80435665

tar默认是单线程解压缩的,如果想要多线程,可以使用pigz这样的工具

sudo apt update
sudo apt install pigz
tar -I pigz -cf archive.tar.gz DirName
tar -I pigz -xvf archive.tar.gz

查看cpu状态

nvidia-smi
nvtop

例子: 设置GPU.

CUDA_VISIBLE_DEVICES=0    python  your_file.py  # 指定GPU集群中第一块GPU使用,其他的屏蔽掉
CUDA_VISIBLE_DEVICES=1           #Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1         #Devices 0 and 1 will be visible

软链接

创建:

ln -s /mnt/d/data data

这样在当前目录下cd data 就可以到达/mnt/d/data

ls -l 目录名 来查看目录下是否有软链接。如果有,可以看到形如:

lrwxrwxrwx 1 username 38  6月 23  2024 软连接名 -> 实际目录

rsync

特性 cp -r rsync -av
传输速度 每次都全量拷贝 增量传输(仅拷贝变化部分)
元数据 默认不保留全部属性 完美保留权限、时间戳等
断点续传 不支持 支持
网络传输 仅限本地 支持本地与远程
rsync -av --progress <source> <destination>
rsync -azvh --progress <source> <destination>
rsync -avz -e ssh ./local_dir user@remote_ip:/remote_dir 
  • -a (archive): 归档模式,保留权限、所有者、时间戳及软链接。
  • -z (compress): 传输时压缩数据,适合远程传输。
  • -v (verbose): 输出详细过程。
  • -h (human-readable): 以易读格式显示文件大小(如 K, M, G)。
  • --progress: 显示传输进度条。

核心注意点:斜杠 / 这是 rsync 最容易出错的地方:

  • 源路径末尾有 /:仅同步目录下的内容

    • 例:rsync -a src/ dst/ -> 把 src 里的东西拷贝到 dst。
  • 源路径末尾无 /:同步目录本身

    • 例:rsync -a src dst/ -> 在 dst 下创建一个 src 文件夹。

常用高级选项

  • --delete: 慎用! 如果源端删除了某个文件,目标端也同步删除。使目标端成为源端的完全镜像。
  • --exclude: 排除不需要同步的文件。

    • 例:--exclude=".git"--exclude="node_modules"
  • -e ssh: 通过 SSH 进行远程同步。

  • --remove-source-files: rsync 在文件传输并校验成功后,从 发送端 删除这些已传输的文件。只删除文件,保留原有目录结构
    rsync -av --remove-source-files /path/to/source/ /path/to/destination/
    

用户管理

  • 添加名为newuser的用户

    `sudo adduser <用户名>,然后填写信息

  • 给用户添加sudo 权限`sudo usermod -aG sudo <用户名>

切换用户 su <用户名>

如果该用户还没有密码,或者你想修改他的密码,可以使用 passwd 命令(你需要有 root 权限或原本就是 sudo 用户):

sudo passwd 用户名

执行后,系统会提示你连续输入两次新密码。这个密码就是他以后执行 sudo 命令时需要输入的密码。

网络

wget

  • 如果网址里面含有&,+等特殊字符,把网址用""括起来
  • -O 选项(大写字母!!! )用于指定下载内容的输出文件。 示例:

wget -O output_file.txt http://example.com/file.txt
上述命令将下载 http://example.com/file.txt 并将其内容保存到本地文件 output_file.txt 中。

  • -o 选项(小写)则用于将 wget 的日志消息输出到指定的文件中。它不会影响下载的文件内容,只会指定日志的存放位置。

google drive

建议使用第三方软件在命令行里下载google drive上的文件,如gdown或者gshell

pip3 install gdown

-O指定下载路径 如果是文件夹,用--folder

gdown --folder https://drive.google.com/drive/folders/1pRy -O weights

Huggingface

HF-Mirror

hfd 是本站开发的 huggingface 专用下载工具,基于成熟工具 aria2,可以做到稳定高速下载不断线。

1. 下载hfd

wget https://hf-mirror.com/hfd/hfd.shchmod a+x hfd.sh

2. 设置环境变量
Linux

export HF_ENDPOINT=https://hf-mirror.com

Windows Powershell

$env:HF_ENDPOINT = "https://hf-mirror.com"

3.1 下载模型

./hfd.sh gpt2   #一些常见的模型
./hfd.sh xxxx/yyyy   #假设模型地址是`https://huggingface.co/xxxx/yyy`

3.2 下载数据集

./hfd.sh wikitext --dataset

ssh

配置ssh

在远程服务器上:

#将本机的id_rsa.pub添加到远程服务器上对应用户~/.ssh/authorized_keys中
cat id_rsa.pub >> ~/.ssh/authorized_keys

在本地,编写~/.ssh/config文件,添加如下内容:

Host server_name #自定义名称,也可以是ip地址
    HostName hostname #远程服务器的ip地址
    User username #远程服务器的用户名
    IdentityFile ~/.ssh/id_rsa #本地私钥文件,默认为~/.ssh/id_rsa,如果有多个私钥文件,可以指定
    Port xxxx #远程服务器的端口号,默认22
sudo chown -R  ypy:ypy  /home/ypy/.ssh && sudo chown -R ypy:ypy  /home/ypy/.ssh/authorized_keys

sudo chmod 700 /home/ypy/.ssh && sudo chmod 600 /home/ypy/.ssh/authorized_keys

登录

ssh server_name
#或
ssh username@hostname -p xxxx

清除指纹: 如果远程服务器重装系统之后,遇到登陆失败,可能是服务器指纹改变。此时需要清除本机~/.ssh/knownhosts里面的服务器指纹

ssh-keygen -R server_name

如果报known_hosts格式错误:

~/.ssh/known_hosts:16: invalid line
~/.ssh/known_hosts is not a valid known_hosts file.
可能是手动改的时候出了问题。(比如:不小心加了空行,known_hosts里面不能有任何空行)。用文本编辑器把出问题行改掉即可。

scp

scp -r /path/to/local/file username@hostname:/path/to/remote/file

sftp

sftp基本指令

上传文件:  把本地服务器的/www/wwwroot目录下面的study.log文件上传到远程服务器的/www/server目录下。
sftp> lcd /www/wwwroot
sftp> put study.log /www/server

上传文件夹:把本地服务器的/www/wwwroot目录下面的test文件夹上传到远程服务器的/www/server目录下。
sftp> put -r test /www/server

查看远程服务器/www/server目录下面的文件和文件夹
sftp> ls /www/server

ssh问题排查

服务端查看日志(有具体拒绝原因):

# Ubuntu 系统 
sudo tail -f /var/log/auth.log

echo $pwd 查看当前所在目录(适合oh-my-zsh之类的把路径压缩了) nproc 查看cpu物理核心数

GPU显存占用但nvidia-smi不显示进程号, nvtop出现N/A_nvidia-smi怎么看进程-CSDN博客

Comments