Linux 运维手册

Linux 运维手册

基于 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