远程服务器简略指南
- 远程登录
- 日期时间日历
- 快捷键
- 帮助文档
- 文件权限
- 看到156
- pip使用镜像
- TensorFlow
- Python含中文无法运行
- 压缩解压
- 安装Jupyter notebook
- Git
- 后台启动脚本nohup
- 前端报错net::ERR_CONNECTION_REFUSED
- 下载上传文件
- MobaXterm 快捷键
- Windows 与 Linux 路径兼容
- 杀进程
- 查看日志
- 查看磁盘空间
- 查看磁盘配额
- 查看文件数量和大小
- 修改登陆目录
- 包含字符串的文件
- 删除、移动、复制
- 基本信息
- 常用软件
- 安装环境
- 虚拟环境
- 命令行界面
- 系统命令
- 统计出现次数
- 查看安装包的大小
- 查看安装过的软件
- 卸载软件
- 下载软件
- 清空屏幕和输入
- 历史命令
- 查看 IP
- 用户及其权限
- 查看架构
- 查看CPU占用
- 查看内存占用
- 黑客帝国
- swp已存在
- 查看端口占用情况
- 切换用户
- pip指向pip3
- 用户组
- 修改密码
- 查找文件
- 查看文件MD5
- 查看IP端口是否通
- 查看配置
- 守护进程
- 判断后端接口走的是内网还是公网
- 遇到的坑
- 参考文献
远程登录
Linux的远程登录使用SSH
- Windows 连 SSH 用 MobaXterm,可直接拖文件传到服务器,保持远程连接:Settings→勾选SSH keepalive
- Ubuntu 连 SSH 用 FinalShell
PS:若是内网,需要先连VPN
建议:
日期时间日历
日期时间:date
日历:cal
快捷键
- 补全 / 显示所有命令:Tab 或两次 Tab
- 中断目前程序:Ctrl + C
- 离开命令行:Ctrl + D
- 前一个单词:Alt + B
- 后一个单词:Alt + F
- 删除一个单词:Ctrl + W
- 删除光标前所有:Ctrl + U
- 删除光标后所有:Ctrl + K
- 删除光标前的单词:Ctrl + W
- 光标移动到行开头:Ctrl + A(同 Home)
- 光标移动到行结尾:Ctrl + E(同 End)
- 反向增量搜索历史:Ctrl + R
- 反向非增量搜索历史:Alt + P
帮助文档
命令的帮助文档:date --help
命令的使用说明:man date
第一行 DATE(1) 的 1 代表一般用户可使用的命令。5 代表配置文件。8 代表系统管理员可用的命令。
按下 / 可搜索字符串,n 为下一个,N 为上一个
命令的分页说明:info date
文件权限
列出所有文件及其权限:ls -al
-rwxrw-r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
- ↑ 文件类型 rwx ↑ 拥有者权限 rw- ↑ 用户组权限 r - - ↑ 其他人权限 1 ↑ 链接数 root ↑ 文件拥有者 root ↑ 文件用户组 1864 ↑ 文件大小 May 4 18:01 ↑ 文件最后修改时间 initial-setup-ks.cfg ↑ 文件名 \stackrel{\text{文件类型}}{\overset{\uparrow}{\text{-}}} \quad \stackrel{\text{拥有者权限}}{\overset{\uparrow}{\text{rwx}}} \quad \stackrel{\text{用户组权限}}{\overset{\uparrow}{\text{rw-}}} \quad \stackrel{\text{其他人权限}}{\overset{\uparrow}{\text{r - -}}} \quad \stackrel{\text{链接数}}{\overset{\uparrow}{\text{1}}} \quad \stackrel{\text{文件拥有者}}{\overset{\uparrow}{\text{root}}} \quad \stackrel{\text{文件用户组}}{\overset{\uparrow}{\text{root}}} \quad \stackrel{\text{文件大小}}{\overset{\uparrow}{\text{1864}}} \quad \stackrel{\text{文件最后修改时间}}{\overset{\uparrow}{\text{May 4 18:01}}} \quad \stackrel{\text{文件名}}{\overset{\uparrow}{\text{initial-setup-ks.cfg}}} -↑文件类型rwx↑拥有者权限rw-↑用户组权限r - -↑其他人权限1↑链接数root↑文件拥有者root↑文件用户组1864↑文件大小May 4 18:01↑文件最后修改时间initial-setup-ks.cfg↑文件名
第一个字符为文件类型
- -:文件
- d:目录
- l:链接文件
权限字符每三个为一组,分别为拥有者权限(owner)、用户组权限(group)、其他人权限(others)
- r:可读(read)
- w:可写(write)
- x:可执行(execute)
修改用户组:chgrp
修改拥有者:chown
修改文件权限:chmod
递归修改文件夹权限到最大
chmod -R 777 xxx
赋予用户某文件夹读写执行权限
chmod -R 0744 xxx # 用户有读写执行权限,组和其他用户只有读权限
setfacl -R -m u:某用户:rwx 某路径
看到156
pip使用镜像
清华或豆瓣镜像
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xxx -i https://pypi.doubanio.com/simple/
装不上的话可以试试加参数 --user
TensorFlow
- 查看 CUDA 和 cuDNN
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
- pip 安装 tensorflow-gpu
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==1.4 --user
- 测试代码
import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c)) # 看使用的是CPU还是GPU
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]
[49. 64.]]
- 查看 GPU 使用情况
nvidia-smi
Python含中文无法运行
程序首行加上
# -*- coding: utf-8 -*-
压缩解压
ZIP
压缩:zip -r mydata.zip mydata
解压:unzip -o -d ./ file.zip
压缩多个文件:zip test.zip a b c
压缩所有mp4文件:zip -r a.zip *.mp4
TAR
打包:tar -zcvf a.tar a.txt
解压:tar -xvf a.tar
查看文件名:tar -tvf a.tar
删除文件(先解压再打包):tar -zxvf file.tar.gz --exclude "file_to_exclude"
安装Jupyter notebook
安装火狐浏览器
yum install firefox
安装Jupyter notebook
pip install jupyter
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install yapf
进入 jupyter notebook 后发现Nbextensions
- Code prettify:代码格式化
- Collapsible Headings:折叠Headings区域
- ScrollDown:输出过长时,自动下拉滚动条
- Table of Contents (2):根据Markdown的标题栏自动生成目录
- Codefolding:折叠代码块
Git
-
安装Git
yum install git
-
查看版本
git --version
-
生成SSH密钥:
ssh-keygen -t rsa -C 你的邮箱
→回车→打开id_rsa.pub→添加到GitLab的SSH Keys中
-
克隆项目
git clone xxx.git
PS:如果GitLab是内网自建的话,外网要操作的话要映射到外网
后台启动脚本nohup
后台启动:nohup 具体命令 &
输出默认保存到nohup.out:nohup python3 -u xxx.py &
保存输出:nohup python3 -u xxx.py > /tmp/test.log &
后台启动脚本命令nohup
返回pid
显示当前终端任务:jobs
结束进程:kill 某pid
强制结束进程:kill -9 某pid
查看进程:ps -ef | grep python
丢弃所有输出:nohup python main.py 2>&1 >/dev/null &
(将标准错误输出重定向到标准输出,然后将标准输出重定向到 /dev/null,这样就会丢弃所有的输出,既不会显示在终端上,也不会保存到文件中。这通常用于在执行命令时忽略不需要的输出或错误信息。)
前端报错net::ERR_CONNECTION_REFUSED
http://localhost:8080
改成 http://本机IP:8080
下载上传文件
下载文件:sz xxx
→ 右键 → Receive file using Z-modem
上传文件:rz xxx
→ 右键 → Send file using Z-modem
下载文件夹可通过先压缩后下载的方式实现
sz 很慢,推荐用 scp 或 rsync
推荐阅读
还可以通过 Windows PowerShell 上传
cd 要上传的文件的目录
sftp 用户名@host
cd 要存放的目录
put 某文件
有可能设置了用户的磁盘限额很小,导致上传的文件特别小,这时候需要问运维有没有比较大的公共目录
MobaXterm 快捷键
Settings → Keyboard shortcuts
打开右键功能:Settings → Terminal → 取消勾选【Paste using right-click】
Windows 与 Linux 路径兼容
Windows 与 Mac 和 Linux 的路径有区别:
- Windows 的路径:./data/pictures/
- Mac 和 Linux 的路径:/data/pictures/
Windows:./data/a.txt
Linux:/data/a.txt
判断系统
import platform
platform_system = platform.system()
if platform.system() == 'Windows':
print('Windows')
elif platform.system() == 'Linux':
print('Linux')
else:
print('Others')
详细阅读:Python os.path.join() 拼接路径少了一部分的坑
杀进程
查询自己开的进程:ps u
强制杀进程:kill -9 pid
查看日志
动态查看:tail -f log
查看末尾一百行:tail -n 100 log
过滤错误并查看其前后5行:cat log | grep -A 5 -B 5 ERROR
显示行号:cat -n log
从后往前翻:less log
取第11到20行:head -n 20 log| tail -n 10
取第11到20行并显示行号:cat -n log | head -n 20| tail -n 10
less abc.log
# 常用命令
G :移动到最后一行
g :移动到第一行
b:向上翻一页
按空格:向下翻一页
u:向上翻半页
d:向下翻半页
q: 退出 less 命令
查看磁盘空间
df -h
查看磁盘配额
quota -uvs user1
查看文件数量和大小
查看文件数量
ls | wc -w # 文件和文件夹数量
ls -l | grep "^-" | wc -l # 当前文件夹下的文件数量
ls -lR| grep "^-" | wc -l # 包括子目录的所有文件数
查看文件夹大小
du -sh # 当前文件夹大小
du -sh models # 指定文件夹大小
查看文件大小
ls -lh xxx
修改登陆目录
vi ~/.bashrc
添加 cd xxx
包含字符串的文件
含特殊字符,将反单引号 ` 替换为 \` ,其余用三引号包起来
find . | xargs grep -ri "123" -l
find . | xargs grep -ri """SELECT \`t1\`.\`id\`, \`t1\`.\`father_key\`, \`t1\`.\`key\`, \`t1\`.\`path\`, \`t1\`.\`cls\`, \`t1\`.\`root_category_id\`, \`t1\`.\`team_id\`, \`t1\`.\`order\`, \`t1\`.\`custom_key\`, \`t1\`.\`name\`, \`t1\`.\`desc\`, \`t1\`.\`create_at\`, \`t1\`.\`update_at\`, \`t1\`.\`delete_at\`, \`t1\`.\`file_md5\`, \`t1\`.\`zj_std_key\` FROM \`category_v3\` AS t1 WHERE (((\`t1\`.\`team_id\` = %s) AND (\`t1\`.\`path\` = %s)) AND ((\`t1\`.\`delete_at\` = %s) OR (\`t1\`.\`delete_at\` IS %s)))""" -l
find . -name "*.log" | xargs grep -ri "123" -l
find . -name "*.log" | xargs grep -ri """a""" -l
遇到的坑:
- grep: Invalid range end
内容含-
删除、移动、复制
复制文件夹
cp -r /a /b
删除文件夹
rm -r a/b
基本信息
查看操作系统发行版本
$ cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
查看内核版本
$ uname -srm
Linux 3.10.0-693.el7.x86_64 x86_64
常用软件
安装vim
sudo apt-get install vim-gtk
美化vim
sudo vim /etc/vim/vimrc
最后一行输入 → Esc → 保存并退出:wq
set nu
set tabstop=4
set cursorline
set ruler
set autoindent
set nobackup
效果如图
安装环境
sudo apt update
sudo apt install python3
sudo apt install python3-pip
设置清华源
sudo mkdir ~/.pip
sudo vim ~/.pip/pip.conf
输入
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
虚拟环境
创建虚拟环境并切换
python3 -m venv ./venv
source ./venv/bin/activate
创建独立的Python环境
sudo apt-get install python-virtualenv
virtualenv -p /opt/xxx/python3.6.4 python3.6.4
source /python3.6.4/bin/activate
退出环境
deactivate
命令行界面
进入命令行界面:Ctrl+Alt+F3
返回图形界面:Ctrl+Alt+F1
不行的话试试 F1 - F6
系统命令
history
:查看历史命令!序号
:执行历史命令,-1为倒数第一条命令名 --help
:查看命令帮助wget
:下载文件pwd
:当前路径,相当于cd ~
的路径cp a b
:复制 a 到 bmv a b
:复制 a 到 b
统计出现次数
grep -o 关键词 文件名 | wc -l
查看安装包的大小
sudo apt-get install xxx
,安装的时候会确认,查看安装 xxx 后占用的空间大小,安装后再查比较麻烦
查看安装过的软件
dpkg -l | grep xxx
卸载软件
卸载软件及其配置
sudo apt-get --purge remove xxx
卸载软件及其依赖的安装包
sudo apt-get autoremove xxx
下载软件
sudo dpkg -r xxx
清空屏幕和输入
清空屏幕:Ctrl + L 或 clear
清空输入:Ctrl + U
历史命令
查看历史:history
搜索历史:Ctrl + R
重复执行第 N 条命令:!n
查看所有历史:sudo cat ~/.bash_history
查看 IP
ifconfig -a
ip address
用户及其权限
切换用户
su xxx
查看所有用户及其权限
cat /etc/passwd
是否有 sudo 权限
sudo -l
groups # 查看是否在sudo组里
groups 用户名 # 查看是否在sudo组里
查看架构
dpkg --print-architecture
查看CPU占用
top
top -p pid
strace -p pid # 跟踪系统调用和信号
netstat -p | grep pid # 查看网络连接
查看完整用户名:按下大写 X,输入 5,回车
查看内存占用
free -m
free -tm # 内存总和、MB形式
free -tms 5 # 内存总和、MB形式、每5秒更新
free -g # 内存总和、GB形式
黑客帝国
sudo apt install cmatrix
cmatrix
swp已存在
rm -rf .xxx.swp
查看端口占用情况
ss -nlp | grep 某端口
kill -9 $(lsof -i tcp:进程号 -t)
切换用户
su - root # 切换到root身份
pip指向pip3
sudo ln -s /usr/bin/pip3 /usr/bin/pip
sudo ln -s /usr/bin/python3 /usr/bin/python
用户组
groups root # 查看某用户在哪个组里
usermod -a -G groupA user # 将用户添加到组里
修改密码
报 Warning: your password will expire in 4 days
chage --list user1 # 列出密码过期情况
chage -I -1 -m 0 -M 99999 -E -1 user1 # 改为永久不过期
或修改密码
passwd
查找文件
find . -name "*.c"
# 当前目录下查找
find . -name ""
# 系统目录下查找
find / -name ""
查看文件MD5
Windows
certutil -hashfile a.txt MD5
Linux
md5sum a.txt
查看IP端口是否通
telnet <IP地址> <端口号>
查看配置
CPU:
- 型号:
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
- 核数、线程数:
lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
- 频率:
cat /proc/cpuinfo |grep MHz|uniq
内存:
- 大小:
free -g
- 频率:
sudo dmidecode -t memory
显卡:
- 英伟达型号:
nvidia-smi
- AMD型号:
radeontop
硬盘:
- 大小:
df -h
- 写入速度:
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct && sync; rm testfile
守护进程
守护进程(daemon):在后台运行、独立于用户进程且通常在系统启动时启动的一种特殊的进程。常用于执行系统级任务、服务和周期性作业。
第一次fork:父进程创建子进程后退出,这时子进程不再接收终端信号。
第二次fork:子进程创建孙进程后退出,这时孙进程不会重新申请控制终端,成为了守护进程。
常见的终端信号:
- SIGINT (2):中断信号,通常由用户在终端按下 Ctrl + C 触发,用于中止当前进程。
- SIGKILL (9):强制终止信号。不能被捕获、阻塞或忽略,立即终止目标进程。
- SIGTERM (15):终止信号。用于请求进程正常终止,进程可以捕获这个信号并进行相应的清理操作后退出。
- SIGHUP (1):挂起信号。通常在终端关闭时发送给守护进程,通知进程重新初始化。
- SIGSTOP (17):停止信号。用于暂停目标进程的执行,但可以使用 SIGCONT 恢复。
- SIGCONT (18):继续执行信号。用于让已经暂停的进程继续执行。
- SIGTERM (15):中止信号。通常由系统管理员发出,用于请求进程优雅退出。
- SIGCHLD (20):子进程终止信号。当一个子进程终止或停止时向其父进程发送。
判断后端接口走的是内网还是公网
import socket
socket.gethostbyname("test-cloud.stomics.tech")
ping test-cloud.stomics.tech
遇到的坑
1. 使用 grep 报错 grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
unset GREP_OPTIONS
参考文献
- SSH原理与运用(一):远程登录
- Python pip使用国内镜像安装第三方库:命令行或Pycharm
- 从GitLab clone项目到本地
- permission denied (publickey)的解决方法
- linux-root用户可以git clone,但普通用户就不能git clone
- Linux网络状态工具ss命令使用详解
- MobaXterm技巧
- Mobaxterm 安装lrzsz插件?
- MobaXterm Documentation
- Linux下载文件夹下所有文件
- MobaXterm设置复制、粘贴等快捷键
- Grep: show lines before and after the match in Linux
- Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
- grep 过滤关键字不显示过滤命令本本身
- python工程师最常用的linux操作命令总结
- Rasa Installation
- Linux wget命令详解
- Linux环境下virtualenv安装和使用
- Pyppeteer从0开始学习记录
- ubuntu18安装python3, pip3并配置国内源
- Linux上传下载文件的几种方式
- Linux scp命令
- How to SCP from linux server to Windows client
- Linux 统计某个字符串出现的次数
- Linux用户及权限管理
- 15 個有趣好玩的linux shell 命令
- su、sudo、su - root的区别
- linux杀死占用某端口的所有进程
- How to set user password expirations on Linux
- Your password will expire in 15 days, how to disable it or set new expire date