基于 CentOS 系统
一、常见操作
1)文件操作
命令
描述
ls
列出当前文件夹下的文件
ls -alh
列出包括隐藏文件在内的所有文件,显示详细信息,并以人类可读的方式显示占用的磁盘空间大小
touch [FILE]
创建文件
vim [FILE]
打开文件
cat [FILE]
打印文件
head [FILE]
打印文件头 10 行,展示 20 行用 head -n 20 [FILE]
tail [FILE]
打印文件尾 10 行,展示 20 行用 tail -n 20 [FILE]
tail -f [FILE]
实时查看文件的末尾新增的内容,一般用于打印监控日志
less [FILE]
打印文件,可以用 上键 下键 翻页
rm [FILE]
删除文件
rm -rf [DIR]
递归删除路径DIR下所有文件
mv [FILE_A] [FILE_B]
文件FILE_A改名为FILE_B
mv [FILE] [DIR]
文件FILE移动到路径DIR
cd [PATH]
打开目录PATH
mkdir [PATH]
创建目录
mkdir -p [PATH/TO/DIR]
创建多级目录
tar cvf file.tar ./data
把 data 目录 压缩成 file.tar 文件
tar xvf file.tar
解压 file.tar 文件
2)网络操作
命令
描述
lsof -i
列出所有与网络连接有关的进程及其打开的端口信息
lsof -i :[PORT]
列出特定端口的进程信息
lsof | grep deleted
列出占用未被正确删除的文件的句柄的进程
ifconfig
查看有效的网络接口的状态
ifconfig -a
查看所有的网络接口的状态
arp -a
查看局域网中设备的ip地址
ping [SERVER_IP]
检查远端服务器连通性
telnet [SERVER_IP] [SERVER_PORT]
检查远端服务器的端口的连通性
hostname -I
awk ‘{print ( 1}’
wget [URL]
下载文件到当前路径
curl [URL]
访问网页
netstat -tnpl
显示TCP类型的端口
netstat -unpl
显示UDP类型的端口
netstat -r
显示路由表信息
netstat -g
显示多重广播功能群组组员名单
netstat -s
显示按协议分类统计信息
netstat -l
显示所有监听端口
netstat -n
使用域名解析,将域名解析成ip地址
netstat -p
显示程序名和进程PID
netstat -t
显示所有的tcp协议的端口
netstat -u
显示所有的udp协议的端口
ssh -p [SERVER_PORT] [USER]@[SERVER_IP]
ssh连接远端服务器
ssh-keygen -R [SERVER_IP]
同IP机器重装后重连前注销老host
dig [example.com]
是 Linux 系统用于查询 DNS 信息的工具
3)系统操作
命令
描述
top
查看CPU占用率
hostname
查看主机名
uname -m
查看linux架构
uname -a
查看系统详细信息
cat /etc/centos-release
查看centos版本
ps aux
查看进程
ps -ef
查看进程
kill -9 [PID]
杀掉进程[PID]
df -h
查看磁盘空间
du -h / | sort -rh
根据文件磁盘占用倒排
du -h --max-depth=1
查看当前目录占用的磁盘空间大小
history
查看历史命令
type [CMD]
查看命令所在路径,如type mkdir
echo )LANG
查看字符编码
su -
切换到root用户
pip cache purge
pip缓存清理
conda clean --all
conda缓存清理
ldd --version
查看 GLIBC 版本
4)文本处理
命令
描述
awk
取列
awk -F
指定分割符取列
grep -v
查找不包含特定匹配模式的行
wc -l
输出文件的行数
echo “ABC” > [FILE]
将文本ABC写入文件FILE行尾
echo “ABC” » [FILE]
用文本ABC覆写文件FILE
5)Bash 表达式
命令
描述
-gt
大于
-lt
小于
-eq
等于
-ne
不等于
-ge
大于等于
-le
小于等于
!
非
==
等于
=~
正则匹配,等式右侧写正则表达式
-a file
如果file存在则为真
-d file
如果file存在且为目录则为真
-f file
如果file存在且为普通文件则为真
sleep 1m
休眠一分钟
export PATH=[/some/new/path]:( PATH
新增环境变量/some/new/path
)#
保存传递给shell脚本的命令行参数的数量
( *
保存所有传递给shell脚本的命令行参数 ( )1 ( 2 …)
)@
保存所有传递给shell脚本的命令行参数 ("\( 1" " \)2" …)
( 0
保存shell脚本的名字
)?
保存上一个执行的命令的退出码
set -x
脚本调试命令,会打印当前脚本执行的所有命令及其参数
6)vim 命令
以下命令需用 vim 打开文件,再按 esc 后输入,再按 enter 执行
命令
描述
a
切换到编辑模式。唯独这个直接按a就行,不用先按esc
:q
退出文档,不保存
:q!
强制退出文档
:x
保存后退出
:wq!
强制保存退出
:set paste
切换到粘贴模式
/[TEXT]
查找[TEXT],按n下一个
:help
打开帮助文档
7)GPU 命令
命令
描述
nvidia-smi
显示 GPU 摘要信息
二、后台运行
后台运行 Bash 命令的两种方式:
[CMD] &: 后台运行,关掉终端会停止运行
nohup [CMD] &: 后台运行,关掉终端不会停止运行
三、快捷指令
在 MacOS 终端用 短指令 替代 长指令,可以用 alias,步骤如下:
首先打开 ~/.bash_profile 配置文件,添加以下内容:
# alias
# remote server
user=[REMOTE_SERVER_USERNAME]
ip=[REMOTE_SERVER_IP]
alias login="ssh -p 22 \( {user}@ \){ip}"
alias jupyter="ssh -L9999:localhost:8888 \( {user}@ \){ip}"
然后在终端运行:
source ~/.bash_profile
此时,login 和 jupyter 两个短指令,就能替代等式右侧的两个长指令了。
Note: CentOS 系统同理,区别是 CentOS 的配置文件是 ~/.bashrc
四、用户系统
创建 一个系统用户,其中 -m (--create-home) 参数可选。
# 创建用户使用如下命令
useradd [USERNAME]
# 或
useradd -m [USERNAME]
选项 -m 代表创建用户时,为用户创建 /home/[USERNAME] 目录。
验证 系统用户是否存在:
id [USERNAME]
改密:
passwd [USERNAME]
删除 系统用户:
userdel [USERNAME]
切换 系统用户:切换到用户 [USERNAME]
su [USERNAME]
五、环境部署
1)更新 yum
yum update -y
yum upgrade -y
yum --version
2)安装 java
yum install -y java-1.8.0-openjdk
# 验证 java 是否安装成功
java -version
3)安装 pip3
yum install epel-release
yum install python3-pip
pip3 install --upgrade pip
# 验证 pip3 是否安装成功
pip3 --version
4)安装 jupyter 和 notebook
pip3 install jupyter notebook
# 验证 jupyter notebook 是否安装成功
jupyter notebook --allow-root
5)安装 rust
参考:rust-lang.org
# 安装
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
运行 vim ~/.bashrc,将以下内容添加到 .bashrc 文件中
rust_bin=~/.cargo/bin
if [[ ! \( rust_bin =~ [* \)PATH*] ]]; then
export PATH=\( rust_bin: \)PATH
fi
运行 source ~/.bashrc,以初始化环境变量
Note: 卸载 rustup
rustup self uninstall
6)安装 miniconda3
参考:docs.conda.io
# 安装
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
# 初始化 shell
~/miniconda3/bin/conda init bash zsh
# 使配置生效
source ~/.bashrc
# 验证安装
conda --version
conda info --envs
which python
# 打开 jupyter notebook
jupyter notebook
jupyter notebook --allow-root # 在 root 环境打开
nohup jupyter notebook --allow-root & # 在后台挂着
7)miniconda3 换 Kernal
安装依赖
pip install ipykernel
创建虚拟环境
conda create -n py27 python=2.7 # 创建名为 py27 的 Python 2.7 新环境
conda activate py27 # 激活新环境
# 为当前 Python 环境安装 ipykernel
python -m pip install ipykernel
# 将新环境加入 jupyter notebook 的 kernel 中
python -m ipykernel install --user --name py27 --display-name "Python (py27)"
随便创建一个 .ipynb 文件,在导航栏点击:Kernel -> Change Kernel -> Python (py27)
检查新 kernel 是否生效,在 jupyter notebook 运行
import sys
sys.executable
输出:'/home/[USER_NAME]/miniconda3/envs/py27/bin/python'
8)虚拟环境安装 jupyterlab
适用于 GLIBC 版本较低的服务器。
# 安装虚拟环境,指定 Python 版本为 3.6
mkdir -p ./venv/jupyter/
python3.6 -m venv ./venv/jupyter/
# 安装 jupyterlab 并激活
cd ./venv/jupyter/bin
./pip3 install --upgrade pip
./pip3 install jupyterlab==3.2.9 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
. ./activate
# 在后台启动 jupyterlab
./jupyter-lab --notebook-dir=/ --ip=0.0.0.0 --port=8888 --no-browser
9)为 conda 添加镜像源
如果国内 conda 下载速度慢,你需要切换镜像源。
切换到清华源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels 会将新镜像源添加到频道列表的顶部 ,这意味着新添加的频道具有更高的优先级。使用以下命令可以查看当前频道列表:
conda config --show channels
可以再顺手更新下 conda:
conda update conda
六、文件传输
1)使用 SCP
用于 远端服务器 之间互传文件。
scp [SOURCE_FILE] [USERNAME]@[DESTINATION_SERVER_IP]:[/PATH/TO/DIR]
上述命令的含义是:
把当前路径下的 [SOURCE_FILE] 文件 传到 [DESTINATION_SERVER_IP] 主机 的 [USERNAME] 用户 的 [/PATH/TO/DIR] 目录 下。
举个栗子 (=゚ω゚)= 🌰
scp data.tar [email protected]:/home/jane/code
注意:SCP 只能传单个文件,不能传文件夹。传文件夹可以把它压缩成 tar 文件再传
2)使用 rc 和 sz
用于 远端服务器 与 本地电脑 互传文件。
安装依赖:
yum -y install lrzsz
传输命令:
rc (receive zmodem): 上传到服务器
sz (send zmodem): 下载到本地
常见参数:
-a: 以文本形式传输 (ASCII),如果可以确认传输的是文本,可选此参数
-b: 以二进制形式传输 (BINARY)
-e: 对控制字符转义,以保证文件传输正确
可以用 rc --help 查看更多参数。
Note: rc sz 需要配合客户端使用
Windows 推荐用 Xshell
MacOS 推荐用 SecureCRT
3)使用 Samba
用于 远端服务器 与 本地电脑 互传文件。
查看是否已经安装 Samba
CentOS: rpm -qa | grep samba
Ubuntu: dpkg -l | grep samba
① 安装依赖
CentOS: yum install -y samba samba-client samba-common
Ubuntu: sudo apt install -y samba samba-client
请确保系统至少有一个用户,以下命令用于确认是否有名为 [USER] 的用户:
id [USER]
> uid=1000([USER]) gid=1000([USER]) groups=1000([USER])
② 创建 Samba 用户,Samba 用户必须是系统实际存在的用户
为用户设置 Samba 密码
smbpasswd -a [USER]
按提示要求,输入 Samba 账号密码即可。
查看 Samba 服务器中已拥有哪些用户: pdbedit -L
删除 Samba 服务中的某个用户: smbpasswd -x [用户名]
③ 创建分享文件夹
在目录 /share/ 下新建名为 sambashare 的文件夹
mkdir -p /share/sambashare
修改分享文件夹的权限
chmod 777 /share/sambashare
④ 修改 Samba 配置文件
运行 vim /etc/samba/smb.conf 打开配置文件,并添加以下内容,注意 valid users 是指定允许访问的用户。
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print\( ]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
[sambashare]
comment = share folder
path = /share/sambashare
browseable = yes
writable = yes
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777
public = yes
valid users = root
⑤ 重启 Samba 服务
CentOS 6
sudo systemctl restart smb
sudo systemctl enable smb
CentOS 7
sudo systemctl start smb.service # 启动 samba
sudo systemctl restart smb.service # 重启 samba
sudo systemctl enable smb.service # 设置开机自动启动
sudo systemctl status smb.service # 查询 samba 状态
Ubuntu 16.04.3
sudo service smbd restart
重启后检查 smb 服务是否启动,两种方法:
1)用 systemctl
# 查询 Samba 服务的状态
\) systemctl status smb
2)用 smbclient
smbclient //localhost/sambashare -U root
输入 smb 用户密码,如果显示 smb: \> 则表示成功。
⑥ 端口加白
查看 Samba 服务占用的端口:
netstat -tnpl | grep smb # TCP 端口
netstat -unpl | grep smb # UDP 端口
然后在 PaaS 服务供应商处为对应端口加白。
⑦ 测试端口连通性
在本地命令行执行以下命令,确认远端服务器的端口可连通:
telnet [SERVER_IP] [SERVER_PORT]
⑧ 本地电脑连接 smb 服务
MacOS 系统:在访达中输入快捷键 CMD+K 打开 Connect to Server 页面
输入 smb://[YOUR_SERVER_IP]/sambashare 点击 Connect 连接你的 smb 服务。
Windows 系统:在文件地址导航栏输入 \\[YOUR_SERVER_IP] 后回车。
七、例行任务
查看 例行任务配置文件:
crontab -l
修改 例行任务配置文件:
crontab -e
例行任务的执行时间:
定时任务的执行时间由 5 个值决定,形如 1 3 * * *
5 个值的含义分别是:[minute] [hour] [day of month] [month] [day of week]
表达方式:
*: 代表每一(天)执行,取值 1, 2, 3, …
*/2: 代表每两(天)执行,取值 0, 2, 4, …
3-5: 代表取值 3, 4, 5
下面是五个例子:
1 3 * * * [CMD] # 每天凌晨 3 点 1 分执行任务
1 3 * * 2-4 [CMD] # 周二、周三、周四的凌晨 3 点 1 分执行任务
1 3 15 * * [CMD] # 每个月 15 号的凌晨 3 点 1 分执行任务
0 */2 * * * [CMD] # 每隔两个小时,在整点执行任务,时间取 0点、2点、4点 ...
1 3 15 3 * [CMD] # 每年 3 月 15 号的凌晨 3 点 1 分执行任务
可以在 crontab.guru 上调试。
Note: 注意,cron 不在命令行环境中运行,需单独为 cron 初始化环境变量
八、端口映射
将远端服务器的端口映射到本地电脑上:
ssh -L[LOCAL_PORT]:localhost:[REMOTE_PORT] [USER]@[SERVER_IP]
Note: 举例,命令 ssh -L9999:localhost:8888 [email protected]
的含义是把远端服务器 132.43.75.194 上的用户 musk 的 8888 端口,映射到本地 9999 端口。
九、文件系统
安装一个叫 tree 的命令行工具,它能打印目录结构
yum install tree
限制打印目录深度为 1 层:
tree -L 1
.
├── bin -> usr/bin: 包含了很多基础 shell 命令的可执行文件,如 cp, mkdir
├── boot: 系统内核和启动镜像
├── dev: 包含关于设备的特殊文件,如 random, null
├── etc: 包含系统配置文件
├── home: 用户个人数据
├── lib -> usr/lib: 系统软件库,一般被 /bin 和 /sbin 路径下的可执行文件调用
├── lost+found: 文件系统发生错误后找回数据用的
├── media: 移动磁盘插入时,会在此目录下生成磁盘路径
├── mnt: 与 /media 类似,但不会自动挂载磁盘,而由系统管理员手动挂载
├── opt: 存储系统和外部软件代码,对应的可执行文件一般在 /bin
├── proc: 当前运行程序与内核信息,如 cpuinfo, meminfo, [PID]
├── root: root的根目录
├── run: 存放运行时信息,与 /var/run 关系密切
├── sbin -> usr/sbin: 与 /bin 类似,但只允许 root 访问
├── srv: 存放由服务器的服务产生的数据
├── sys: 虚拟的文件夹,存在于内存中,随系统启动创建,包含 内核、内存、驱动 等信息
├── tmp: 用于存放临时文件,系统重启时清空
├── usr: 软件安装路径
└── var: 运行时信息,如登录信息 (/var/log/wtmp)。系统不会自动清理此目录
十、推荐的书
UNIX/Linux 系统管理技术手册
judasn / Linux-Tutorial
dunwu / linux-tutorial