# Linux

# Flag

# 包管理

第三方的软件包搜索引擎:

  • http://pkgs.org
  • http://rpmfind.net
  • http://rpm.pbone.net

# 软件套件

桌面环境

# 重装系统

# MeowLove

yum update
yum install -y xz openssl gawk file
# 下载脚本
wget --no-check-certificate 'https://raw.githubusercontent.com/MeowLove/Network-Reinstall-System-Modify/master/Network-Reinstall-System-Modify.sh'
# 给脚本授权
chmod a+x Network-Reinstall-System-Modify.sh
# 一键网络重装纯净CentOS 7
bash Network-Reinstall-System-Modify.sh -CentOS_7
# 一键网络重装纯净Windows Server 2019
bash Network-Reinstall-System-Modify.sh -Windows_Server_2019
  • 下载SHELL脚本(通过root用户运行)
wget --no-check-certificate -qO ~/Network-Reinstall-System-Modify.sh 'https://www.cxthhhhh.com/tech-tools/Network-Reinstall-System-Modify/Network-Reinstall-System-Modify.sh' 

chmod a+x ~/Network-Reinstall-System-Modify.sh
  • 安装Linux系统
# ①. 一键网络重装纯净CentOS 7(推荐)
bash ~/Network-Reinstall-System-Modify.sh -CentOS_7
# ②. 一键网络重装纯净CentOS 6
bash ~/Network-Reinstall-System-Modify.sh -CentOS_6
# ③. 一键网络重装纯净Debian 10(推荐)
bash ~/Network-Reinstall-System-Modify.sh -Debian_10
# ④. 一键网络重装纯净Debian 9
bash ~/Network-Reinstall-System-Modify.sh -Debian_9
# ⑤. 一键网络重装纯净Debian 8
bash ~/Network-Reinstall-System-Modify.sh -Debian_8
# ⑥. 一键网络重装纯净Ubuntu 18.04(推荐)
bash ~/Network-Reinstall-System-Modify.sh -Ubuntu_18.04
# ⑦. 一键网络重装纯净Ubuntu 16.04
bash ~/Network-Reinstall-System-Modify.sh -Ubuntu_16.04
# ⑧. 一键网络重装纯净Ubuntu 14.04
bash ~/Network-Reinstall-System-Modify.sh -Ubuntu_14.04
  • 安装Windows系统

警告:你需要购买来自Microsoft或其合作伙伴正版系统授权并激活系统使用。继续安装即代表您知悉并已经购买正版授权。

# ①. 一键网络重装纯净Windows Server 2019(推荐)
bash ~/Network-Reinstall-System-Modify.sh -Windows_Server_2019
# ②. 一键网络重装纯净Windows Server 2016
bash ~/Network-Reinstall-System-Modify.sh -Windows_Server_2016
# ③. 一键网络重装纯净Windows Server 2012 R2
bash ~/Network-Reinstall-System-Modify.sh -Windows_Server_2012R2
# ④. 一键网络重装纯净Windows Server 2008 R2
bash ~/Network-Reinstall-System-Modify.sh -Windows_Server_2008R2
# ⑤. 一键网络重装纯净Windows 7 Vienna
bash ~/Network-Reinstall-System-Modify.sh -Windows_7_Vienna
# ⑥. 一键网络重装纯净Windows Server 2003
bash ~/Network-Reinstall-System-Modify.sh -Windows_Server_2003
  • 安装裸机系统部署平台

仅适用于高端用户,手动安装任意系统。可通过网络ISO或iPXE安装任意系统。

bash ~/Network-Reinstall-System-Modify.sh -CXT_Bare-metal_System_Deployment_Platform
  • 安装DD系统

如果您不了解这意味着什么,请不要进行操作。%ULR%应该替换为您自己的映像地址。

bash ~/Network-Reinstall-System-Modify.sh -DD "%URL%"
bash <(wget --no-check-certificate -qO- 'https://zhujiwiki.com/wp-content/uploads/2018/04/InstallNET.sh') -dd 'https://hao.zhujiwiki.com/dd/CentOS_7.X_NetInstallation.vhd.gz'

# moeclub

适用于由GRUB引导的CentOS,Ubuntu,Debian系统

yum update
yum install -y xz openssl gawk file
# 下载脚本
wget --no-check-certificate 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh'
# 给脚本授权
chmod a+x InstallNET.sh
# 一键网络重装纯净CentOS 7
bash InstallNET.sh -c 7.6.1810 -v 64 -a --mirror 'http://mirror.centos.org/centos'

# 后台运行Daemon

在一个多任务的电脑操作系统中,Daemon/daemonize(守护进程)是一种在后台执行的电脑程序。此类程序会被以进程的形式初始化

通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。 守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程运行fork,然后使其父进程立即终止, 使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。

# supervisor

supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

常见配置如下

[program:程序名称]
user=root
command=/var/www/main
stdout_logfile=/var/log/gf-app-stdout.log
stderr_logfile=/var/log/gf-app-stderr.log
autostart=true
autorestart=true

使用步骤

  1. 使用sudo service supervisor start启动supervisor服务;
  2. 创建应用配置文件/etc/supervisor/conf.d/程序名称.conf, 内容如上;
  3. 使用sudo supervisorctl进入supervisor管理终端;
  4. 使用reload重新读取配置文件并重启当前supoervisor管理的所有进程;
  5. 也可以使用update重新加载配置(默认不重启),随后使用start 程序名称启动指定的应用程序;
  6. 随后可以使用status指令查看当前supervisor管理的进程状态;

# Tmux

tmux是一款Linux下的终端复用工具,可以开启不同的终端窗口来将应用程序作为后台守护进程执行,即使远程连接的SSH断开也不会影响程序的执行。

tmux分为3层,Session包含Window包含Panes

命令

可在命令后加--h查看命令帮助,如:tmux new --h

  • yum install -y tmux 安装
  • tmux new -s 会话名称 新建会话
  • tmux attach -t 会话名称 可进入到已经创建的会话
    • 可使用attach前一部分字母,如tmux a -t 会话名称
  • tmux ls 列出所有会话
  • tmux switch -t 会话名或会话编号 切换会话
  • tmux rename-session -t 会话名或会话编号 新会话名 重命名会话
  • tmux kill-session -t 会话名称 关闭会话
  • tmux kill-server 关闭所有会话
  • tmux split-pane -h 左右分屏
  • tmux spilt-pane -v 上下分屏
  • swap-window -s 3 -t 1  交换 3 号和 1 号窗口
  • swap-window -t 1 交换当前和 1 号窗口
  • move-window -t 1 移动当前窗口到 1 号
  • tmux new -s 会话名 -d "命令" 创建新会话并在后台执行命令
  • tmux neww -n 窗口名 -d "命令" 新建窗口名并在后台执行命令

快捷键

所有的快捷键都是先按一下Ctrl + B松开,这时快捷键生效再按其他按键

  • D 快捷键可以退出当前终端窗口
  • S 列出所有会话,此时可通过方向键和回车键切换
  • $ 重命名当前会话
  • % 左右分屏
  • " 上下分屏
  • : 进入tmux命令行
  • :new -s 会话名称 创建并进入新的会话(不存在父子级关系)
  • :kill-session 删除当前会话
  • :kill-server 删除所有会话
  • [PgUp 进入copy mode,查看tmux中的终端输出记录

PgUpPgDn光标 浏览历史输出了,按q退出

copy mode其实比较类似于vi/emacs里面一个只读buffer,可以移动光标,可以搜索,用C-SPC开始选择,选择完后用 M + w拷贝(会自动退出copy mode),]可以粘贴, =从剪贴板历史中选择。

开机运行

vi /etc/rc.local文件中按Shift + g(就是大写的G)跳转到末尾添加命令

如果进入tmux时进行和home相关的操作时提示$HOME未设定,加入设置home目录命令:export HOME=/home

为防止启动执行失败,最好执行一次chmod +x /etc/rc.d/rc.local进行授权

# 创建新会话并在后台执行命令
tmux new -s 会话名 -d "命令"

# Screen

Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

命令

  • yum install -y screen 安装
  • screen -S 会话名称 创建一个会话
  • screen -ls 列出所有的会话列表
  • screen -r 会话名称 恢复会话窗口
  • exit 关闭会话窗口

选项

  • -A 将所有的视窗都调整为目前终端机的大小。
  • -d <作业名称> 将指定的screen作业离线。
  • -h <行数> 指定视窗的缓冲区行数。
  • -m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
  • -r <作业名称> 恢复离线的screen作业。
  • -R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
  • -s 指定建立新视窗时,所要执行的shell。
  • -S <作业名称> 指定screen作业的名称。
  • -v 显示版本信息。
  • -x 恢复之前离线的screen作业。
  • -ls--list 显示目前所有的screen作业。
  • -wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。

快捷键

所有的快捷键都是先按一下Ctrl + A松开,这时快捷键生效再按其他按键

  • D 隐藏并保留当前会话
  • [PgUp 进入copy mode,查看Screen中的终端输出记录

进入后它是vi style keybindings。对于拷贝文字,第一次空格设置开始标记,然后用hjklw移动光标,第二次空格完成拷贝。粘贴用]

开机启动screen并执行指定shell

  • 新建一个start.sh文件,示例路径:/home/start.sh
  • 文件中输入如下代码
    screen_name="当前会话名称"
    screen -dmS $screen_name
    cmd="要执行的命令"
    screen -x -S $screen_name -p 0 -X stuff "$cmd"
    screen -x -S $screen_name -p 0 -X stuff $'\n'
    screen -x -S $screen_name -p 0 -X stuff "exit"
    
  • esc然后再按:输入wq保存
  • 输入vi /etc/rc.d/rc.localiInsert再按Shift + g (就是大写的G)跳转到末尾添加命令输入/home/start.sh

# nohup

如果程序在其他目录下则在命令前加入cd 目录路径 &&

# 只输出错误日志
nohup python3 ./index.py >/dev/null 2>index.log &
# 不输出日志
nohup python3 ./index.py >/dev/null 2>&1 &

Linux的3种重定向

  1. 0表示标准输入
  2. 1标准输出,在一般使用时,默认的是标准输出
  3. 2标准错误信息输出
  • 可以用来指定需要重定向的标准输入或输出。
  • 将某个程序的错误信息输出到log文件中:./index 2>index.log
  • 这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
  • 也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。

关于/dev/null文件

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。 这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null

# setsid

setsid就是set session id的意思。表示该命令运行的进程是一个新的session。因此其父进程不属于当前终端。 实际上setsid运行的进程,其父进程id(ppid)为1(init进程的id)。

setsid python3 ./index.py >/dev/null 2>&1 &

语法

  • setsid(选项)(参数)
    1. -c, --ctty 将控制终端设置为当前控制终端
    2. -f, --fork 总是fork
    3. -w, --wait 等待程序退出,并使用相同的返回

# 传输文件

首先进入需要搭建web服务器的目录,然后在输入下面的命令,端口号默认8000

# python2.7
python -m SimpleHTTPServer port
# python3.x
python -m http.server port

# 服务开启后,地址协议类型加IP/目录下的文件: 
wget host:port/file 就可以下载了

# scp

scp(Secure Copy Protocol)基于SSH,是用来进行远程文件拷贝的,不支持排除目录,不支持断点续传

# 把本地的source.txt文件拷贝到192.168.0.10机器上的/home/work目录下
scp -P 22 -p /home/work/source.txt [email protected]:/home/work/
# 把192.168.0.10机器上的source.txt文件拷贝到本地的/home/work目录下
scp -P 22 -p [email protected]:/home/work/source.txt /home/work/
# 把192.168.0.10机器上的source.txt文件拷贝到192.168.0.11机器的/home/work目录下
scp -P 22 -p [email protected]:/home/work/source.txt [email protected]:/home/work/
# 拷贝文件夹,加-r参数
scp -P 22 -p -r /home/work/sourcedir [email protected]:/home/work/
# 使用主机名
scp -P 22 -p -r /home/work/sourcedir [email protected]:/home/work/
# 显示详情,加-v参数
scp -P 22 -p -r -v /home/work/sourcedir [email protected]:/home/work/  

# 将远程主机复制到本地
scp -P 22 -p [email protected]:/tmp/demo/f3.log /tmp/files/

# sftp

sftp(SSH File Transfer Protocol)基于SSH,sftp允许对远程文件(查看目录,删除文件和目录等)进行一系列操作,支持断点续传

  • sftp -oPort=端口 用户名@IP 登录,和ssh一样
  • put 把本地传递到远端(上传)
  • get 把远程传递到本地(下载)
  • ls和lls:ls是看sftp服务器下当前目录下文件, lls是看linux当前目录下的文件。
  • pwd和lpwd:pwd是看远端服务器的目录, 即sftp服务器默认的当前目录。 lpwd是看linux本地目录
  • mget *.* 从远端主机接收一批文件至本地主机
  • !command 这个是指在linux上执行command这个命令,比如!ls!rm a.txt
  • exit、quit、bye: 退出。
  • help:再强调一下help,登录以后,一个help,基本可以搞定所有命令

# rsync

【优点】功能强大,操作类似scp,支持排除目录,支持限速参数;还支持本地复制。

【缺点】会耗系统资源,占用I/O

【用法】rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。 它的操作方式和scp和相似,但是比scp强大很多。使用双冒号分割主机名和文件路径时,是使用rsync服务器

# -P 由两个参数组成:--partial 恢复某些原因而中断的传输,--progress 显示传输进度。
# 把本地的source.txt文件拷贝到192.168.0.10机器上的/home/work目录下
rsync -avP -e 'ssh -p 22' /home/work/source.txt [email protected]:/home/work/

# 把192.168.0.10机器上的source.txt文件拷贝到本地的/home/work目录下
rsync -avP [email protected]:/home/work/source.txt /home/work/

# 把192.168.0.10机器上的source.txt文件拷贝到192.168.0.11机器的/home/work目录下
rsync -avP [email protected]:/home/work/source.txt [email protected]:/home/work/

# -r拷贝文件夹  当前服务器 -> 远程服务器
rsync -avP -r /home/work/sourcedir [email protected]:/home/work/
rsync -avP --progress -e ssh root@IP:/path/ /path/

# 使用主机名
rsync -avP -r /home/work/sourcedir [email protected]:/home/work/

# 排除子目录,注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则匹配不上,就不会被排除掉。
rsync -avP -r -v --exclude sourcedir/notinclude /home/work/sourcedir [email protected]:/home/work/

# 性能测试

bench.sh

这个是秋水逸冰老大的脚本,用于测试网络下载及主机IO性能测试。是网络上普遍使用的脚本,界面很漂亮。

wget -qO- bench.sh | bash

91yun

这个来自91yun的脚本,主要测试的是网络ping值及路由。

wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh \
&& bash test_91yun.sh s

主机运算性能测试

wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh \
&& chmod +x unixbench.sh && unixbench.sh

服务器一键测试脚本

可以一键检测服务器基本性能,以及网络去程回程的速度。代码整合来自SpeedTestOldKingSuperSpeed

# 中文版
wget https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench-CN.sh && bash ZBench-CN.sh
# 英文版
wget https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench.sh && bash ZBench.sh

测试完之后,会在/root/下面生成一个 report.html 的文件。

Superspeed.sh

wget https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh \
&& chmod +x superspeed.sh && bash superspeed.sh