<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[至真为上]]></title> 
<atom:link href="https://sunplayer.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[个人技术屋]]></description>
<link>https://sunplayer.cn/</link>
<language>zh-cn</language>
<generator>emlog</generator>
<item>
    <title>Acme.sh源码安装及简单应用</title>
    <link>https://sunplayer.cn/?post=21</link>
    <description><![CDATA[<h2>Acme.sh的作用是免费SSL证书申请并自动续期，主要是免费，这对于自建网站的兄弟来说，绝对是个福音。以前的方法已经不好用了，因此今天来更新一把(2025.12.31)。</h2>
<h4>网上也有很多教程教大家去安装和使用，只不过在安装的时候，大多数教程都是用命令去git上面拉取脚本执行安装，这对于无法访问git的兄弟来说，这会是一个很麻烦的事情，当然也有国内的备用地址，只是我在安装的时候，时常也会安装失败，当然多试几次也会成功，就很烦，尤其是在比较忙的时候。</h4>
<h4>所以我就在想，将源码下载下来安装使用，这样就避免了因网络原因导致安装失败。</h4>
<h4>下面附上acme.sh源码包的下载地址，版本是 V3.1.2 下载与git的日期为2025年12月30日：<a href="https://sunplayer.cn/acme/acme.sh-master.zip" title="点击下载acme.sh">点击下载acme.sh</a></h4>
<h2>本次介绍通过DNS API以及文件验证的方式自动更新证书(DNS API以腾讯云为例)。</h2>
<h3>前置条件：</h3>
<h4>首先，你要有自己的域名</h4>
<h4>其次，你要有一个外网IP</h4>
<h4>最后，你要可以登录DNS服务商获取API(如果DNS服务商无法提供API，就用文件验证的方式)</h4>
<h4>如果前置条件不满足，下面的就不用看了。</h4>
<h2>方式一 DNS API申请证书(以腾讯云为例)</h2>
<h3>获取腾讯云DNS API</h3>
<h4>1、登录控制台后，点击访问管理</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/28151767078778.png" alt="" /></p>
<h4>2、API秘钥管理</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/9a051767078800.png" alt="" /></p>
<h4>3、新建一个API秘钥-鼠标放置箭头处，可以微信扫描获取动态码</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/43ba1767079057.png" alt="" /></p>
<h4>4、按流程填写好后，可获取到SecretId以及SecretKey，这两个值复制下来备用</h4>
<pre><code>这两个值的作用就是使acme.sh申请证书时，可以自动调用，来添加DNS的TXT记录，省去我们每次手动添加的麻烦。</code></pre>
<h3>获取证书申请命令</h3>
<h4>1、打开Freessl官网 <a href="https://freessl.cn/user/login">https://freessl.cn/user/login</a> ，登录(没有就创建一个账号)</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b6581767153002.png" alt="" /></p>
<h4>2、点击证书自动化-ACME账号管理--新增EAB(若申请过，可直接使用)</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b4ad1767074690.png" alt="" /></p>
<h4>3、EAB申请完成后，即可进入申请证书引导</h4>
<pre><code>选择申请证书引导</code></pre>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b5101767074872.png" alt="" /><br />
选择EAB<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/ae4f1767074960.png" alt="" /><br />
DNS服务商选择腾讯云<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/1f741767075088.png" alt="" /><br />
填写域名<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/09131767075178.png" alt="" /><br />
获取命令,这里的命令都是范例，实际使用需要有所更改，此页面先不要关闭，后续还需要用到此页面提供的命令。<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/7b011767080947.png" alt="" /></p>
<h3>服务器申请证书，步骤与证书引导页面一致。</h3>
<h4>1、安装acme.sh</h4>
<pre><code>使用ssh工具如Nxshell、WindTerm、Xshell等连接到服务器，在系统内创建文件存放目录 /Tools，放置证书的目录 /Nginx/SSL 这个不是必须的，主要是为了方便管理文件，这只是我自己的习惯,各位可根据自己的习惯去选择或者创建。将下载到的acme.sh源码包传输到服务器创建的目录中，这个过程就略过了。
mkdir /Tools
mkdir -p /Nginx/SSL
安装依赖
yum -y install wget unzip vim socat
acme.sh源码压安装
unzip acme.sh-master.zip
进入已解压出来的acme.sh目录
cd acme.sh-3.1.2/
执行安装，后面这个邮件地址改成你自己的。
./acme.sh --install -m my@example.com</code></pre>
<p><a href="https://sunplayer.cn/content/uploadfile/202406/b73a1717576583.png"><img src="https://sunplayer.cn/content/uploadfile/202406/thum-b73a1717576583.png" alt="" /></a><br />
使acme.sh保持自动更新<br />
/root/.acme.sh/acme.sh --upgrade --auto-upgrade<br />
这样就安装好了，默认的安装目录为用户的主目录，我这是root用户所以是在 /root/.acme.sh 这时候直接使用命令acme.sh是无法使用的，因为变量没生效<br />
<a href="https://sunplayer.cn/content/uploadfile/202406/27b71717576991.png"><img src="https://sunplayer.cn/content/uploadfile/202406/27b71717576991.png" alt="" /></a><br />
下面就是想办法让变量生效，总不能使用绝对路径来用吧(/root/.acme.sh/acme.sh)，重新打开终端或者重启服务器都可以实现，但是我嫌烦。<br />
方法一<br />
alias acme.sh=~/.acme.sh/acme.sh<br />
方法二<br />
source ~/.bashrc<br />
<a href="https://sunplayer.cn/content/uploadfile/202406/8f051717577849.png"><img src="https://sunplayer.cn/content/uploadfile/202406/thum-8f051717577849.png" alt="" /></a></p>
<h4>2、配置环境变量</h4>
<pre><code>将腾讯云获取到的SecretId以及SecretKey配置为环境变量，以便acme.sh申请证书时调用,(这里声明变量只是临时生效，
但是acme.sh在进行调用时，会把这个变量添加到acme.sh全局设置配置文件中 ~/.acme.sh/account.conf 以便自动续期时调用)命令如下：
export Tencent_SecretId="腾讯云获取到的SecretId值"
export Tencent_SecretKey="腾讯云获取到的SecretKey值"</code></pre>
<h4>3、注册ACME账户(首次运行)</h4>
<pre><code>如图：FreeSSL默认使用的是LiteSSL作为CA，但该 CA 可能存在接入限制，容易出现API 初始化失败问题</code></pre>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/a0fa1767082370.png" alt="" /></p>
<pre><code>因此切换回 Let's Encrypt执行证书操作，命令如下
acme.sh --set-default-ca --server letsencrypt

切换后就可以执行绑定操作了(因为以设置默认server，因此无需在加--server参数)，命令如下(就是复制原FreesSSL网页上绑定命令，删掉 --server 参数):
acme.sh --register-account \
--eab-kid 你自己的kid \
--eab-hmac-key 你自己的key</code></pre>
<h4>4、申请证书</h4>
<pre><code>绑定完成后，就可以申请证书了（此处也是在原命令的基础上删除了--server参数，若acme.sh配置目录存在已申请却未过期的证书，那就需要在后面添加 --force 参数来强制更新）:

acme.sh --issue \
--dns dns_tencent \
-d "你自己的域名" \
--keylength ec-256</code></pre>
<h4>5、部署证书</h4>
<h5>部署命令如下,证书的后缀无所谓，注意证书部署路径，只要你在配置Nginx的时候不要配错就行:</h5>
<pre><code>acme.sh --install-cert -d 你的域名 \
--key-file /Nginx/SSL/你的域名.key \
--fullchain-file /Nginx/SSL/你的域名.crt \
--reloadcmd     "service nginx force-reload"</code></pre>
<h4>6、至此，证书就部署到服务器上面了，剩下的就是配置Nginx了</h4>
<h2>方式二 文件验证的方式申请证书</h2>
<h3>安装acme.sh</h3>
<pre><code>使用ssh工具如Nxshell、WindTerm、Xshell等连接到服务器，在系统内创建文件存放目录 /Tools，放置证书的目录 /Nginx/SSL 这个不是必须的，主要是为了方便管理文件，这只是我自己的习惯,各位可根据自己的习惯去选择或者创建。将下载到的acme.sh源码包传输到服务器创建的目录中，这个过程就略过了。
mkdir /Tools
mkdir -p /Nginx/SSL
安装依赖
yum -y install wget unzip vim socat
acme.sh源码压安装
unzip acme.sh-master.zip
进入已解压出来的acme.sh目录
cd acme.sh-3.1.2/
执行安装，后面这个邮件地址改成你自己的。
./acme.sh --install -m my@example.com</code></pre>
<p><a href="https://sunplayer.cn/content/uploadfile/202406/b73a1717576583.png"><img src="https://sunplayer.cn/content/uploadfile/202406/thum-b73a1717576583.png" alt="" /></a><br />
使acme.sh保持自动更新<br />
/root/.acme.sh/acme.sh --upgrade --auto-upgrade<br />
这样就安装好了，默认的安装目录为用户的主目录，我这是root用户所以是在 /root/.acme.sh 这时候直接使用命令acme.sh是无法使用的，因为变量没生效<br />
<a href="https://sunplayer.cn/content/uploadfile/202406/27b71717576991.png"><img src="https://sunplayer.cn/content/uploadfile/202406/27b71717576991.png" alt="" /></a><br />
下面就是想办法让变量生效，总不能使用绝对路径来用吧(/root/.acme.sh/acme.sh)，重新打开终端或者重启服务器都可以实现，但是我嫌烦。<br />
方法一<br />
alias acme.sh=~/.acme.sh/acme.sh<br />
方法二<br />
source ~/.bashrc<br />
<a href="https://sunplayer.cn/content/uploadfile/202406/8f051717577849.png"><img src="https://sunplayer.cn/content/uploadfile/202406/thum-8f051717577849.png" alt="" /></a></p>
<h3>获取证书申请命令</h3>
<h4>1、打开Freessl官网 <a href="https://freessl.cn/user/login">https://freessl.cn/user/login</a> ，登录(没有就创建一个账号)</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b6581767153019.png" alt="" /></p>
<h4>2、点击证书自动化-ACME账号管理--新增EAB(若申请过，可直接使用)</h4>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b4ad1767074690.png" alt="" /></p>
<h4>3、EAB申请完成后，即可进入申请证书引导</h4>
<pre><code>选择申请证书引导</code></pre>
<p><img src="https://sunplayer.cn/content/uploadfile/202512/b5101767074872.png" alt="" /><br />
选择EAB<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/ae4f1767074960.png" alt="" /><br />
选择文件验证并输入网站根目录，acme.sh会在网站根目录创建验证目录及验证文件<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/4d7e1767149945.png" alt="" /><br />
输入你的域名，此处可以输入多个域名，如果你有多个域名。<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/c0221767150154.png" alt="" /><br />
绑定账号，如图<br />
<img src="https://sunplayer.cn/content/uploadfile/202512/d3ac1767150382.png" alt="" /></p>
<pre><code>FreeSSL默认使用的是LiteSSL作为CA，但该 CA 可能存在接入限制，容易出现API 初始化失败问题，因此切换回 Let's Encrypt执行证书操作，命令如下
acme.sh --set-default-ca --server letsencrypt

切换后就可以执行绑定操作了(因为以设置默认server，因此无需在加--server参数)，命令如下(就是复制原FreesSSL网页上绑定命令，删掉 --server 参数):
acme.sh --register-account \
--eab-kid 你自己的kid \
--eab-hmac-key 你自己的key</code></pre>
<h4>4、申请证书</h4>
<pre><code>绑定完成后，就可以申请证书了（此处也是在原命令的基础上删除了--server参数，若acme.sh配置目录存在已申请却未过期的证书，那就需要在后面添加 --force 参数来强制更新）:

acme.sh --issue \
-w 网站根目录 \
-d "你的域名" \
--keylength ec-256</code></pre>
<h4>5、部署证书</h4>
<h5>部署命令如下,证书的后缀无所谓，注意证书部署路径，只要你在配置Nginx的时候不要配错就行:</h5>
<pre><code>acme.sh --install-cert -d 你的域名 \
--key-file /Nginx/SSL/你的域名.key \
--fullchain-file /Nginx/SSL/你的域名.crt \
--reloadcmd     "service nginx force-reload"</code></pre>
<h4>6、至此，证书就部署到服务器上面了，剩下的就是配置Nginx了</h4>
<h4>7、注意事项</h4>
<pre><code>1、必须保留 80 端口监听，即使全站 HTTPS，验证阶段也依赖 80 端口；
2、Nginx配置文件中，网站根目录必须与 acme.sh 命令中的 --webroot 参数完全一致，否则验证文件会找不到
3、如果存在网站访问限制配置，一定要放行acme验证文件访问，可以在Nginx配置文件中，sever段内增加下面一段配置
location /.well-known/acme-challenge/ {
    # 此处填写你的网站根目录（需与acme.sh --webroot参数一致）
    root /var/www/yourdomain;
    # 强制指定文件类型，避免解析异常
    default_type text/plain;
    # 直接访问文件，避免被其他规则拦截
    try_files $uri =404;
    # 关键：禁用反向代理相关配置（防止继承全局proxy配置）
    proxy_pass "";          # 如果配有反向代理，需要清空proxy_pass，强制不代理
    proxy_set_header "";    # 清空代理请求头
    proxy_buffering off;    # 关闭代理缓冲
    # 可选：限制访问方式，仅允许GET/HEAD（增强安全）
    limit_except GET HEAD {
    deny all;
}</code></pre>
<h3>若还未安装Nginx,那就看下<a href="https://sunplayer.cn/?post=3" title="CentOS7&amp;8编译安装Nginx">CentOS7&amp;8编译安装Nginx</a></h3>
<h3>已安装Nginx,不会配置，那就看下<a href="https://sunplayer.cn/?post=9" title="Nginx只允许域名访问网站">Nginx只允许域名访问网站</a></h3>
<h2>acme.sh常用操作</h2>
<pre><code>acme.sh 依赖于cron执行定时任务来完成证书自动更新的，查看acme.sh的定时任务
crontab -l

查看acme自动执行的计划任务（在什么时间更新哪些证书）
acme.sh --list

acme.sh删除域名，不在更新此域名证书
acme.sh --remove -d 要删除的域名</code></pre>
<h2>强制更新证书</h2>
<pre><code>"/root/.acme.sh"/acme.sh --renew -d 你的域名 --force</code></pre>]]></description>
    <pubDate>Wed, 05 Jun 2024 15:38:00 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=21</guid>
</item>
<item>
    <title>Centos7&amp;8单机部署Redis</title>
    <link>https://sunplayer.cn/?post=20</link>
    <description><![CDATA[<h1>准备工作</h1>
<h2>系统：Centos7、Centos8</h2>
<h2>Redis版本：6.2.7</h2>
<h2>建议：先换源，可以参考本网站<a href="https://sunplayer.top/?post=4" title="CentOS7&amp;8更换国内yum源">CentOS7&amp;8更换国内yum源</a></h2>
<h3>1、确认已安装下载工具wget及make test依赖tcl，编译工具make(Centos8最小化安装貌似不带),vim编辑器，若未安装，请运行下列命令安装</h3>
<pre><code>yum -y install wget tcl make vim</code></pre>
<h3>2、关闭selinux</h3>
<pre><code>sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config &amp;&amp; setenforce 0</code></pre>
<h3>3、确认已安装编译环境gcc9(Centos7支持到GCC4.8.5,如果安装6版本的redis，gcc版本一定要5.3以上)</h3>
<h4>Centos7：</h4>
<pre><code>先安装软件集，作用是可以提供多个软件版本同时存在
    yum -y install centos-release-scl
安装gcc9(gcc4.8.5可安装也可不安装，因为编译Redis6用不到)
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

临时启用gcc9编译环境
    scl enable devtoolset-9 bash

永久使用gcc9编译环境
    echo "source /opt/rh/devtoolset-9/enable" &gt;&gt; /etc/profile &amp;&amp; source /etc/profile</code></pre>
<h4>Centos8：</h4>
<pre><code>yum -y install gcc
 或者
dnf -y install gcc</code></pre>
<h3>4、创建redis安装目录，默认安装到 /usr/local/bin/，若安装到默认目录，此步骤可忽略</h3>
<pre><code>mkdir /redis</code></pre>
<h3>5、下载redis到home目录：</h3>
<pre><code>wget -P /home https://download.redis.io/releases/redis-6.2.7.tar.gz</code></pre>
<h3>6、解压下载的tar包，并进入解压后的目录</h3>
<pre><code>tar -xzvf /home/redis-6.2.7.tar.gz -C /home/ &amp;&amp; cd /home/redis-6.2.7</code></pre>
<h3>7、编译并安装</h3>
<pre><code>指定目录命令
    make PREFIX=/redis install

安装到默认目录命令
    make &amp;&amp; make install</code></pre>
<h3>8、安装完成后，可到安装目录查看，各文件说明</h3>
<pre><code>redis-benchmark  性能测试工具
redis-check-aof  修复有问题的aof文件
redis-check-rdb  修复有问题的rdb文件
redis-cli        redis客户端
redis-sentinel   集群管理工具
redis-server     redis服务启动工具</code></pre>
<h3>9、拷贝配置文件至/etc</h3>
<pre><code>cp /home/redis-6.2.7/redis.conf /etc/</code></pre>
<h3>10、根据需要修改配置文件</h3>
<pre><code>默认只允许本机127.0.0.1访问，注释掉使其允许其他IP访问
sed -i 's/^bind 127.0.0.1/# bind 127.0.0.1/' /etc/redis.conf

默认连接redis时只能通过本地localhost，改成NO，使其允许其他IP访问
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf

redis默认不在后台运行，修改成yes变成守护进程后台运行
sed -i 's/^daemonize no/daemonize yes/' /etc/redis.conf

设置redis连接密码为redis123
sed -i 's/^# requirepass foobared/requirepass redis123/' /etc/redis.conf

设置持久化文件存放位置
sed -i 's#^dir ./#dir /redis#' /etc/redis.conf

更改默认连接端口为16379
sed -i 's/^port 6379/port 16379/' /etc/redis.conf

设置redis日志文件名称
sed -i 's#^logfile.*#logfile "/var/log/Redis.log"#' /etc/redis.conf

默认redis有16个库(0-15)，根据需要可以设置更多
sed -i 's/^databases.*/databases 32/' /etc/redis.conf</code></pre>
<h3>11、创建系统服务文件,复制以下命令可直接创建，注意redis的安装位置及修改后的启动端口，根据需要修改</h3>
<pre><code>cat &gt; /etc/systemd/system/redis.service &lt;&lt; EOF
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=forking
ExecStart=/redis/bin/redis-server /etc/redis.conf
ExecStop=/redis/bin/redis-cli -p 16379 shutdown
PrivateTmp=true
Restart=always
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF</code></pre>
<h3>12、重载系统服务文件并设置redis服务随机启动</h3>
<pre><code>systemctl daemon-reload &amp;&amp; systemctl enable redis</code></pre>
<h3>13、启动redis服务并查看redis的服务状态，是否正常启动</h3>
<pre><code>systemctl start redis &amp;&amp; tail -f /var/log/Redis.log</code></pre>
<h3>14报错处理</h3>
<pre><code>若在启动redis的时候出现报警"The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128"
停掉redis，输入下面命令后，再重启redis。

echo 'net.core.somaxconn= 1024' &gt;&gt; /etc/sysctl.conf &amp;&amp; sysctl -p

若在启动redis的时候出现报警“overcommit_memory is set to 0! Background save may fail under low memory condition. 
To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' 
for this to take effect.”
停掉redis，输入下面命令后，再重启redis。

sysctl vm.overcommit_memory=1 &amp;&amp; echo 'vm.overcommit_memory = 1' &gt;&gt; /etc/sysctl.conf &amp;&amp; sysctl -p

若在启动redis的时候出现报警"WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage     issues with Redis. To fix this issue run the command 'echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled' as root, 
and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled"
停掉redis，输入下面两条命令后，再重启redis。

echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled
echo "echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled" &gt;&gt; /etc/rc.local &amp;&amp; chmod +x /etc/rc.d/rc.local</code></pre>
<h3>15、上面我们修改了redis远程端口，所有还需要在防火墙上面开启此端口，允许通讯。</h3>
<pre><code>firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-port=16379/tcp --permanent
systemctl restart firewalld</code></pre>
<h1>以上介绍了Redis的安装，若后续发现还有需要优化的地方，本文会继续添加。</h1>]]></description>
    <pubDate>Thu, 07 Jul 2022 15:39:34 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=20</guid>
</item>
<item>
    <title>Nginx配置网页认证访问</title>
    <link>https://sunplayer.cn/?post=19</link>
    <description><![CDATA[<h2>需求：访问网站或者网站的某个页面时，需输入认证信息即用户名和密码才能访问。</h2>
<h2>环境：centos7&amp;8</h2>
<h2>工具：Nginx httpd-tools</h2>
<h4>此需求需要用到Nginx的ngx_http_auth_basic_module模块，此模块在安装Nginx时默认已安装,无需额外添加。</h4>
<h3><a href="http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html" title="点此查看Nginx官网说明文档">点此查看Nginx官网说明文档</a></h3>
<h3>安装Nginx，已安装略过,<a href="https://www.sunplayer.cn/?post=3" title="点此查看Nginx安装教程">点此查看Nginx安装教程</a></h3>
<h3>安装httpd-tools，已安装略过，用于创建密码文件。</h3>
<pre><code>yum -y install httpd-tools</code></pre>
<h1>创建密码文件</h1>
<h2>使用命令：htpasswd</h2>
<h2>htpasswd参数说明</h2>
<pre><code>-b 命令行中一并输入用户名和密码而不是根据提示输入密码，可以看见明文，不需要交互
-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-d 使用CRYPT加密（默认）
-D 删除指定的用户
-m 使用MD5加密（默认）
-n 不更新passwordfile，直接显示密码
-p 使用普通文本格式的密码
-s 使用SHA加密</code></pre>
<h4>命令格式组成：</h4>
<p>htpasswd 参数选项 密码文件位置 用户名 密码(存在参数-b时才需要同时输入密码)</p>
<h4>需要注意的是</h4>
<p>1、参数-c是创建密码文件，若原先有同名密码文件将会被覆盖掉<br />
2、若原先有同名密码文件，去掉-c选项，即可在文件内添加新用户<br />
3、参数-b是同时输入用户名和密码，如果不加参数-b,创建用户时，只需输入用户名回车即可，会提示你输入密码<br />
4、创建密码文件时用绝对路径,若未指定绝对路径，则在当前目录下创建<br />
5、修改密码，重新添加需要修改密码的用户即可，密码信息会覆盖</p>
<h4>在目录/home/创建密码文件user_passwd并添加用户test,同时设置用户密码为：test123456</h4>
<pre><code>htpasswd -cb /home/user_passwd test test123456</code></pre>
<h4>添加新用户demo，同时设置密码为demo123456</h4>
<pre><code>htpasswd -b /home/user_passwd demo demo123456</code></pre>
<h4>修改test用户密码为：123456</h4>
<pre><code>htpasswd -b /home/user_passwd test 123456</code></pre>
<h4>删除用户demo</h4>
<pre><code>htpasswd -D /home/user_passwd demo</code></pre>
<h1>Nginx配置</h1>
<h2>在Nginx配置文件中加入以下两行</h2>
<h3>注：整个网站验证，则加在server段，网站的某个网页验证，则加在location段</h3>
<pre><code>auth_basic   "登录认证";
auth_basic_user_file /home/user_passwd;</code></pre>
<h3>全站验证，配置如：</h3>
<pre><code>worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
server {
    listen       80;
    server_name  localhost;
    auth_basic   "登录认证";  
    auth_basic_user_file /home/user_passwd;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /gp {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8888/gp;
        proxy_http_version 1.1;
    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }    
  }
}</code></pre>
<h3>单页面验证配置如下</h3>
<pre><code>worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /gp {
        auth_basic   "登录认证";  
        auth_basic_user_file /home/user_passwd;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8888/gp;
        proxy_http_version 1.1;
    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }
  }
}</code></pre>
<h2>重启Nginx服务后,访问web界面，查看是否弹出输入验证信息界面，能够弹出说明配置正确，报错的话，需要确认密码文件的路径是否正确。</h2>]]></description>
    <pubDate>Fri, 11 Feb 2022 17:27:00 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=19</guid>
</item>
<item>
    <title>Centos7&amp;8安装Mysql8.0</title>
    <link>https://sunplayer.cn/?post=18</link>
    <description><![CDATA[<h1>准备工作</h1>
<h2>1 安装Centos操作系统</h2>
<ol>
<li>一般是最小化安装就可以了，安装教程网上一大堆，请自行百度</li>
<li>替换国内源,本网站有发布过替换国内源的方法,<a href="https://www.sunplayer.cn/?post=4" title="点击查看">点击查看</a>。</li>
<li>
<p>关闭selinux,要不然修改mysql默认端口后mysql服务起不来。</p>
<pre><code>setenforce 0 &amp;&amp; sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config</code></pre>
</li>
<li>
<p>安装mysql后,我准备将mysql默认端口3306更改为3336,添加mysql新端口到防火墙,使其可以远程登录</p>
<pre><code>firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-port=3336/tcp --permanent
firewall-cmd --reload</code></pre>
</li>
</ol>
<h2>2 下载MySQL包</h2>
<h3>下载地址：</h3>
<p><a href="https://downloads.mysql.com/archives/community/">https://downloads.mysql.com/archives/community/</a></p>
<h3>版本选择</h3>
<ul>
<li>
<p>Product Version(产品版本，即MySQL版本)<br />
根据需要选择，有新的就选新的</p>
</li>
<li>
<p>Operating System(操作系统)<br />
即需要安装在什么操作性系统上，因为Centos基于Red Hat,所以这里选Red Hat Enterprise Linux/Oracle Linux</p>
</li>
<li>
<p>OS Version(操作系统版本)<br />
Centos7: Red Hat Enterprise Linux 7/Oracle Linux7(X86,64-bit)<br />
Centos8: Red Hat Enterprise Linux 8/Oracle Linux8(X86,64-bit)</p>
</li>
<li>
<p>安装包类型选择<br />
RPM Bundle(x.xx代表小版本号，下载的是一个tar包，下载下来后,传输到Centos服务器解压，解压后得到rpm安装包)<br />
Centos7 tar包名字为：mysql-8.x.xx-1.el7.x86_64.rpm-bundle.tar<br />
Centos8 tar包名字为：mysql-8.x.xx-1.el8.x86_64.rpm-bundle.tar</p>
</li>
</ul>
<h1>本文以Centos7 MySQL版本为8.0.23为例</h1>
<h2>1. 用xshell等工具连接到已安装的服务器</h2>
<h2>2. 用sftp把包传输到服务器,根据需要选择保存位置,我是放在/home目录下</h2>
<h2>3. Centos 7默认是mariadb数据库，安装之前需要卸载mariadb，在Centos8已经废除了.</h2>
<pre><code>rpm -qa|grep mariadb|xargs rpm -e --nodeps</code></pre>
<h2>4. 在/home目录下创建一个mysql目录，用来存放解包后的rpm文件,当然也可以创建其他目录,这个是无所谓的。</h2>
<pre><code>mkdir /home/mysql</code></pre>
<h2>5. 解压tar包到/home/mysql目录下</h2>
<pre><code>tar -xvf /home/mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar -C /home/mysql</code></pre>
<h3>6. 安装,我们并不是所有的rpm包都需要安装.按照下面顺序，逐个安装。这里是用yum命令(Centos8兼容yum,也可以用dnf命令)安装而不是rpm命令,因为yum会自动安装依赖包,减少很多麻烦.当然也需要你的服务器网络连接无问题，不会配置网络的，<a href="https://www.sunplayer.cn/?post=17" title="可点击查看Centos7&amp;8网络配置方法">可点击查看Centos7&amp;8网络配置方法</a></h3>
<pre><code>yum -y install /home/mysql/mysql-community-common-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-libs-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-client-8.0.23-1.el7.x86_64.rpm
yum -y install /home/mysql/mysql-community-server-8.0.23-1.el7.x86_64.rpm</code></pre>
<h1>安装完成后事项</h1>
<h2>默认的配置文件位置：</h2>
<pre><code>/etc/my.cnf</code></pre>
<h2>修改配置文件前,先备份默认配置文件,学会备份是个好习惯</h2>
<pre><code>cp /etc/my.cnf /etc/my.cnf.bak</code></pre>
<h2>启动mysql服务,并加入开机启动.第一次启动时间可能会多几秒,这是因为mysql第一次启动有一个初始化的过程</h2>
<pre><code>systemctl start mysqld
systemctl enable mysqld</code></pre>
<h2>修改root密码,例如修改为Abcd@1234</h2>
<h3>Mysql安装完成后,会生成一个root账号的初始的密码,不更改密码的话,登录后啥也干不了。</h3>
<h4>方法一,无需登录,用mysql管理工具mysqladmin来修改,我一般在shell脚本里常这么干。</h4>
<ol>
<li>
<p>先将默认密码读出来，作为一个变量</p>
<pre><code>pwd=`grep "temporary password" /var/log/mysqld.log|awk -F' ' "{print $NF}"|awk '{print $NF}'`</code></pre>
</li>
<li>
<p>然后直接修改密码为Abcd@1234</p>
<pre><code>/usr/bin/mysqladmin -uroot -p${pwd} password "Abcd@1234"</code></pre>
</li>
</ol>
<h4>方法二,常规修改方法,用初始密码登录后修改</h4>
<ol>
<li>
<p>查看初始密码：</p>
<pre><code>grep "temporary password" /var/log/mysqld.log|awk -F' ' "{print $NF}"|awk '{print $NF}'</code></pre>
</li>
<li>
<p>用初始密码登录mysql</p>
<pre><code>mysql -uroot -P3336 -p"初始密码"</code></pre>
</li>
<li>
<p>修改密码,退出即可</p>
<pre><code>ALTER USER 'root'@'localhost' IDENTIFIED BY 'Abcd@1234';
exit</code></pre>
</li>
</ol>
<h1>可选操作</h1>
<ol>
<li>
<p>Mysql默认连接端口是3306,修改配置文件,将连接端口修改为3336,注意，这里是两个大于号,追加内容(vi编辑配置文件添加配置也行)。然后重启mysql服务</p>
<pre><code>echo "port=3336" &gt;&gt; /etc/my.cnf
systemctl restart mysqld</code></pre>
</li>
<li>
<p>其他优化</p>
<pre><code>修改binlog日志保留时间，以防binlog日志文件过多导致占用空间较大。

echo "binlog_expire_logs_seconds = 604800" &gt;&gt; /etc/my.cnf

如果是在生产环境中，Mysql服务不会轻易重启，这就需要在不重启服务的情况下清理binlog文件，当然，配置文件中也需要如上面参数修改，防止服务重启后恢复默认值，登录mysql,命令如下（设置为7天）

set global binlog_expire_logs_seconds=604800;

查看当前数据库日志binlog保存时效 以秒为单位，登录mysql，输入一下命令

show variables like '%binlog_expire_logs_seconds%';

为每一个innodb表建立单独的表空间,而不是都塞在系统表空间下

echo "innodb_file_per_table = 1" &gt;&gt; /etc/my.cnf

内存临时表大小,如果超出这个大小,则会生成磁盘临时表

echo "tmp_table_size=256m" &gt;&gt; /etc/my.cnf
echo "max_heap_table_size=256m" &gt;&gt; /etc/my.cnf

设置缓存池大小，通过缓冲池，加快业务处理。根据系统内存大小设置，最多能有80%的物理内存被用作缓冲池

echo "innodb_buffer_pool_size = 4G" &gt;&gt; /etc/my.cnf

JOIN BUFFER 是 MySQL 用来缓存以上第二、第三这两类 JOIN 检索的一个 BUFFER 内存区域块,适当增加join buffer的值来优化join查询

echo "join_buffer_size = 128M" &gt;&gt; /etc/my.cnf

查询排序时所能使用的缓冲区大小，增大sort_buffer_size值，以解决默认值太小，ORDER BY查询引发内存溢出的问题

echo "sort_buffer_size = 4M" &gt;&gt; /etc/my.cnf

read_buffer_size 读查询操作所能使用的缓冲区大小

echo "read_buffer_size = 4M" &gt;&gt; /etc/my.cnf

myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小，一般4G内存给64M

echo "myisam_sort_buffer_size = 64M" &gt;&gt; /etc/my.cnf

它针对某些排序之后优化读取行，用在sort查询之后 ，以保证获取以顺序的方式获取到查询的数据

echo "read_rnd_buffer_size = 4M" &gt;&gt; /etc/my.cnf</code></pre>
</li>
<li>
<p>MySQL管理员用户root,默认只能本地登录,修改使其能够远程登录(%代表所有主机.生成环境不建议这么做,最好新建个有远程权限的账号),修改完退出即可.<br />
mysql -uroot -pAbcd@1234</p>
<pre><code>use mysql;

update user set host = '%' where user ='root';

FLUSH PRIVILEGES;

exit</code></pre>
</li>
<li>
<p>创建数据库my_test.Mysql8数据库的默认字符集是utf8mb4,排序规则是utf8mb4_0900_ai_ci,为了向前兼容,可以将排序规则改为utf8mb4_general_ci,若是新项目,不建议更改。<br />
mysql -uroot -pAbcd@1234</p>
<pre><code>create database my_test default character set utf8mb4 collate utf8mb4_general_ci;

exit</code></pre>
</li>
<li>
<p>创建远程用户test,并设置密码为Abcd@5678，允许远程登录，并为新账号赋予权限 <em>.</em>(数据库名.表名)代表所有数据库的所有表,ALL代表所有权限,也可根据具体需要更改，如SELECT，INSERT，UPDATE等.创建完退出即可用新账号登录了.<br />
mysql -uroot -pAbcd@1234</p>
<pre><code>use mysql;

CREATE USER 'test'@'%' IDENTIFIED BY "Abcd@5678";

grant all privileges on *.* TO 'test'@'%';

FLUSH PRIVILEGES;

exit</code></pre>
</li>
<li>
<p>Mysql8.0采用了新的caching_sha2_password的身份验证方式,旧的身份验证为mysql_native_password.更改身份验证,以兼容以前版本的加密连接,比如老版本的phpmyadmin连接报错,新版本的Navicat已支持新的身份验证。</p>
<p>6.1. 修改配置文件.修改配置文件后创建的所有用户,默认使用配置文件的身份验证方式。修改配置文件以前创建的用户不生效。如果是全新安装的mysql8,安装完成后,在从未启动服务(未初始化过)的情况下修改配置文件，那么，默认用户root及后续创建的用户,身份验证方式会自动初始化为配置文件的身份验证方式,若mysql安装完成后,已启动服务(已完成初始化),用方式二来更改用户的身份验证。</p>
<pre><code>echo "default-authentication-plugin=mysql_native_password" &gt;&gt; /etc/my.cnf

systemctl restart mysqld</code></pre>
<p>6.2. 登录mysql,命令行更改。注意是root主机是%还是localhost,千万比用update,别问为什么</p>
<pre><code>mysql -uroot -pAbcd@1234

use mysql;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Abcd@1234';

FLUSH PRIVILEGES;

exit</code></pre>
</li>
</ol>
<h1>常用命令</h1>
<h4>查看数据库内所有用户信息</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    use mysql;

    select host,user,authentication_string,plugin from user;

    exit</code></pre>
<h4>查看单个用户的权限和角色</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    use mysql;

    SHOW GRANTS FOR '用户名'@'主机名';

    exit</code></pre>
<h4>查看并解锁已锁定账号(例如，由于密码尝试次数过多导致账号被锁定)</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    use mysql;

    查看已锁定用户
    select user,host,account_locked from mysql.user;

    解锁已锁定用户
    ALTER USER 'username'@'hostname' ACCOUNT UNLOCK;</code></pre>
<h4>查看某数据库有哪些表</h4>
<pre><code>    use 数据库名;

    show tables;</code></pre>
<h4>查看某数据库的编码及排序规则</h4>
<pre><code>    show create database 数据库名;</code></pre>
<h4>查看表的字符集：</h4>
<pre><code>    SHOW CREATE TABLE tablename;</code></pre>
<h4>更改全局数据库字符集和排序规则,只针对更改字符集或排序规则后创建的数据库生效,具体使用哪种编码或者排序规则,根据实际需要更改。</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    use mysql;

    set character_set_client = utf8mb4;

    set character_set_server = utf8mb4;

    set character_set_connection = utf8mb4;

    set character_set_database = utf8mb4;

    set character_set_results = utf8mb4;

    set collation_connection = utf8mb4_general_ci;

    set collation_database = utf8mb4_general_ci;

    set collation_server = utf8mb4_general_ci;

    FLUSH PRIVILEGES;

    exit</code></pre>
<h4>更改现有数据库的字符集和排序.根据需要自行更改.(如果修改的是表的话，只需把database更改为table,数据库名更改为表名)</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    alter database 数据库名 default character set utf8mb4 COLLATE utf8mb4_general_ci;

    exit</code></pre>
<h4>更改列的字符集和排序规则,根据需要自行更改(注意外键)</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    use 数据库名;

    alter table 表名 change 列名 列名 varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci;

    exit</code></pre>
<h4>查看当前的密码验证策略及修改方法</h4>
<pre><code>    show variables like 'validate_password.%';</code></pre>
<p>策略说明(生产环境不建议更改)<br />
validate_password.length 是密码的最小长度，默认是8，改成6</p>
<pre><code>    set global validate_password.length=6;</code></pre>
<p>validate_password.policy 验证密码的复杂程度，改成0</p>
<pre><code>    set global validate_password.policy=0;</code></pre>
<p>validate_password.check_user_name 用户名检查，用户名和密码不能相同，关掉</p>
<pre><code>    set global validate_password.check_user_name=off;</code></pre>
<h4>删除数据库</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    drop database 数据库名

    exit</code></pre>
<h4>删除用户.删除前需确认用户的主机名(host).drop删除用户及其所有库或者表权限,delete只删除用户，保留权限.后续创建同名用户,则权限会继承。</h4>
<pre><code>    mysql -uroot -pAbcd@1234

    drop user '用户名'@'主机名';

    delete from user where user='用户名' and host='主机名';</code></pre>
<h4>重置root密码</h4>
<p>在配置文件/etc/my.cnf中[mysqld]后面任意一行添加skip-grant-tables用来跳过密码验证的过程,并重启mysql服务</p>
<pre><code>    echo "skip-grant-tables" &gt;&gt; /etc/my.cnf

    systemctl restart mysqld</code></pre>
<p>免密登录</p>
<pre><code>    mysql -uroot</code></pre>
<p>清空root密码并退出</p>
<pre><code>    use mysql;

    update user set authentication_string='' where user='root';

    exit</code></pre>
<p>注释掉或删除配置文件中skip-grant-tables并重启mysql服务(重申一遍,备份是个好习惯)</p>
<pre><code>    sed -i 's/skip-grant-tables/# &amp;/' /etc/my.cnf

    systemctl restart mysqld</code></pre>
<p>无密码登录</p>
<pre><code>    mysql -uroot</code></pre>
<p>重置root密码为Abcd@1357</p>
<pre><code>    flush privileges

    ALTER USER 'root'@'%' IDENTIFIED BY 'Abcd@1357';

    exit</code></pre>
<h4>用数据库自带工具备份数据库</h4>
<pre><code>    mysqldump -h localhost -P 数据库端口 -u Msyql用户名 -p 密码 要备份的数据库名 &gt; 保存路径及备份的名称(/home/Mysql_bak/my_bak.sql)

#### 忽略一张表 可以使用多个--ignore-table=数据库名.表名来忽略多张表
    mysqldump -h localhost -P 数据库端口 -u Msyql用户名 -p 密码 要备份的数据库名 --ignore-table=数据库名.表名 &gt; 保存路径及备份的名称(/home/Mysql_bak/my_bak.sql)</code></pre>]]></description>
    <pubDate>Tue, 07 Dec 2021 19:48:00 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=18</guid>
</item>
<item>
    <title>Centos7&amp;8网络信息相关</title>
    <link>https://sunplayer.cn/?post=17</link>
    <description><![CDATA[<h1>本章主要是简单介绍网络信息的查看和配置</h1>
<h2>查看所有网卡信息(包含IP、MAC等)</h2>
<p>1、ifconfig (需要先安装net-tools,单网卡多IP时只能显示第一个IP)<br />
2、ip a<br />
3、nmcli</p>
<h2>查看某网卡的网络信息，如网卡ens33</h2>
<pre><code>ifconfig ens33
ip a show ens3
nmcli device show ens33</code></pre>
<h2>查看所有网卡最详细的网络信息</h2>
<pre><code>nmcli device show</code></pre>
<h2>查看已连接的网卡</h2>
<pre><code>nmcli connection show</code></pre>
<h2>网卡配置</h2>
<h3>网卡配置文件路径，多个网卡有多个配置文件</h3>
<p>注：当编辑配置文件时，建议先备份一份，万一弄崩了呢。</p>
<pre><code>/etc/sysconfig/network-scripts/ifcfg-网卡名.cfg</code></pre>
<h2>配置文件范例(静态IP)：</h2>
<p>BOOTPROTO= dhcp|static dhcp代表自动获取IP，static代表需要手动指定固定IP地址<br />
onboot= yes|no yes意思是开机启动激活网卡,加载此配置文件的配置信息，no代表不起用此网卡，也就无法用此网卡配置信息来通讯<br />
NETMASK= 子网掩码 另一种表示方法 PREFIX=（这个涉及到子网掩码的换算，有兴趣的可以百度一下NETMASK=255.255.255.0也可用PREFIX=24代替）<br />
DNS= 域名解析服务器，配置一个或者两个都可</p>
<pre><code>TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens160"
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=119.29.29.29</code></pre>
<h3>单网卡配置多IP范例</h3>
<pre><code>TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens160"
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.1.10
IPADDR1=172.16.30.10
NETMASK=255.255.255.0
NETMASK1=255.255.0.0
GATEWAY=192.168.1.1
GATEWAY1=172.16.30.1
DNS1=114.114.114.114
DNS2=119.29.29.29</code></pre>
<h2>网络服务启动/停止/重启</h2>
<p>Centos7:</p>
<pre><code>systemctl start/stop/restart network
单独临时启动或关闭某一个网卡
ifup ens33
ifdown ens33</code></pre>
<p>Centos8:假设网卡名称为ens33</p>
<pre><code>nmcli c reload 重载配置文件
nmcli n 查看nmcli状态
nmcli n on 启动nmcli
nmcli c up ens33 启动网卡ens33
nmcli c down ens33 关闭网卡ens33
nmcli d c ens33 激活网卡 
nmcli d show ens33 查看网卡ens33信息
nmcli r all off 关闭无线</code></pre>
<p>若网卡配置文件更改后,需先重载配置文件然后停用网卡最后再启用网卡才能使配置生效</p>
<pre><code>nmcli c reload &amp;&amp; nmcli c down ens33 &amp;&amp; nmcli c up ens33</code></pre>
<h2>ping: 检测主机网络连通性测试命令</h2>
<p>参数说明：</p>
<p>-d 使用Socket的SO_DEBUG功能。<br />
-c &lt;完成次数&gt; 设置完成要求回应的次数。<br />
-f 极限检测。<br />
-i&lt;间隔秒数&gt; 指定收发信息的间隔时间。<br />
-I&lt;网络界面&gt; 使用指定的网络接口送出数据包。<br />
-l&lt;前置载入&gt; 设置在送出要求信息之前，先行发出的数据包。<br />
-n 只输出数值。<br />
-p&lt;范本样式&gt; 设置填满数据包的范本样式。<br />
-q 不显示指令执行过程，开头和结尾的相关信息除外。<br />
-r 忽略普通的Routing Table，直接将数据包送到远端主机上。<br />
-R 记录路由过程。<br />
-s&lt;数据包大小&gt; 设置数据包的大小。<br />
-t&lt;存活数值&gt; 设置存活数值TTL的大小。<br />
-v 详细显示指令的执行过程。<br />
-w <deadline> 在 deadline 秒后退出。<br />
-W <timeout> 在等待 timeout 秒后开始执行。</p>
<p>举例说明<br />
测试与百度的连通性，回应次数为4</p>
<pre><code>ping -c 4 www.baidu.com </code></pre>
<h2>端口检测方面</h2>
<p>lsof：列出当前系统打开文件的工具<br />
系统最小化安装默认不带，需要安装：</p>
<pre><code>yum -y install lsof</code></pre>
<p>参数<br />
-i 显示打开的端口<br />
-c 查看某进程的文件使用情况<br />
+d 显示目录下被进程开启的文件(+D 包含子目录)<br />
-p 查看某PID进程打开的文件</p>
<p>仅显示TCP连接(也可以获取UDP)</p>
<pre><code>lsof  -iTCP</code></pre>
<p>查看8080端口占用</p>
<pre><code>lsof -i:8080</code></pre>
<p>显示开启文件tomcat.jar的进程</p>
<pre><code>lsof tomcat.jar</code></pre>
<p>显示xxx进程现在打开的文件</p>
<pre><code>lsof -c xxx</code></pre>
<p>列出进程号为888的进程所打开的文件</p>
<pre><code>lsof -c -p 888</code></pre>
<p>显示/tmp下被进程开启的文件</p>
<pre><code>lsof +d /tmp</code></pre>
<h2>netstat: 用于显示 tcp，udp 的端口和进程等相关情况</h2>
<p>系统最小化安装默认不带，需要安装：yum -y install net-tools</p>
<p>用法：<br />
netstat -tunlp | grep 端口号</p>
<p>-t (tcp) 仅显示tcp相关选项<br />
-u (udp)仅显示udp相关选项<br />
-n 拒绝显示别名，能显示数字的全部转化为数字<br />
-l 仅列出在Listen(监听)的服务状态<br />
-p 显示建立相关链接的程序名</p>
<p>举例说明<br />
查看 8000 端口的情况，使用以下命令：</p>
<pre><code>netstat -tunlp | grep 8000</code></pre>
<p>查看当前所有tcp端口</p>
<pre><code>netstat -ntlp</code></pre>
<h2>实时流量监控工具</h2>
<h3>iptraf</h3>
<p>需要先安装</p>
<pre><code>yum -y install iptraf</code></pre>
<p>进入监控</p>
<pre><code>iptraf-ng</code></pre>
<p>因为选项太多，本人太懒，就不过多介绍了，一般情况下，我都是用IP traffic monitor -----&gt; all interfaces</p>
<h3>nload</h3>
<p>这个软件是分页显示每个网卡的流量信息，按方向键可选择监控的网卡<br />
需要先安装扩展仓库（也可以用国内yum源扩展仓库），再安装nload</p>
<pre><code>yum -y install epel-release
yum -y install nload</code></pre>
<p>进入监控界面</p>
<pre><code>nload</code></pre>
<p>退出命令</p>
<pre><code>q</code></pre>
<h3>iftop</h3>
<p>需要先安装扩展仓库（也可以用国内yum源扩展仓库），再安装iftop</p>
<pre><code>yum -y install epel-release
yum -y install iftop</code></pre>
<p>界面相关说明<br />
界面顶部显示带宽刻度范围。<br />
中间的&lt;= =&gt;这两个左右箭头，表示的是流量的方向。<br />
TX：发送流量<br />
RX：接收流量<br />
TOTAL：总流量<br />
Cumm：运行iftop到目前时间的总流量<br />
peak：流量峰值<br />
rates：分别表示过去 2s 10s 40s 的平均流量<br />
常用的参数<br />
-i设定监测的网卡，如：# iftop -i ens33<br />
-B 以bytes为单位显示流量(默认是bits)，如 iftop -B<br />
-n使host信息默认直接都显示IP，如：iftop -n<br />
-N使端口信息默认直接都显示端口号，如: iftop -N<br />
-P使host信息及端口信息默认就都显示<br />
也可进入iftop画面后，进行按键操作<br />
字母B n p等</p>
<p>退出命令</p>
<pre><code>q</code></pre>
<h2>以上几个网络工具是本人感觉比较好用的，也是常用的，对于初学者来说，足够用了！</h2>]]></description>
    <pubDate>Sun, 14 Nov 2021 01:29:39 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=17</guid>
</item>
<item>
    <title>Centos7&amp;8常用命令</title>
    <link>https://sunplayer.cn/?post=16</link>
    <description><![CDATA[<h1>对于初学者来说，学习Linux莫过于先连接Linux基本命令的运用，下面就介绍一些常用的Linux的命令</h1>
<h3>注：本文只介绍了常用命令参数，更多参数建议用--help或man来查看帮助信息(如 vi --help 或 man vi)</h3>
<h2>关机和重启</h2>
<h3>立刻关机</h3>
<pre><code>poweroff </code></pre>
<h3>立刻重启</h3>
<pre><code>reboot </code></pre>
<h2>Linux中常用的组合键：</h2>
<p>Ctrl + c 中止当前正在执行的程序。</p>
<p>Ctrl + d 相当于exit命令，退出当前会话。</p>
<p>Ctrl + z 将当前运行的程序放到后台运行。与运行时加 &amp; 类似。</p>
<p>Ctrl + s 暂停终端，锁定输入状态（肯定有很多人踩过坑）</p>
<p>Ctrl + q 取消锁定输入状态</p>
<p>Tab 键 自动补全命令</p>
<h2>yum: 软件包管理器</h2>
<p>可从yum源下载并安装rpm包，并自动解决依赖关系。（Centos8升级为dnf,兼容yum）</p>
<p>命令应用<br />
安装vim编辑器(-y参数，yes,不加该参数会有一个确认的提示)</p>
<pre><code>yum -y install vim</code></pre>
<p>移除vim</p>
<pre><code>yum -y remove vim</code></pre>
<p>更新所有软件</p>
<pre><code>yum update</code></pre>
<p>升级指定的包，如wget</p>
<pre><code>yum -y update wget</code></pre>
<p>清除所有缓存</p>
<pre><code>yum clean all</code></pre>
<p>仅下载所需软件和及其依赖包不安装（仅下载nginx及其依赖包到/home目录，不安装）</p>
<pre><code>yum -y install --downloadonly nginx --downloaddir=/home</code></pre>
<h2>clear: 清屏命令</h2>
<p>清除屏幕所有显示</p>
<pre><code>clear</code></pre>
<h2>ls: 目录查看命令</h2>
<p>参数<br />
ls                查看当前目录下的所有目录和文件<br />
ls -a             查看当前目录下的所有目录和文件（包括隐藏的文件）<br />
ls -l 或 ll       列表查看当前目录下的所有目录和文件（列表查看，显示更多信息）<br />
ls /              查看指定目录下的所有目录和文件（如：查看根目录下的文件和子目录）<br />
ls -lh (ll -h)    查看文件大小<br />
ls -t             按最后修改时间对文件进行排序<br />
ls -1             每行显示一个文件或目录</p>
<p>举例说明<br />
查看/home目录下所有文件及子文件夹</p>
<pre><code>ls /home</code></pre>
<p>查看/home目录下所有文件及子文件夹,包含隐藏文件</p>
<pre><code>ls -a /home</code></pre>
<p>查看/home目录下所有文件及子文件夹,以列表的形式显示(可查看文件权限、大小、修改时间等)</p>
<pre><code>ll /home</code></pre>
<p>注：可以与其他参数配合，如head.下面的意思是/home下的文件按照最后的修改时间并且每行只显示一个文件的方式进行排序显示.只显示第一行，也就是只列出最后修改的一个文件</p>
<pre><code>ls -1t /home | head -n1</code></pre>
<h2>ps：列出系统中当前运行的进程</h2>
<p>ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义<br />
-A 列出所有的进程<br />
-C 列出指定程序的情况<br />
-w 显示加宽可以显示较多的资讯<br />
-au 显示较详细的资讯<br />
-aux 显示所有包含其他使用者的进程信息</p>
<p>举例说明<br />
列出当前所有进程信息</p>
<pre><code>ps -aux</code></pre>
<p>列出nginx的进程信息</p>
<pre><code>ps -C nginx</code></pre>
<h2>find: 搜索命令</h2>
<p>参数<br />
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件，避免列出其它文件系统中的文件</p>
<p>-amin n : 在过去 n 分钟内被读取过</p>
<p>-anewer file : 比文件 file 更晚被读取过的文件</p>
<p>-atime n : 在过去n天内被读取过的文件</p>
<p>-cmin n : 在过去 n 分钟内被修改过</p>
<p>-cnewer file :比文件 file 更新的文件</p>
<p>-ctime n : 在过去n天内被修改过的文件</p>
<p>-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name</p>
<p>-ipath p, -path p : 路径名称符合 p 的文件，ipath 会忽略大小写</p>
<p>-name : 文件名称符合 name 的文件。iname 会忽略大小写</p>
<p>-size n : 文件大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。</p>
<p>-type  : 文件类型</p>
<p>d: 目录</p>
<p>c: 字型装置文件</p>
<p>f: 一般文件</p>
<p>l: 符号连结<br />
格式<br />
find 所需搜索的目录 参数  文件名称</p>
<p>举例说明</p>
<p>搜索/home目录下（包含子目录）名为test.log的具体文件路径</p>
<pre><code>find /home -name test.log</code></pre>
<p>搜索根目录下所有以.log结尾的文件</p>
<pre><code>find / -name *.log</code></pre>
<p>列出当前目录下所有的一般文件</p>
<pre><code>find . -type f</code></pre>
<p>列出/var目录下所有子目录</p>
<pre><code>find /var -type d</code></pre>
<p>列出/var下以w开头的目录</p>
<pre><code>find /var -name w* -type d</code></pre>
<p>列出当前目录下大于10M的文件</p>
<pre><code>find . -size 10M</code></pre>
<h2>cd: 目录切换命令,可切换多级目录</h2>
<p>切换到home目录</p>
<pre><code>cd /home</code></pre>
<p>切换到当前用户主目录</p>
<pre><code>cd ~</code></pre>
<p>切换到当前目录的上一目录</p>
<pre><code>cd ..</code></pre>
<p>切换到上次访问的目录</p>
<pre><code>cd -</code></pre>
<h2>mkdir：目录创建命令</h2>
<p>参数<br />
-m, --mode=模式   创建目录时同时设定权限,只在最后一级目录生效,不论上级目录是否存在-不常用<br />
-p, --parents     需要时创建上层目录，如目录早已存在则不当作错误-常用<br />
-v, --verbose     每次创建新目录都显示信息<br />
-Z, --context=CONTEXT (SELinux) 设置安全上下文，当使用SELinux时有效；-不常用<br />
--help     显示此帮助信息并退出-不常用<br />
--version  输出版本信息并退出-不常用</p>
<p>举例说明(所需创建目录均不存在)</p>
<p>1 在根目录创建名为test的目录</p>
<pre><code>mkdir /test</code></pre>
<p>2 在根目录创建名为my_mk的目录,并在test目录同时创建名为test_1的目录</p>
<pre><code>mkdir -p /my_mk/test_1</code></pre>
<p>3 在根目录创建名为mk_test的目录，并在mk_test目录下同时创建名为test_1、test_2、test_3的三个目录</p>
<pre><code>mkdir -p /mk_test/{test_1,test_2,test_3}</code></pre>
<p>4 在根目录下创建名为our_test的目录，并在our_test目录下创建test_4目录，同时设置创建test_4目录权限为700(此权限只在test_4目录生效，our_test目录不受影响)</p>
<pre><code>mkdir -p -m 700 /our_test/test_4</code></pre>
<h2>touch：修改文件或者目录的时间属性，包括存取时间和更改时间。若文件不存在，系统会建立一个新的文件。我一般只用来创建空文件。</h2>
<p>参数<br />
-a 只更改存取时间；<br />
-c 若文件不存在，不建立新文件；<br />
-d 使用指定的日期，而非现在的日期；（yyyy年mm月dd日）<br />
-m 只修改文件的修改时间为当前时间；<br />
-r 把指定文件或目录的日期时间，设成和目标文件或目录的相同的日期时间<br />
-t 使用指定的时间，而非现在的时间；语法:年月日时分.秒 如 200111082339.12（秒数前面有个点）</p>
<p>举例说明<br />
1 创建空文件test</p>
<pre><code>touch test</code></pre>
<p>2 同时创建多个文件</p>
<pre><code>touch test test.log .....</code></pre>
<p>3 创建多个有序的空文件test1到test4</p>
<pre><code>touch test{1..4}</code></pre>
<p>4 创建多个有序的空文件test1.log到test4.log</p>
<pre><code>touch test{1..4}.log</code></pre>
<p>5 创建多个有相同字符的空文件test5.log test7.log test.9.log</p>
<pre><code>touch test{5,7,9}.log</code></pre>
<p>6 更改文件的时间戳(访问、修改、状态改变时间)为当前系统时间(文件不存在则创建，已存在文件只会修改时间戳)</p>
<pre><code>touch test1.log</code></pre>
<p>7 设定文件的时间戳(源时间戳202111082339)</p>
<pre><code>touch -t 200111082339.12 test.log</code></pre>
<p>8 将文件日期调整为两天前（访问和修改的日期）</p>
<pre><code>touch -d "2 days ago" test1.log</code></pre>
<p>9 将文件日期调整为2008年10月12日（访问和修改的日期）</p>
<pre><code>touch -d '20081012' test2.log</code></pre>
<p>注：查看文件的访问、修改、状态改变时间</p>
<pre><code>stat file_name </code></pre>
<h2>vi/vim: 文本编辑器</h2>
<p>vi系统自带，vim未安装的话需要安装。创建并编辑新文件或修改现有文件<br />
默认进入后处于正常模式，无法编辑，通常用字母i/insert进入编辑模式<br />
字符按键以及Shift组合，输入字符<br />
ENTER，回车键，换行<br />
BACK SPACE，退格键，删除光标前一个字符<br />
DEL，删除键，删除光标后一个字符<br />
方向键，在文本中移动光标<br />
HOME/END，移动光标到行首/行尾<br />
Page Up/Page Down，上/下翻页<br />
Insert，切换光标为输入/替换模式，光标将变成竖线/下划线<br />
ESC，退出输入模式，切换到命令模式<br />
:q        退出；<br />
:q!        不保存退出；<br />
:w        保存；<br />
:w!        强行保存；<br />
:wq        保存退出<br />
:wq!      强制保存并退出</p>
<h2>cat:文本文件内容查看和连接工具</h2>
<p>参数<br />
-b 在非空行前显示所行号<br />
-n 在每行前显示行号,包括空行</p>
<p>举例说明<br />
查看test.log文件的内容</p>
<pre><code>cat test.log</code></pre>
<p>查看testt.log文件的内容，在非空行前显示所行号</p>
<pre><code>cat -b test.log</code></pre>
<p>查看testt.log文件的内容，在每行前显示行号,包括空行</p>
<pre><code>cat -n test.log</code></pre>
<p>扩充知识点：<br />
查看物理CPU个数</p>
<pre><code>cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l</code></pre>
<p>查看每个CPU核数：</p>
<pre><code>cat /proc/cpuinfo | grep "cpu cores" | uniq | awk '{print $4}'</code></pre>
<p>查看全部CPU逻辑核心数（CPU线程）</p>
<pre><code>cat /proc/cpuinfo | grep "processor" | wc -l</code></pre>
<p>直接查看CPU具体信息</p>
<pre><code>lscpu</code></pre>
<p>用cat创建文件并写入内容(常用与shell脚本)<br />
说明：<br />
一个大于号‘&gt;’ 代表输出的内容重定向到文件,覆盖源文件内容，一般用于新建文件时<br />
两个大于号‘&gt;&gt;’ 代表输出的内容重定向到文件,将输出内容追加到源文件内容后面行，一般用于源文件存在时<br />
EOF只是标识，也可以用别的符号代替比如FFF等等。最后一个EOF一定要在行首，前面不能有空格等。</p>
<p>格式：</p>
<pre><code>cat &gt;或者&gt;&gt; 需要创建或者追加内容的文件名 &lt;&lt; EOF
"需要重定向的内容"
EOF</code></pre>
<p>创建test.txt文件并写入内容&quot;It is a test&quot;</p>
<pre><code>cat &gt; test.txt &lt;&lt; EOF
It is a test
EOF</code></pre>
<p>向test.txt文件追加写入内容&quot;Yes just a test&quot;</p>
<pre><code>cat &gt;&gt; test.txt &lt;&lt; EOF
Yes just a test
EOF</code></pre>
<p>当输入的字符包含变量时，会先解析变量，然后将解析内容重定向到文件，如</p>
<pre><code>定义变量
file="It is a test file"

将变量解析后重定向到文件。（查看test.txt内容，显示内容:It is a test file）
cat &gt; test.txt &lt;&lt; EOF
$file
EOF

当需要将变量当做普通字符重定向到文件时，需要用单引号或双引号将第一个EOF括起来

定义变量
file="It is a test file"

将变量当做普通字符重定向到文件。（查看test.txt内容，显示内容:$file）
cat &gt; test.txt &lt;&lt; 'EOF'
$file
EOF</code></pre>
<h2>cp：复制命令</h2>
<p>参数<br />
-a：此选项通常在复制目录时使用，它保留链接、文件属性，并复制目录下的所有内容。是dpR参数组合。<br />
-d：复制时保留链接。<br />
-f：覆盖已经存在的目标文件而不给出提示。测试中加上此参数还是提示<br />
-i：与 -f 选项相反，在覆盖目标文件之前给出提示，要求用户确认是否覆盖。这个是使用命令时默认就已将加上的参数。<br />
-p：除复制文件的内容外，还把修改时间和访问权限也复制到新文件中。<br />
-r：若给出的源文件是一个目录文件，此时将复制该目录下所有的子目录和文件。<br />
-l：不复制文件，只是生成链接文件（此链接为硬链接，硬链接：只能用于文件不能用于目录）</p>
<p>举例说明<br />
1  将目录my_test及my_test下的所有文件复制到新目录our_test目录下（复制源包含目录时，-r参数必须加）</p>
<pre><code>cp -r my_test our_test</code></pre>
<p>2 将目录my_test下的所有文件复制到新目录our_test目录下(若目录my_test下存在子目录，参数-r必须加，不存在子目录，参数-r可不加)</p>
<pre><code>cp -r my_test/* our_test/</code></pre>
<p>3 将目录my_test下的所有文件复制到新目录our_test目录下,同名文件覆盖不提示（注意，建议用\cp而不是加参数-f）</p>
<pre><code>\cp -r my_test/* our_test/</code></pre>
<p>4 只复制目录my_test下的文件test.log及目录your_test到新目录our_test目录下</p>
<pre><code>cp -r my_test/{test.log,your_test} our_test/</code></pre>
<p>5 将目录my_test下的所有文件、链接及所有属性复制到新目录our_test目录下,同名文件覆盖不提示</p>
<pre><code>\cp -a my_test/* our_test/</code></pre>
<p>6 将目录my_test下的文件test.log复制一份名为test_bak.log的备份文件</p>
<pre><code>cp my_test/test.log my_test/test_bak.log</code></pre>
<h2>mv: 剪切/移动、重命名文件或文件夹</h2>
<p>参数<br />
-b 若需覆盖文件，则覆盖前先行备份<br />
-f 强制移动或覆盖并且不提示<br />
-i 目标文件存在时有覆盖提示，默认参数，不用加</p>
<p>举例说明<br />
将目录my_test下的所有文件剪切到新目录our_test目录下，存在同名文件会有覆盖提示</p>
<pre><code>mv my_test/* our_test/</code></pre>
<p>将目录my_test下的所有文件剪切到新目录our_test目录下,若存在同名文件直接覆盖不提示</p>
<pre><code>mv -f my_test/* our_test/</code></pre>
<p>将目录my_test(包含目录下所有文件和子目录)剪切到新目录our_test目录下</p>
<pre><code>mv my_test/ our_test/</code></pre>
<p>将目录my_test下test.log文件剪切到新目录our_test目录下，存在同名文件会有覆盖提示</p>
<pre><code>mv my_test/test.log our_test/</code></pre>
<p>将目录my_test下test.log文件剪切到新目录our_test目录下,若目标目录存在同名文件，则先备份目标目录内同名文件，然后直接覆盖不提示(备份文件名为test.log~)</p>
<pre><code>mv -fb my_test/test.log our_test/</code></pre>
<p>将目录my_test下test.log和test1.log两个文件剪切到新目录our_test目录下，存在同名文件会有覆盖提示</p>
<pre><code>mv my_test/{test.log,test1.log} our_test/</code></pre>
<p>将目录my_test下test.log文件剪切到新目录our_test目录下,并更名为test_bak.log</p>
<pre><code>mv my_test/test.log our_test/test_bak.log</code></pre>
<h2>rm: 删除命令</h2>
<p>参数<br />
-i 删除前逐一询问确认。（默认删除时就询问，一般不用加）<br />
-f 强制删除无需确认，不论源文件属性是什么。（慎用）<br />
-r 将目录下文件逐一删除。（删除文件为目录或其目录下包含子目录时使用）</p>
<p>举例说明<br />
1 将目录my_test下名为test.log的文件删除,删除时有确认提示</p>
<pre><code>rm my_test/test.log</code></pre>
<p>2 将目录my_test下名为test.log的文件删除,删除时无确认提示直接删除</p>
<pre><code>rm -f my_test/test.log</code></pre>
<p>3 将目录my_test下所有文件删除(包目录下的子目录)，删除时无确认提示直接删除</p>
<pre><code>rm -rf my_test/*</code></pre>
<p>4 只删除目录my_test下的文件test.log及子目录your_test,删除时无确认提示直接删除(不管子目录下是否存在文件或目录)</p>
<pre><code>rm -rf my_test/{test.log,my_test}</code></pre>
<p>5 将目录my_test删除,(不管该目录下是否有子目录或文件，都直接删除)，删除时无确认提示直接删除</p>
<pre><code>rm -rf my_test</code></pre>
<p>6 删除当前目录下所有文件,删除时无确认提示直接删除</p>
<pre><code>rm -rf *</code></pre>
<h2>pwd: 查看当前所在目录的具体路径</h2>
<p>参数 无<br />
常用与进入多级目录后查看当前所在目录</p>
<p>举例说明<br />
假如我目前所在的目录为/home/test/</p>
<pre><code>pwd 
显示结果：/home/test</code></pre>
<h2>scp：用于Linux之间文件或者目录的复制</h2>
<p>参数<br />
-1：强制scp命令使用协议ssh1<br />
-2：强制scp命令使用协议ssh2<br />
-4：强制scp命令只使用IPv4寻址<br />
-6：强制scp命令只使用IPv6寻址<br />
-B：使用批处理模式（传输过程中不询问传输口令或短语）<br />
-C：允许压缩（打开压缩功能）<br />
-p：保留原文件的修改时间，访问时间和访问权限。<br />
-q：不显示传输进度条。<br />
-r：递归复制整个目录（传输目录时使用，属于常用参数）。<br />
-v：显示详细的传输信息（个人喜欢加上此参数，出问题也知道哪里报错）。<br />
-c cipher： 以cipher将数据传输进行加密，这个选项将直接传递给ssh。<br />
-F ssh_config： 指定一个替代的ssh配置文件，此参数直接传递给ssh。<br />
-i identity_file： 从指定文件中读取传输时使用的密钥文件，此参数直接传递给ssh。<br />
-l limit： 限速功能，限制传输速度，以Kbit/s为单位。<br />
-o ssh_option： 如果习惯于使用ssh_config(5)中的参数传递方式，<br />
-P port：端口，注意是大写的P(默认端口是22，如果远程服务器修改了SSH端口，则需要加此参数，指定端口号，属于常用参数)</p>
<p>命令<br />
scp 参数 源文件或目录 目标文件或目录<br />
举例说明（test为远程主机用户名，以下命令都会提示输入远程主机密码）<br />
将当前目录下的scp_test.txt传输到远程主机192.168.1.111的/home/My_test目录下，文件名称不变(若远程目录下存在同名文件，将会被覆盖且无提示)</p>
<pre><code>scp scp_test.txt test@192.168.1.111:/home/My_test</code></pre>
<p>将当前目录下的scp_test.txt传输到远程主机192.168.1.111的/home/My_test目录下,并更名为My_scp.txt(若远程目录下存在同名文件，将会被覆盖且无提示)</p>
<pre><code>scp scp_test.txt test@192.168.1.111:/home/My_test/My_scp.txt</code></pre>
<p>使用ssh2协议将远程主机192.168.1.112的/home/My_test目录复制到本机的/scp目录下，远程主机端口222，显示详细传输信息</p>
<pre><code>scp -2rvP 222 test@192.168.1.112:/home/My_test /scp</code></pre>
<p>使用ssh2协议将远程主机192.168.1.112的/home/My_test目录复制到本机的/scp目录下并更名为My_scp_test，远程主机端口222，显示详细传输信息</p>
<pre><code>scp -2rvP 222 test@192.168.1.112:/home/My_test /scp/My_scp_test</code></pre>
<p>使用ssh2协议将/home目录的scp_test.txt复制到远程主机192.168.1.113的/test目录下，远程主机端口223，显示详细传输信息</p>
<pre><code>scp -2rvP 223 /home/scp_test.txt test@192.168.1.113:/test</code></pre>
<p>复制多个文件到远程主机192.168.1.111的/home/My_test目录下，远程主机端口223,以下两条命令均可</p>
<pre><code>scp 1.txt 2.txt -P 223 test@192.168.1.111:/home/My_test
scp {1,2}.txt -P 223 test@192.168.1.111:/home/My_test</code></pre>
<p>复制远程主机192.168.1.111多个文件到本地当前目录，远程主机端口223</p>
<pre><code>scp -P 223 test@192.168.1.111:/home/My_test/\{1.txt,2.txt\} ./</code></pre>
<p>复制远程主机192.168.1.111的/home/My_test目录到本地当前目录，远程主机端口223,复制完成后，你在当前目录下可看到已复制过来的My_test目录</p>
<pre><code>scp -rP 223 test@192.168.1.111:/home/My_test/ ./</code></pre>
<h2>chmod: 更改文件权限</h2>
<p>文件权限表示：<br />
r、w、x表示读、写、执行权限，也可用数字表示：数字 4 、2 和 1，即 r=4，w=2，x=1<br />
rwx = 4 + 2 + 1 = 7（读、写、执行权限）<br />
rw = 4 + 2 = 6（读、写权限）<br />
rx = 4 + 1 = 5（读、执行权限）</p>
<p>文件用户权限表示<br />
u 表示“用户（user）”，即文件或目录的所有者。<br />
g 表示“同组（group）用户”，即与文件属主有相同组ID的所有用户。<br />
o 表示“其他（others）用户”。<br />
a 表示“所有（all）用户”。它是系统默认值。</p>
<p>常用可选项<br />
-R 表示给目录内所有文件递归指定权限</p>
<p>文件权限的操作：</p>
<ul>
<li>添加某个权限。</li>
<li>取消某个权限。</li>
<li>= 赋予给定权限并取消其他所有权限（这个我用的最多，直接设定好所有权限，不用管原权限是什么）。</li>
</ul>
<p>命令格式<br />
chmod mode(u/g/o权限分配) 所需要更改权限的文件或目录</p>
<p>举例说明：<br />
设置test.log文件为所有用户可读、写、执行(默认权限rw-r-r,更改后权限(rwx-rwx-rwx)</p>
<pre><code>chmod 777 test.log</code></pre>
<p>删除其他用户的执行权限</p>
<pre><code>chmod o-x test.log</code></pre>
<p>设置文件test.log只有所属用户有读写权限，用户所属组（group）及其他用户（others）只有执行权限</p>
<pre><code>chmod =611 test.log</code></pre>
<p>设置文件test.log用户所属组（group）添加执行权限(这里)</p>
<pre><code>chmod g+x test.log</code></pre>
<p>设置test目录（不包含目录内文件及子目录）给用户所属组（group）及其他用户（others）增加写权限</p>
<pre><code>chmod go+w test</code></pre>
<p>设置test目录（包含目录内文件及子目录）给用户所属组（group）及其他用户（others）增加写权限</p>
<pre><code>chmod -R go+w test</code></pre>
<h2>chattr 修改文件系统的权限属性，此命令只有 root 用户可以使用</h2>
<p>格式<br />
chattr [+-=] [属性] 文件或目录名<br />
常用参数<br />
a 即Append Only.追加属性 如果对文件设置 a 属性，那么只能在文件中増加数据，但是不能删除和修改数据.如果对目录设置 a 属性，那么只允许在目录中建立和修改文件，但是不允许删除文件。<br />
i 即Immutable.只读属性 如果对文件设置 i 属性，那么不允许对文件进行删除、改名，也不能添加和修改数据.如果对目录设置 i 属性，那么只能修改目录下文件中的数据，但不允许建立和删除文件.<br />
R 递归修改所有的文件及子目录，这是一个可选项</p>
<p>例如1 给文件f123添加a属性.此时，只能向文件 f123 中新增数据，无法修改和删除文件中原有数据,也不能对文件重命名。</p>
<pre><code>chattr +a f123</code></pre>
<p>例如2 给目录 d456 添加a属性.此时，可以向目录d456中新增文件及目录，无法删除目录中原有文件,也不能对目录内文件重命名。测试时发现，可以修改目录内文件内容，但会生成一个备份文件，备份文件内容为原文件中的内容。</p>
<pre><code>chattr +a d456</code></pre>
<p>例如3 给文件f123添加 i 属性。此时，文件f123无法进行修改、新增、删除、重命名操作.</p>
<pre><code>chattr +i f123</code></pre>
<p>例如4 给目录 d456 添加i属性,那么只能修改目录 d456 下文件中的数据，但不允许建立和删除文件.也不能对目录及目录中的文件重命名。</p>
<pre><code>chattr +i d456</code></pre>
<p>例如5 给目录d456及其子目录下所有文件赋予i属性。那么只能修改目录d456及子目录下文件中的数据，目录d456及子目录，不允许建立和删除文件.也不能对目录及目录中的文件重命名</p>
<pre><code>chattr -R +i d456</code></pre>
<p>例如6 假如同时给文件f123赋予 a 及 i 属性,a属性表示允许新增数据，i属性表示拒绝新增数据，那么能否向文件 f123 新增或修改数据呢？不能！权限 “拒绝” 优先。对目录亦如此。</p>
<pre><code>chattr +ia f123</code></pre>
<p>上面是用‘+’号对文件或目录增加属性，相反，那么删除属性就用‘-’号，对目录亦如此。</p>
<pre><code>chattr -a f123</code></pre>
<p>假如我不管原来文件或者目录有什么属性，我只想给他指定i 或者 a 属性，那么就用‘=’号,此时，不管原文件或目录有什么属性，都会替换为你指定的属性。</p>
<pre><code>chattr =a f123</code></pre>
<p>我不知道文件或目录拥有哪些属性，怎么查看？用 lsattr 命令查看</p>
<pre><code>lsattr f123</code></pre>
<h2>chown: 更改文件或目录所有者</h2>
<p>格式<br />
chmod user:group 文件名或目录名<br />
常用参数<br />
-h 当更改的是链接时，更改的是链接的所有权，不更改链接指向的文件或目录的所有权，不指定此参数时，更改链接指向的文件或目录的所有权，不更改是链接的所有权<br />
-v 显示详细的处理信息<br />
常用可选项<br />
-R 表示给目录内所有文件递归指定权限</p>
<p>举例说明：<br />
更改test目录属主为www</p>
<pre><code>chown www test</code></pre>
<p>更改test目录所属组为www（前面有个冒号），不改变所属用户</p>
<pre><code>chown :www test</code></pre>
<p>更改test目录（不包含目录内文件及子目录）所属用户及所属用户组为www:www,一般情况下，设置文件归属时，会同时设置属主和属组(前面www代表用户，后面www代表用户组)</p>
<pre><code>chown www:www test</code></pre>
<p>更改test目录（包含目录内文件及子目录）所属用户及所属用户组为www:www,一般情况下，设置文件归属时，会同时设置属主和属组(前面www代表用户，后面www代表用户组)</p>
<pre><code>chown -R www:www test</code></pre>
<h2>top: 常用与查看资源占用（cpu、内存）</h2>
<p>注：这里CPU占用百分比是指单核的使用率，CPU如果是4（多）核的话，满载应该是 400%<br />
建议安装top升级版软件htop来使用</p>
<pre><code>yum -y install htop</code></pre>
<h2>free 显示系统内存的使用情况(物理内存、交换分区、内核缓冲区内存),默认按照k（b）的计数单位统计</h2>
<p>参数<br />
-h 自适应显示方式（大于1024M用G为单位显示，小于1G用M为单位显示）,个人喜欢用这个<br />
-m 以M为单位统计<br />
-g 以G为单位统计<br />
-s 刷新统计时间，默认单位秒</p>
<p>举例说明<br />
以M为单位，显示目前内存使用率</p>
<pre><code>free -m</code></pre>
<p>以自适应显示方式，显示目前内存使用率,并三秒刷一次，直到ctrl+c结束</p>
<pre><code>free -hs 3</code></pre>
<h2>tar: 打包和压缩命令</h2>
<p>参数：<br />
-A 新增压缩文件到已存在的压缩<br />
-c 建立新的压缩文件<br />
-x 从压缩的文件中提取文件<br />
-t 显示压缩文件的内容<br />
-z 支持gzip压缩解压文件(系统自带)<br />
-j 支持bzip2压缩解压文件(压缩能力要大于gzip,系统最小化安装，需要另外安装bzip2)<br />
-Z 支持compress解压文件<br />
-t 查看压缩文件内容<br />
-v 显示操作过程<br />
-f 指定压缩文件<br />
-C 指定解压目录</p>
<p>举例说明<br />
将www目录打包为www.tar</p>
<pre><code>tar -cf www.tar www</code></pre>
<p>将www.tar解压到当前目录(若当前目录已存在www目录，则www目录内同名文件将会被覆盖)</p>
<pre><code>tar -xf www.tar</code></pre>
<p>将www.tar解压到/home目录</p>
<pre><code>tar -xf www.tar -C /home</code></pre>
<p>将www目录打包，并用gzip压缩</p>
<pre><code>tar -czf www.tar.gz www</code></pre>
<p>将www.tar.gz解压到/var目录</p>
<pre><code>tar -xzf www.tar.gz -C /var</code></pre>
<p>将www目录打包，并用bzip2压缩</p>
<pre><code>tar -cjf www.tar.bz2 www</code></pre>
<p>将www.tar.bz2解压到/var目录</p>
<pre><code>tar -xjf www.tar.bz2 -C /var</code></pre>
<p>查看www.tar.bz2内的文件</p>
<pre><code>tar -tf www.tar.bz2</code></pre>
<h2>echo: 字符串的输出命令,常用与shell脚本</h2>
<p>-e 激活转义字符，默认情况下输出一般字符，但是以下字符特别处理<br />
\a 发出警告声；<br />
\b 删除前一个字符；<br />
\c 最后不加上换行符号；<br />
\f 换行但光标仍旧停留在原来的位置；<br />
\n 换行且光标移至行首；<br />
\r 光标移至行首，但不换行；<br />
\t 插入tab；<br />
\v 与\f相同；<br />
\ 插入\字符；<br />
\nnn 插入nnn（八进制）所代表的ASCII字符；</p>
<p>注：若是一般字符，双引号与单引号无异，当输入字符中包含变量时，双引号会输出变量解析后结果，单引号会将变量当做一般字符输出。<br />
输出一般字符</p>
<pre><code>echo "I will make a test"</code></pre>
<p>输出命令执行结果，即输出的是命令执行后的输出结果（命令用反引号括起来）</p>
<pre><code>echo `nmcli`</code></pre>
<p>输出带颜色或者背景颜色的字符<br />
控制选项：这个是可选的<br />
0m 关闭所有属性<br />
1m 设置高亮度<br />
4m 下划线<br />
5m 闪烁<br />
7m 反显<br />
8m 消隐<br />
文字颜色：重置=0，黑色=30，红色=31，绿色=32，黄色=33，蓝色=34，洋红=35，青色=36，白色=37<br />
背景颜色：重置=0，黑色=40，红色=41，绿色=42，黄色=43，蓝色=44，洋红=45，青色=46，白色=47</p>
<p>如：输出高亮绿色普通字符</p>
<pre><code>echo -e "\e[1;32m Test Green word \e[0m"</code></pre>
<p>输出高亮闪烁绿色普通字符（控制选项可以多个,用分号;隔开）</p>
<pre><code>echo -e "\e[1;5;32m Test Green word \e[0m"</code></pre>
<p>输出高亮闪烁绿色命令执行结果。注意，命令是是在反引号里面（这种使用方法一般人干不出来）</p>
<pre><code>echo -e "\e[1;5;32m `ping -c4 www.baidu.com` \e[0m"</code></pre>
<h2>cut: 对文件或者字符串的每一行根据需要进行截取</h2>
<p>参数<br />
-b ：以字节为单位进行截取(当截取的内容包含汉字时，需和参数-n同时使用，即：-nb)<br />
-c ：以字符为单位进行截取<br />
-d ：自定义分隔符，默认为制表符<br />
-f ：与-d一起使用，指定显截取的区域<br />
-n ：取消分割多字节字符。仅和 -b 标志一起使用。</p>
<h3>举例说明</h3>
<p>新建一个名为test.txt的文件，并写入一下内容</p>
<pre><code>It is a test
这是一个测试文件
00:11:22:33:44:55</code></pre>
<p>截取文件内容每行的第二个字符</p>
<pre><code>cut -c 2 test.txt
显示内容:
t
是
0</code></pre>
<p>截取文件内容每行的第三个字符</p>
<pre><code>cut -c 3 test.txt
显示内容(第一行为空，其实是个空格，详见扩展):

一
:</code></pre>
<p>截取文件内容每行的第一至第三个字符</p>
<pre><code>cut -c 1-3 test.txt
显示内容(第一行It后面有个空格,只是看不出来)：
It 
这是一
00:</code></pre>
<p>截取文件内容每行第四个字符及以后的内容</p>
<pre><code>cut -c 4- test.txt
显示内容：
is a test
个测试文件
11:22:33:44:55</code></pre>
<p>截取文件内容每行第1个、第4个、第6个字符</p>
<pre><code>cut -c 1,4,6 test.txt
显示内容
Ii 
这个试
01:</code></pre>
<p>以冒号&quot;:&quot;为分隔符，截取第2段内容</p>
<pre><code>cut -d : -f 2 test.txt
显示内容(只分割带指定分隔符的字符串，不含分隔符的，将全部显示)：
It is a test
这是一个测试文件
11</code></pre>
<p>扩展:<br />
字母、数字、汉字和特殊符号(+、*、の.....)都算字符，每一个都算一个字符<br />
一个汉字,utf-8编码下占用3个字节,gbk编码下，占用2个字节,当用参数-b时截取时，没有完整截取汉字所占字节数，总不能让汉字显示一半啊，所有只能与参数-n同时使用，只要截取到就显示完整汉字。<br />
由上看来，在实际使用中，参数-c是比较常用的。当使用参数-b，建议与-n参数同时使用，即-nb</p>
<h2>awk：文本分析工具，与cut不同的是，它是以行为单位，以某个分隔符为界限，将内容分成列或者叫多个字段，然后取列(字段)</h2>
<p>默认以tab键或者空格为分隔符将一行分为多个列(字段)<br />
常用参数<br />
-F   指定字段分隔符（当指定的分隔符不存在于某行时，则此行的所有内容将不输出）</p>
<p>注：<br />
NR   表示行号<br />
$0   表示这一行的内容<br />
$x   x为数字,表示某一列<br />
$NF  最后一列</p>
<p>举例说明<br />
新建一个名为awk.txt的文件，并写入一下内容</p>
<pre><code>This is awk test
I hope the test succeeds
Next a simple test is carried out</code></pre>
<p>以空格为分隔符,取第3个字段</p>
<pre><code>awk '{print $3}' awk.txt
显示内容
awk
the
simple</code></pre>
<p>以字母t为分隔符,取第2个字段</p>
<pre><code>awk -F t '{print $2}' awk.txt
显示内容(第二行he后面有个空格,第三行a前面有个空格)
es
he 
 a simple </code></pre>
<p>显示行号大于1的每行的内容</p>
<pre><code>awk 'NR&gt;1{print $0}' awk.txt
显示内容
I hope the test succeeds
Next a simple test is carried out</code></pre>
<p>显示行号大于1的每行的内容，并标注行号</p>
<pre><code>awk 'NR&gt;1{print NR,$0}' awk.txt
显示内容
2 I hope the test succeeds
3 Next a simple test is carried out</code></pre>
<p>只显示第三行的全部内容</p>
<pre><code>awk 'NR==3{print $0}' awk.txt
显示内容
Next a simple test is carried out</code></pre>
<p>显示行号大于1并且小于3的正行内容</p>
<pre><code>awk 'NR&gt;1&amp;&amp;NR&lt;3{print $0}' awk.txt
显示内容
I hope the test succeeds</code></pre>
<p>假如文本有10列内容,要求只截取3-10列,屏蔽1-2列,这个时候，我们需要将1、2列内容赋空值,然后打印所有行就好了</p>
<pre><code>awk '{$1=""; $2=""; print $0}' awk.txt
或者这样写
awk '{$1=$2=""; print $0}' awk.txt</code></pre>
<p>sed: 文本数据处理<br />
sed 后面接的动作以 两个单引号括住<br />
参数</p>
<p>-r：使用扩展正则表达式<br />
-i：直接对内容进行修改，不加-i时默认只是预览，所以此参数要慎用，备份是个好习惯</p>
<p>编辑命令(选项参数)<br />
a: 向匹配行的后面插入内容<br />
c: 更改匹配行的内容（整行都会被替换，一定要区别于选项参数s）<br />
i: 向匹配行前插入内容，与a想反<br />
d: 删除匹配的内容<br />
s: 替换掉匹配的内容（只会替换关键字，一定要区别于选项参数c）<br />
g: 全局</p>
<p>举例说明<br />
特殊范例：删除文件sed.txt内容的最后一行(没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '$d' sed.txt</code></pre>
<p>特殊范例：删除文件sed.txt内的空行(^表示开头，$表示结尾，没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '/^$/d' sed.txt</code></pre>
<p>特殊范例：在sed.txt文件中的每一行开头加一个#(没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed 's/^/#&amp;/g' sed.txt</code></pre>
<p>特殊范例：删除sed.txt文件中的空格(每行的空格都会被删除，没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed 's/ //' sed.txt</code></pre>
<p>将第三行的全部内容替换为This is number 3(没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '3cThis is number 3' sed.txt</code></pre>
<p>删除文件sed.txt包含number的行(所有包含number的行，全部都会被删除，没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '/number/d' sed.txt</code></pre>
<p>删除文件sed.txt第2-5行(没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '2,5d' sed.txt</code></pre>
<p>删除文件sed.txt第2行到最后一行的所有内容(没有加参数-i,因此只是预览，不会修改原文件)</p>
<pre><code>sed '2,$d' sed.txt</code></pre>
<p>删除文件sed.txt第五行，直接修改源文件而不预览</p>
<pre><code>sed -i '5d' sed.txt</code></pre>
<p>在文件sed.txt第二行后面插入一行，内容为It is a test,直接修改源文件而不预览</p>
<pre><code>sed -i '2aIt is a test' sed.txt</code></pre>
<p>在文件sed.txt第二行前面插入一行，内容为“Just trust me ”,直接修改源文件而不预览</p>
<pre><code>sed -i '2iJust trust me' sed.txt</code></pre>
<p>将文件sed.txt中的trust替换为believe，直接修改源文件而不预览(默认只替换每行第一个关键字,这就是说下面命令只替换每行的第一个trust)</p>
<pre><code>sed -i 's/trust/believe/' sed.txt</code></pre>
<p>将文件sed.txt中的trust全部替换为believe(g代表全局)，直接修改源文件而不预览</p>
<pre><code>sed -i 's/trust/believe/g' sed.txt</code></pre>
<p>将文件sed.txt中的所有行行首加上“#”号，直接修改源文件而不预览</p>
<pre><code>sed -i 's/^/#/' sed.txt</code></pre>
<p>将文件sed.txt中的所有行行尾部加上“%”,直接修改源文件而不预览</p>
<pre><code>sed -i 's/$/%/' sed.txt</code></pre>
<p>将文件sed.txt中的所有行行首加上“#”号，行尾部加上“%”,用一条命令同时执行，直接修改源文件而不预览</p>
<pre><code>sed -i '/./{s/^/#/;s/$/%/}' sed.txt</code></pre>
<h2>tee: 读取标准输入数据然后将输入数据内容输出到文件</h2>
<p>参数<br />
-a 将内容输入到文件原内容后面<br />
-i 忽略中断信号</p>
<p>举例说明<br />
查看当前目录下有哪些文件或目录，并将文件或目录名称写入tee_test.txt内(若不纯在tee_test.txt文件，将会自动新建一个，如果tee_test.txt文件存在，将会覆盖文件内容)</p>
<pre><code>ls | tee tee_test.txt</code></pre>
<p>查看当前目录下有哪些文件或目录，并将文件或目录名称写入tee_test.txt内(若不纯在tee_test.txt文件，将会自动新建一个，若tee_test.txt文件存在，则会将输入内容输入到文件原内容后面)</p>
<pre><code>ls | tee -a tee_test.txt</code></pre>]]></description>
    <pubDate>Sat, 13 Nov 2021 23:29:48 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=16</guid>
</item>
<item>
    <title>Centos7&amp;8创建及删除用户</title>
    <link>https://sunplayer.cn/?post=15</link>
    <description><![CDATA[<h1>个人的理解来，在Linux下，用户的种类分四种</h1>
<ul>
<li>1 超级用户：root，最高权限。这没啥好说的，一不小心整崩系统的那种。</li>
<li>2 服务用户：bin、ftp、sshd等，这类用户一般不用于登录使用，而是为了维持某个服务的运行，这类用户shell通常为/sbin/nologin，当然我们也可以创建此类用户。</li>
<li>3 特权用户：此类用户一般为我们安装完系统后，为了安全考虑而创建的一种用户，属于sudo(whell)组，使用sudo命令输入用户本身密码即可拥有大部分权限，用于日常运维。</li>
<li>4 普通用户：此类用户权限很低，只能在本用户主目录执行一些常用命令（touch、mkdir、rm、ping、tar等），无法使用yum安装或卸载应用。
<h2>用户信息说明：</h2>
<p>用户基本信息：存储在 /etc/passwd 文件中；<br />
用户密码信息：存储在 /etc/shadow 文件中；<br />
用户群组基本信息：存储在 /etc/group 文件中；<br />
用户群组信息信息：存储在 /etc/gshadow 文件中；<br />
用户个人文件：主目录默认位于 /home/用户名；<br />
邮箱位于 /var/spool/mail/用户名；</p>
<h2>创建（useradd）用户的常用参数说明：</h2>
<p>-c 指定一段用户注释性描述，一般懒人很少写描述，比如我。<br />
-m 创建主目录，一般情况下，此参数不用加，Centos7&amp;8创建用户时，会自动创建用户主目录。<br />
-M 不要自动建立用户的登入目录,一般是我们创建服务用户时用得到<br />
-d 指定用户主目录，此目录必须存在。<br />
-g 指定用户所属的用户组。Centos7&amp;8创建用户时，会自动创建用户组。也可以在创建用户时用此参数直接指定用户组。<br />
-G 指定用户所属的附加组。Centos7&amp;8创建用户时，用此参数可使用户同时属于多个组。<br />
-s Shell文件 指定用户的登录后使用的Shell。默认为/bin/bash。<br />
-u 用户号 指定用户的用户号，除非特殊需要，一般不用指定。当指定用户号后，不指定用户组时，默认新建的组号默认将与用户号相同。</p>
<h2>修改（usermod）用户的常用参数说明：</h2>
<p>-c 用户说明：修改用户的说明信息，即修改 /etc/passwd 文件目标用户信息的第 5 个字段,懒人一般用不到<br />
-d 主目录：修改用户的主目录，即修改 /etc/passwd 文件中目标用户信息的第 6 个字段，需要注意的是，主目录必须写绝对路径，特殊需要才改。<br />
-e 日期：修改用户的失效曰期，格式为 &quot;YYYY-MM-DD&quot;，即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段；特殊需要才改。<br />
-g 组名：修改用户的初始组，即修改 /etc/passwd 文件目标用户信息的第 4 个字段（GID）；常用。<br />
-u UID：修改用户的UID，即修改 /etc/passwd 文件目标用户信息的第 3 个字段（UID）；特殊需要才改。<br />
-G 组名：修改用户的附加组，其实就是把用户加入其他用户组，即修改 /etc/group 文件；常用。<br />
-l 用户名：修改用户名称；不经常用。<br />
-L：临时锁定用户（Lock）；不经常用。<br />
-U：解锁用户（Unlock），和 -L 对应；不经常用。<br />
-s shell：修改用户的登录 Shell，默认是 /bin/bash。不经常用。</p>
<h2>删除（userdel）用户的常用参数说明：</h2>
<p>-r  在删除用户的同时删除用户的家目录,若不加此参数，删除用户时只会删除用户，保留此用户主目录<br />
-f  强制删除用户，用与用户已登录时强制删除</p>
<h1>实例：</h1>
<h2>root（拥有sudo权限的用户）下创建普通用户 putong 并为用户创建登录密码：</h2></li>
</ul>
<p>创建用户</p>
<pre><code>    useradd putong</code></pre>
<p>为用户创建登录密码</p>
<pre><code>    passwd putong</code></pre>
<h2>root（拥有sudo权限的用户）下创建服务用户 fuwu(此类用户不用来本地或远程登录，无需设置密码)：</h2>
<pre><code>    useradd fuwu -M -s /sbin/nologin</code></pre>
<h2>更改用户的shell，更改后，用户能够登录</h2>
<pre><code>    usermod -s /bin/bash fuwu</code></pre>
<h2>更改用户的shell，更改后，用户既不能登录，也不能用于启动任何服务(说白了就是啥也不让干,注意/bin/false与/sbin/nologin区别)</h2>
<pre><code>    usermod -s /bin/false fuwu</code></pre>
<h2>重点：作为服务器来说，我们一般是不建议root账户具有远程登录权限的，尤其是将服务器托管在IDC的，因为这对于服务器的安全性来说，是一个很大的弊端。因此，需要创建一个特权用户来进行运维工作。</h2>
<h3>方法 一、</h3>
<p>创建用户，创建用户后，默认已创建了与该用户同名的用户组，且该用户默认属于此组</p>
<pre><code>    useradd tequan</code></pre>
<p>为特权用户设置密码</p>
<pre><code>    passwd tequan</code></pre>
<h3>使用usermod命令将此用户添加到wheel组，其中开关-a表示附加用户帐户（经测试，Centos7&amp;8此参数可不加），wheel组用户默认有sudo权限</h3>
<p>CentOS7&amp;8</p>
<pre><code>    usermod -aG wheel tequan</code></pre>
<p>Debian/Ubuntu</p>
<pre><code>    usermod -aG sudo tequan</code></pre>
<h3>方法二、</h3>
<p>创建特权用户并直接赋权(默认同时创建用户主目录：/home/tequan及登录的shell：/bin/bash)以下根据需要区分创建<br />
用户只属于wheel组：</p>
<pre><code>    useradd -g wheel tequan</code></pre>
<p>用户同时属于wheel组及tequan组</p>
<pre><code>    useradd -G wheel tequan</code></pre>
<p>为特权用户设置密码</p>
<pre><code>    passwd tequan</code></pre>
<h2>特例：允许特权用户在不输入用户密码的情况下运行sudo命令，</h2>
<h3>方法一 用visudo命令可直接编辑/etc/sudoers文件</h3>
<pre><code>    visudo</code></pre>
<p>当然，用vi或者vim（需要安装）也可</p>
<pre><code>    vi/vim /etc/sudoers</code></pre>
<p>在文件末尾并添加以下行并保存：</p>
<pre><code>    tequan  ALL=(ALL) NOPASSWD:ALL</code></pre>
<h3>方法二</h3>
<p>将 “# %wheel        ALL=(ALL)       NOPASSWD: ALL” 一行前面的注释(#号)去掉，这样的话，属于wheel组的用户均可在不输入用户密码的情况下运行sudo命令（懒人做法，但是方便啊）</p>
<h2>删除用户，以上面创建的特权用户为例：</h2>
<p>删除特权用户但保留用户目录</p>
<pre><code>    userdel tequan</code></pre>
<p>删除特权用户一切信息</p>
<pre><code>    userdel -r username</code></pre>
<p>强制删除已登录用户但保留其主目录</p>
<pre><code>    userdel -f username</code></pre>
<p>强制删除用户一切信息，不管你是否登录</p>
<pre><code>    userdel -rf username</code></pre>
<h1>查看用户信息（用户ID 所属组等）</h1>
<pre><code>    id username</code></pre>
<h1>查看wheel组内有哪些用户,其他组用法相同。</h1>
<p>groupmems<br />
参数说明<br />
-g 组名<br />
-l 列表list<br />
-h 帮助</p>
<pre><code>    groupmems -g wheel -l</code></pre>]]></description>
    <pubDate>Wed, 03 Nov 2021 23:46:01 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=15</guid>
</item>
<item>
    <title>Centos7&amp;8yum安装最新稳定版Nginx</title>
    <link>https://sunplayer.cn/?post=14</link>
    <description><![CDATA[<h1>对于生产环境来说，我们一般是建议安装最新稳定版的应用，Nginx就是其中之一</h1>
<h2>根据Nginx官网提供的安装文档，在Centos7.4+及Centos8.X上，可以用下面方法来安装目前最新最稳定的Nginx版本</h2>
<h3>步骤一：安装yum-utils，yum-utils是管理repository及扩展包的工具</h3>
<pre><code>yum -y install yum-utils</code></pre>
<h3>步骤二：创建nginx源 /etc/yum.repos.d/nginx.repo</h3>
<pre><code>vi /etc/yum.repos.d/nginx.repo</code></pre>
<p>将下列内容复制到文件保存</p>
<pre><code>[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true</code></pre>
<p>或者复制下面内容直接创建</p>
<pre><code>cat &gt; /etc/yum.repos.d/nginx.repo &lt;&lt; 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF</code></pre>
<p>创建缓存</p>
<pre><code>yum makecache</code></pre>
<h1>步骤三 安装Nginx</h1>
<pre><code>yum install nginx</code></pre>
<h3>此时，你会发现，安装Nginx的版本为官网最新最稳定的版本.</h3>
<p>Nginx安装完成后，默认配置文件即主配置文件路径</p>
<pre><code>/etc/nginx/nginx.conf</code></pre>
<p>在默认配置文件内，只有全局块、events块、http块，server块及location块配置为下面的配置文件</p>
<pre><code>/etc/nginx/conf.d/default.conf</code></pre>
<p>当然，我们也可以根据需要修改默认配置文件或者在/etc/nginx/conf.d/目录下创建其他后缀为.conf的配置文件，在nginx的主配置文件中有说明，包含/etc/nginx/conf.d/目录下后缀为.conf的配置文件。</p>
<h3>Nginx服务的启动和停止</h3>
<h4>启动Nginx服务</h4>
<pre><code>systemctl start nginx</code></pre>
<h4>停止Nginx服务</h4>
<pre><code>systemctl stop nginx</code></pre>
<h4>开机启动nginx服务</h4>
<pre><code>systemctl enable nginx</code></pre>
<h1>不要忘记在防火墙打开所需要的端口，已设置的略过</h1>
<h4>Firewalld</h4>
<pre><code>firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload</code></pre>
<h4>Iptables</h4>
<pre><code>iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart</code></pre>
<p>下面附上Nginx官方文档的地址</p>
<pre><code>https://nginx.org/en/linux_packages.html</code></pre>]]></description>
    <pubDate>Thu, 28 Oct 2021 20:09:09 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=14</guid>
</item>
<item>
    <title>Centos7&amp;8禁止其他主机ping本机</title>
    <link>https://sunplayer.cn/?post=13</link>
    <description><![CDATA[<h1>某些情况下，为了安全考虑，禁ping可很大程度上在网络上隐藏自己，防止一些批量扫描软件探测主机。</h1>
<h2>方式一</h2>
<h3>临时：1是启用禁ping，0是移除禁ping</h3>
<pre><code>echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all</code></pre>
<h2>方式二</h2>
<h3>永久：修改系统参数。注意是两个大于号“&gt;&gt;”。一个大于号，会用设置的参数替换原文件参数，原文件参数会丢失。两个大于号是在原文件参数后面添加新参数，与原参数共存。</h3>
<pre><code>echo net.ipv4.icmp_echo_ignore_all=1 &gt;&gt; /etc/sysctl.conf &amp;&amp; sysctl -p</code></pre>
<h2>方式三</h2>
<h3>firewalld（Centos7&amp;8默认的防火墙）</h3>
<h4>启用禁ping：</h4>
<pre><code>firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
firewall-cmd --complete-reload 或者 systemctl restart firewalld</code></pre>
<h4>移除禁ping：</h4>
<pre><code>firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop'
firewall-cmd --reload</code></pre>
<h2>方式4</h2>
<h3>iptables</h3>
<h4>启用禁ping</h4>
<pre><code>iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
service iptables save
service iptables restart</code></pre>
<h4>移除禁ping</h4>
<pre><code>iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
service iptables save
service iptables restart</code></pre>]]></description>
    <pubDate>Wed, 27 Oct 2021 17:20:47 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=13</guid>
</item>
<item>
    <title>Centos7&amp;8创建计划任务</title>
    <link>https://sunplayer.cn/?post=12</link>
    <description><![CDATA[<h1>常用场景，重启服务器或者对服务器数据进行备份，只要我们需要定点定时周期性的事情，就可以用计划任务实现。</h1>
<h2>安装编辑器vim,当然用系统自带的编辑器vi也是可以的,个人习惯，已安装的可以略过。</h2>
<pre><code>yum -y install vim</code></pre>
<h1>在Centos7&amp;8系统安装完成后，计划任务服务已经被默认安装，只不过是没有配置而已。</h1>
<h2>设置计划任务，编辑配置文件，配置文件为：/etc/crontab</h2>
<pre><code>vim /etc/crontab</code></pre>
<h3>以下为配置文件的默认配置</h3>
<pre><code>SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed</code></pre>
<h4>从配置文件中可以看出，有五个“*”，代表我们在时间和日期部分总共可以填写五个需求时间，从左至右，分钟(0 - 59) 、小时(0 - 23)、某天(1 - 31)、某月(1 - 12)、星期几(0 - 6，星期日为0或者7，也可以用sun,mon,tue,wed,thu,fri,sat来代替星期日至星期六，注意英文简写)，再往下是执行命令的用户、需要执行的命令。总共七个部分。时间单位可以是分钟、小时、日、月、周以及以上的任意组合，注意:日和周不要组合</h4>
<h4>注意：可以复杂组合，“*”星号表示任意时间、“-”减号表示一个时间段范围段，如5-8点，“，”逗号表示分隔时段，“/”反斜杠代表每隔多久。计划任务可以同时配置多个。</h4>
<h2>下面举例</h2>
<h3>每隔30分钟执行reboot，重启系统，完整参数如下</h3>
<pre><code>SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
*/30 *  *  *  * root  reboot</code></pre>
<h4>注：假如需要执行的是一个shell脚本，就将reboot命令替换为脚本的真实路径，如下：</h4>
<pre><code>*/30 *  *  *  * root  /media/backup.sh</code></pre>
<h4>假如需要执行多个脚本，可以将所有脚本放在同一目录下，比如都放在/media下，run-parts参数表示，执行后面目录中的所有可执行文件</h4>
<pre><code>*/30 *  *  *  * root run-parts /media</code></pre>
<h3>每晚的23：30执行reboot，重启一下系统，参数如下</h3>
<pre><code>30 23  *  *  * root  reboot</code></pre>
<h3>在每周四的上午8点到下午五点，每隔30分钟执行reboot，重启系统，参数如下</h3>
<pre><code>*/30 8-17  *  *  4 root  reboot</code></pre>
<h3>在每周四上午8点，10点及下午五点三个时间，执行reboot，重启系统，参数如下</h3>
<pre><code>0 8,10,17  *  *  4 root  reboot</code></pre>
<h3>在每个月的5号上午8点到下午五点，每隔30分钟执行reboot，重启系统，参数如下</h3>
<pre><code>*/30 8-17  5  *  * root  reboot</code></pre>
<h3>特殊参数配置，每分钟执行一次的任务</h3>
<pre><code>*  *  *  *  *  root  reboot</code></pre>
<h1>参数设置后，需要将计划任务服务随机启动并立即启动计划任务服务</h1>
<pre><code> systemctl enable crond
 systemctl start crond</code></pre>]]></description>
    <pubDate>Tue, 26 Oct 2021 20:47:38 +0800</pubDate>
    <dc:creator>冰城心无泪</dc:creator>
    <guid>https://sunplayer.cn/?post=12</guid>
</item></channel>
</rss>