服务器常用命令操作
- 问题记录
- 释放显存或端口
- pycharm带指令运行,替代.sh指令运行
- pycharm相对路径出错
- Linux服务器创建新用户
- 灰屏处理
- 针对初始用户
- 针对使用过程中出现灰屏
- 情况一
- 情况二
- 端口占用无法kill的情况
- 个性化修改终端颜色
- 软连接
- Linux 服务器之间文件传输
- 参考博客或文章
问题记录
本博客为我使用服务器所遇到的常见问题汇总
释放显存或端口
- 通过
nvidia-msi
查看服务器显存情况。 - 最常见情况是存在未停止进程,确认该进程未使用后,可利用
kill -9 PID
命令直接释放。 - 复杂情况为,通过
nvidia-msi
未发现进程占用,或通过第二步后仍未释放显存,这时需要使用命令fuser -v /dev/nvidia*
查看僵尸进程 - 查看进程的指令还有
ps -ef
- 再利用
kill -9 PID PID PID
,可批量杀死僵尸进程,完成显存释放。 - 使用
python -m torch.distributed.launch
进行多GPU训练时,出现端口占用RuntimeError: Address already in use
报错也属于上述情况,可使用上述方法解决。 - 批量清理显卡中残留进程:
sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
清理指定GPU显卡中残留进程,如GPU 2:sudo fuser -v /dev/nvidia2 |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
pycharm带指令运行,替代.sh指令运行
有些开源程序常使用类似sh train.sh
在shell下完成程序运行,这样虽然方便简洁,但是不利于修改代码后debug出现的问题,因此需要借助pycharm等编辑器。
操作如图所示,将torch分布式命令作为script路径配置,其他参数统一到参数配置下
pycharm相对路径出错
遇到相对路径出错的情况,请注意检查Debug Configuration配置下的工作目录(Working Directory)是否正确
另外在Settings-Project-Project Structure下将文件目录加入到Sources下,也可在主界面下选中右键Mark Directory as Sources完成同样操作
Linux服务器创建新用户
Linux服务器上创建账户用到useradd命名,一般常用以下命令:
$sudo useradd -m -s /bin/bash userName // 在/home目录下新建userName目录
$sudo passwd userName //设置密码
会提示
Enter new UNIX password:
Retype new UNIX password:
passwd:password updated successfully
然后用新建的用户名和密码先登录服务器,不会出现界面,退出之后用管理员账号登录。
下面三个命令一般用不到,意思是在新建中不需要这三个命令,直接到配置桌面会话文件这一步。
$userdel -r userName //删除用户
$useradd userName //创建用户
$useradd -d /home/homeDir userName //增加home目录
==========================================================================================
因为登录自己新建的用户之后不会出现桌面,而是灰色的画面,需要配置桌面会话文件,需要先sudo su进入root,进入新建用户的路径下,比如/home/XXX。
$sudo su //进入root
$cd /home/usrDir //进入新建用户的路径下
$echo xfce4-session>.xsession
$cat .xsession
创建成功之后会出现以下文件和一行命令xfce4-session
完成上述步骤后
以上步骤在未安装xfce桌面的系统可以省略
==========================================================================================
在新账户下配置VNCSERVER,配置和重启都需要带端口号。
例如:在新建账户SSH下完成以下操作:
(1)建立vnc
$vncserver :1
(2)修改xstartup文件,具体参照灰屏处理第一条
(3)杀死进程
$vncserver -kill :1
(4)重开进程完成配置,可添加分辨率修改指令
$vncserver :1 -geometry 1920x1080
灰屏处理
针对初始用户
创建初始用户时,可能登录vnc灰屏(不提示错误),这时一般是xsartup未配置桌面导致
不同的桌面修改xstartup文件的配置不一样,需要根据实际情况调整,本文以Meta桌面为例。
将x-window-manager &注释掉
增加mate-session &
注:可以使用vncserver -geometry 1600x900 :1修改分辨率
针对使用过程中出现灰屏
情况一
使用vncserver -kill :1
(共用服务器务必带端口号)命令重启VNCviewer后由bashrc中anaconda未注释造成的灰屏情况只需要注释修改bashrc相应部分执行重启步骤即可
情况二
VNC错误描述
vnc viewer开启后弹窗提示
Could not connect to session bus:
Failed to connect to socket /tmp/dbus-XXXXXXXXXX:
Connection refused
关闭弹窗后又提示
Could not acquire name on session bus
问题分析
一般情况下为错误使用vncserver -kill命令造成了~文件夹下的配置文件损坏.
修复方法
因为无法登陆图形界面, 所以在ssh下修复, 具体方法如下:
登陆ssh, 关闭自己开启的vncserver进程
备份~文件夹下重要的隐藏文件, 如.bashrc文件
cp ~/.bashrc ~/bashrc.bak
删除~文件夹下所有隐藏文件
rm -rf ~/.*
输入exit登出账户, 再重新登陆ssh
重置~文件夹下的默认配置文件
cp -r /etc/skel/. /home/usrname
输入exit登出账户, 再重新登陆ssh
如果出现端口被占用无法kill端口
- 可能其他子账户错误登录端口,导致复用,使用其他账户退出,再kill后重启vnc即可。
- 未出现其他端口占用,可能是端口锁定导致,删除/tmp/路径下和/tmp/.X11-unix/路径下的对应端口。
- 使用命令
ps aux | grep XXX
命令寻找Xvnc4 相关的进程kill后重启端口vnc即可。
端口占用无法kill的情况
使用sudo pkill -u username
的方式终止该账户下的所有进程即可
个性化修改终端颜色
本文操作的例子操作系统为:Ubuntu 18.04 LTS
对于用户的配置,我们应该将配置信息写入~/.bashrc文件。
Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧1、颜色配置
为了设置终端颜色,我们需要对~/.bashrc文件中的PS1变量进行定制。首先通过“vim ~/.bashrc“命令打开文件,找到PS1变量所在位置:
Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧
bashrc文件中的PS1变量
上图就是我们需要修改的命令行提示符的颜色设置。
注释掉 #force_color_prompt=yes。在颜色模式打开的情况下,PS1变量代表的内容就是用户名+主机名+路径名(长路径)+ $
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
现在,我们就需要对显示的信息的字体颜色进行设置,首先看一下颜色是如何设置的:
一个单独的颜色设置: \033[代码;前景;背景m ,如:[\033[1;32;40m]表示高亮显示字体为绿色,背景色为黑色。
注意:颜色的设置,放在相应的要设置的前面,如用户名颜色设置: [\033[01;35;40m]\u
我们可以把第一个PS1替换成如下代码:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35;40m\]\u\[\033[00;00;40m\]@\[\033[01;35;40m\]\h\[\033[00;31;40m\]:\[\033[00;00;40m\]\w \[\033[01;32;40m\]\$ \[\033[01;36;40m\]'
Ubuntu Linux终端颜色个性化设置技巧Ubuntu Linux终端颜色个性化设置技巧
或者我们把第一个PS1替换成如下代码
PS1='\[\e[37;1m\][\[\e[31;1m\]\u\[\e[34;1m\]@\[\e[32;1m\]\h \[\e[31;1m\]\w \[\e[33;1m\]\t\[\e[37;1m\]]\[\e[32;1m\]\$\[\e[m\]'
然后你重启终端,就可以看到刚才的配色效果,或者执行 source ~/.bashrc 命令也可以运行刚才的新配色终端。如下:
以下对PS1变量的设置进行具体分析,首先我们要知道如下几张表:
下面来说说配色的过程:
前景 背景 颜色
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色
1 透明色
代码 意义
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见
在终端菜单→编辑→首选项→未命名→颜色,选择透明背景,调成你喜欢的透明度即可。
软连接
这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,
具体用法是:ln -s 源文件 目标位置
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
如果要删除软连接,直接删除刚刚新建的目标文件就好了。
或者使用删除软连接指令:sudo unlink 目标位置 或 rm 目标位置
Linux 服务器之间文件传输
linux的scp命令:
scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器.
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。
1、将本机文件复制到远程服务器上
命令:
scp file_path_1 root@192.168.1.1:file_path_2
例子:
scp /home/administrator/news.txt root@192.168.1.1:/etc/squid
说明:
file_path_1:本地文件的绝对路径
root:表示通过root用户登录到远程服务器(也可以是目标服务器的其他用户)
192.168.1.1:目标服务器的ip地址
file_path_2:要存储在目标服务器的地址(目录)
步骤:
首先会提示输入yes or no 建立ssh链接
按照提示输入登录用户的密码
然后会显示百分比开始复制文件、实际时间和传送速度等信息
2、将远程服务器上的文件复制到本地
命令:
scp root@192.168.1.1:file_path_1 file_path_2
例子:
scp remote@www.abc.com:/usr/local/sin.sh /home/administrato
说明:
root:表示通过root用户登录到远程服务器(也可以是远程服务器的其他用户)
192.168.1.1:是服务器的ip,当然也可以是网址。
file_path_1:表示的是欲复制到本机的位于远程服务器上的文件
file_path_2:表示的是将远程文件复制到本地的绝对路径
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
附加:
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
1.命令格式:
scp [参数] [原路径] [目标路径]
2.命令功能:
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
3.命令参数:
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。 注:当复制目录的时候用这个
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
4.使用实例:
scp命令的实际应用概述:
从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
实例1:从远处复制文件到本地目录
命令:
scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/