Linux指令拾遗
cmd指令修改自动/手动Ip
- 自动获取ip:
1
2netsh interface ip set address name="本地连接" source=dhcp
netsh interface ip set dns name="本地连接" source=dhcp - 手动获取ip:
1
netsh interface ip set address name="本地连接" source=static addr=192.168.2.5 mask=255.255.255.0 gateway=192.168.8.1 1
kill gpu显存占用
- 查看占用进程
fuser -v /dev/nvidia*
- 批量清除
fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sh
- 快捷指令
为实现快速批量kill 可以在.bashrc中配置了快速复制的指令,如下1
2
3
4function killN {
#echo "$1"
fuser -v /dev/nvidia$1 |awk '{for(i=0;i<=NF;i++)print "kill -9 " $i;}'| sh
}
批量kill满足条件的进程
ps -ef|grep xxx|grep -v grep|awk '{print $2}'|xargs kill -9
ps -ef
查看所有进程ps -aux
也是查看所有进程 不过两者右以下区别:
(1) -ef是System V展示风格,而-aux是BSD风格。
(2) COMMADN列如果过长,-aux会截断显示,而-ef不会
(3) -aux可以查看进程的CPU占用率和内存占用率,而-ef不能
grep xxx
过滤,只显示包含xxx的
grep -v grep
过滤掉包含grep
的进程(当前这条指令的)awk '{print $2}'
取按空格分割的第二个元素,这里正好是PID.xargs kill -9
xargs命令把前面命令的输出结果(PID)作为”kill -9”命令的参数,并执行
查看端口监听占用
netstat -nap |grep [端口号]
Linux断点续传(代替scp)
- 文件上传/下载
1
rsync -rP --rsh=ssh PATH username@hostname:PATH
- 文件夹上传/下载
1
rsync -P --port 2023 --rsh=ssh PATH username@hostname:PATH
新写法,还未实验
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
Linux防网络不稳定远程链接(代替ssh)
安装网址mosh.org
链接指令1
mosh username@password
查看GPU占用进程
fuser -v /dev/nvidia*
Mac终端Linux服务器看图
只支持Mac的Iterm2
在服务器端执行一下三条命令1
2
3curl "https://iterm2.com/utilities/imgcat" > imgcat
chmod +x imgcat
mv imgcat /usr/bin/
在Iterm2终端即可通过如下指令输出图片1
imgcat xxx.png
Tmux
tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件。
之前也听说过tmux很好用,但程序一直采用nohup挂载,也不用担心终端关闭后无法继续。但在ipad上远程时,一直在想如何能多窗口,之前是利用软件自带的分屏如图所示。
但哪怕再挂个悬浮窗也就三个终端,而且还有遮挡
直到用了下tmux,真香
ipad上用到的ssh软件Terminus 搭配Kcode的sftp在线改代码,远程办公很棒。两个app都是免费的,其实Terminus上也有sftp只不过要花钱(而且还不是买断,是每年388),所以用Kcode
ipad上tmux切换窗口居然还是只能用快捷键,哪怕改了配置接了鼠标。。。
- 安装
不同系统平台不一样自行百度
redhat、centos 或 fedora:yum install tmux
ubuntu:apt-get install tmux
Macbrew install tmux
- 常用指令
启动tmux new -s roc
# roc是你这个tmux会话的名称,可以创建多个
查看已有会话tmux ls
进入已有会话tmux a -t roc
一个会话创建新的窗口: ctrl+b 然后c
关闭当前窗口: exit
切换窗口: ctrl/control+b 序号[0,1,2…]
退出当前会话: ctrl/control+b d
左右分屏: ctrl/control+b %
上下分屏: ctrl/control+b “
切换分屏窗口: ctrl/control+b 方向键 配置优化
可以自定义tmux的快捷键,比如他的激活指令ctrl+b可以改成别的,这里给出我的一些优化配置vim ~/.tmux.conf
# 第一次可能啥都没有就新建一个1
2
3
4
5
6
7
8
9# --------------------------------------------------- 更改新增面板键 -------------------------------------------------
unbind %
bind | split-window -h # 使用-屏,方便分屏 # 水平方向新增面板,默认进入当前目录
unbind '"'
bind - split-window -v # 使用|屏,方便分屏 # 垂直方向新增面板,默认进入当前目录
# --------------------------------------------------- 开启鼠标支持 -----------------------------------------------------------
# v2.1及以上的版本
set-option -g mouse on输入下面指令让配置生效
tmux source .tmux.conf
复制
tmux复制采用vim的指令方式比较麻烦,这里首先在配置文件中输入下面代码1
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
然后生效
tmux中复制方式
如果有多个窗口则先control+b z进入单窗口全屏模式(退出同样的指令)
然后按住option键通过鼠标选中需要复制的文本行,释放鼠标后,选中文本行会自动复制到剪贴板
手动挂载硬盘
- 输入
sudo fdisk -l
查看硬盘信息 - 创建一个挂载目录
mkdir /media/hdc/DATA1
- 挂载
sudo mount /dev/sda2 /media/hdc/DATA1
开机自动挂载硬盘
- 创建挂载文件目录
1
mkdir /media/hdc/DATA1
- 查看键盘uuid
1
sudo blkid
- 编辑/etc/fstab文件开机后硬盘会自动挂载到/media/hdc/DATA1目录下
1
UUID=084A53DC4A53C55A /media/hdc/DATA1 ntfs defaults,utf8,uid=1000,gid=1000 0 0
ssh远程快速复制当前绝对路径
为实现快速复制当前绝对路径在.bashrc
中配置了快速复制的指令,如下1
2
3
4
5
6
7
8function cpwd { # cpwd可以替换成其他指令
if [ $# -eq 0 ]
then
echo "$(pwd)" | xargs echo -n | pbcopy && pwd # pbcopy 需额外安装 本地使用安装xclip
else
echo -n $(pwd)/$1 | pbcopy && echo $(pwd)/$1
fi
}
xclip需要手动安装
本地使用
ubuntu
- 使用 apt-get 安装 xclip
sudo apt-get install xclip -y
- 注册 alias 到 ~/.bash_profile
1
2
3
4vim ~/.bashrc
# 添加内容
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o' - 载入 ~/.bash_profile
source ~/.bashrc
- 使用 pbcopy 将文件内容复制到剪切板
pbcopy < key_words.txt
centos
- 使用 yum 安装 xclip
sudo yum install xclip
- 注册 alias 到
~/.bash_profile
1
2
3
4vim ~/.bash_profile
# 添加内容
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o' - 载入
~/.bash_profile
source ~/.bash_profile
- 使用 pbcopy 将文件内容复制到剪切板
pbcopy < key_words.txt
ssh 远程 (需搭配iterm2)
感谢大佬提供的远程pbcopy工具,需要搭配iterm使用
下载
curl -fsSLo pbcopy-linux-amd64.tar.gz https://github.com/skaji/remote-pbcopy-iterm2/releases/latest/download/pbcopy-linux-amd64.tar.gz
解压
tar xf pbcopy-linux-amd64.tar.gz
将解压后的文件移动到$PATH文件夹中,我这里直接丢到anaconda的bin里面了
mv pbcopy /anaconda/bin/
ssh 远程 (无需iterm2, 没试过,给出git地址)
SSH反向代理
因为平时数据文献都在学校的台式机,虽然学校服务器可以在校外远程登录,但台式机只能通过向日葵等远程控制软件。现在通过带公网ip的私人服务器 反向代理实现随时随地ssh上学校台式机
学校台式机A 只能内网
带公网ip的服务器B
最好在A上配置B的免密登录
台式机A上开启反向代理
1 |
|
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-L 将本地机的某个端口转发到远端指定机器的指定端口
这行指令是将台式机A的22端口通过服务器B的端口B_port暴露出来,这样访问服务器B端口B_port的指令就会转发到台式机A的22端口
这时候去服务器B输入指令ssh -p B_port A_user:localhost
后输入密码可以登录到台式机A说明配置成功
PS: SFTP也是基于ssh的,所以类似PDF Export等支持SFTP的可以配置好,直接访问台式机上的文献。
autossh
ssh反向有时候会断掉,所以这里可以用autossh
- 先安装autossh
1
sudo apt install autossh
- 配置
1
autossh -M 12345 -fgnvNTR aliyun:2220:localhost:22 root@aliyun
-M是通过监听12345端口防止断连
批量解压
find ./ -type f -name "*.zip" -exec unzip -o {} -d ./ \;
find ./ -type f -name "*.zip"
:在当前目录下查找所有后缀为.zip
的文件,包括子目录,用-type
指定文件类型,-name
指定匹配规则;- -exec:对每个查找到的文件执行指定的命令;
unzip -o {} -d ./
:对每个.zip文件执行解压到指定目录的操作,{}
表示被查找到的.zip
文件名,-o
参数表示覆盖同名文件,-d
参数指定解压目录。\;
:shell中执行多个语句末尾固定操作,\
表示换行,;
参数表示多个语句。
设置autossh开机自启动
创建systemd文件
1
sudo vim /etc/systemd/system/autossh.service
编写内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=autossh
After=network-online.target
[Service]
Environment="AUTOSSH_GATETIME=0"
User=userA
WorkingDirectory=/home/userA
ExecStart=/usr/bin/autossh -M 12345 -gnvNTR aliyun:2220:localhost:22 root@aliyun -o ServerAliveInterval=600
[Install]
WantedBy=multi-user.target需要注意的是参数为-gnvNTR而不是-fgnvNTR,因为在systemctl中不支持f参数,不要复制粘贴错了,会无法运行的。
Reload systemd
1
sudo systemctl daemon-reload
Start the Autossh service
1
sudo systemctl start autossh.service
- Enable at boot
1
sudo systemctl enable autossh.service
查看状态
1
sudo systemctl status autossh
解决SSH 长时间不操作卡死
在台式机A输入1
2vim /etc/ssh/ssh_config
ServerAliveInterval 60在服务器B输入
1
2vim /etc/ssh/ssh_config
ServerAliveInterval 60
Git仓库
安装
apt install gituser
创建用户
- 创建用户
useradd -m gituser
设置密码
passwd gituser
切换到git用户
su - gituser
初始化一个仓库
git init --bare project1.git
建立连接(或下载远端代码)
git clone git@IP:project1.git
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!