Linux常用命令备忘

远程主机使用本地代理

Step 1 : 建立ssh转发隧道

1
ssh -N -R 7897:localhost:7897 <user>@<server> -p port  #将远端7897端口转发到本地7897

Step 2:远端设置环境变量

1
2
3
# vim ~/.bashrc
alias proxy="export http_proxy=http://127.0.0.1:7897 https_proxy=http://127.0.0.1:7897"
alias unproxy="unset http_proxy https_proxy"

GPU清理No such process

1
fuser -v /dev/nvidia* | awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | bash #仅限自己的

若要清理他人的,则需要使用sudo命令,并同时想办法筛掉非no such process,建议写一个python脚本去执行

拷贝

scp

1
2
3
4
5
6
7
8
9
10
11
scp [-Cpqrv] [-P port] [[user@]host1:]file1 [...] [[user@]host2:]file2
# 简易写法
scp [可选参数] file_source file_target

#参数解释
-C: 允许压缩。
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。用于调试
-P port:注意是大写的P, port是指定数据传输用到的端口号。

rsync

与其他文件传输工具(如 FTP 或SCP)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

1
2
3
4
5
6
7
8
9
rsync -avz --append --pregress -e "ssh -p <port>" source/ user@remote_host:/destination

#参数解释
-a: 除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。
-v: 参数表示输出细节。
-z: 参数指定同步时压缩数据。
-e: 参数指定使用 SSH 协议传输数据。在端口号不是22时非常重要。
--append: 增量追加同步(即只传输文件新增的部分,而不是整个文件)
--progress: 显示传输进度

Note: rsync需要注意source后面加了**“ / ”** 的话就是只拷贝source下的所有文件目录,而不拷贝source这个目录

查找文件

Find

1
2
3
4
5
6
7
8
9
10
11
12
# 文件名
find ./ -iname "*.c" # 所有后缀为.c的文件

-i: 忽略大小写

#文件大小
find /home -size +1M # home目录下大于1M的s

#文件内容
find /home -type f | xargs grep "hello"
OR
grep -r "hello" /home/*.tx

后台运行

nohup

1
2
3
4
5
6
7
8
nohup Command <Arg> &
# Arg
/dev/null 空设备文件
0 标准输入
1 标准输出
2 标准错误
> file <==> 1> file
2 > &1 表示将标准错误重定向到标准输出

例子

1
nohup python tools/train.py >/dev/null 2>&1 &

查看ip端口

ip addr , netstat,lsof

1
2
3
ip addr #查看ip
sudo netstat -tunp | grep 端口号
lsof -i :port #查看占用端口的进程号

新用户

1
2
3
4
5
# 注意useradd以及adduser区别,useradd不创建用户目录,adduser为一个perl脚本,包含了创建用户目录,创建用户组等操作,更全面
adduser <username> #添加
deluser <username> #删除
usermod -g sudo <username> #sudo权限 -> g
usermod -g root <username> #root权限 -> 超级管理员
1
2
3
4
5
6
7
8
9
10
# adduser 常用选项
–system 添加系统用户或组
–disabled-login 禁止登录到用户账户
–disabled-password 禁止使用密码登录
–gid 将组ID号设置为。如果指定了用户,则还将用户添加到组
–group 运行addgroup命令并添加用户组。如果指定了–system,则添加系统用户和组
–home 将用户的主目录设置为
–shell 使用作为用户的登录shell
–ingroup 将用户添加到,而不是配置文件中的默认组
–no-create-home 避免为用户创建主目录