基于 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缓存清理 |
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)安装 miniconda3
# 安装
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 -rf ~/miniconda3/miniconda.sh
# 初始化 bash 文件
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
# 使 bash 文件生效
source ~/.bashrc
# 验证 miniconda3 是否安装成功
conda info --envs
which python
# 打开 jupyter notebook
jupyter notebook
jupyter notebook --allow-root # 在 root 环境打开
nohup jupyter notebook --allow-root & # 在后台挂着
6)安装 rust
# 安装
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
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'
六、文件传输
1)使用 SCP
用于 远端服务器 之间互传文件。
scp [SOURCE_FILE] [USERNAME]@[DESTINATION_SERVER_IP]:[/PATH/TO/DIR]
上述命令的含义是:
把当前路径下的 [SOURCE_FILE]
文件 传到 [DESTINATION_SERVER_IP]
主机 的 [USERNAME]
用户 的 [/PATH/TO/DIR]
目录 下。
举个栗子 (=゚ω゚)= 🌰
scp data.tar jane@:132.43.75.194:/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)。系统不会自动清理此目录