环境说明: 在一台刚安装好的centos7.9上安装gcc-11.2.0

  1. 下载 gcc-11.2.0

wget --no-check-certificate https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz

  1. 解压

tar -zxvf gcc-11.2.0.tar.gz

  1. 执行下载依赖环境的脚本

yum install bzip2 gcc gcc-c++
./contrib/download_prerequisites

  1. 编译安装

cd gcc-11.2.0
mkdir build
cd build/
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make -j4
make install
–enable-languages表示你要让你的gcc支持那些语言
–disable-multilib不生成编译为其他平台可执行代码的交叉编译器
–disable-checking生成的编译器在编译过程中不做额外检查
也可以使用 –enable-checking=xxx 来增加一些检查

  1. 删除旧版gcc以及配置全局gcc

yum remove gcc g++
ln -s /usr/local/bin/gcc /usr/bin/gcc

  1. 验证安装

gcc -v

1. 复制一份备份文件

cp /etc/sysconfig/iptables{,.back}

2. 重命名

mv /etc/sysconfig/iptables{,.back}

3. 追加内容到文件尾

echo "123" >> /path/file

4. 树形查看目录大小

du -h --max-depth=1

5. 指定源搜索软件

yum repo-pkgs REPO list
yum repo-pkgs epel list | grep nginx
ANOTHER WAY TO
yum --disablerepo "*" --enablerepo REPO list
yum --disablerepo "*" --enablerepo REPO list | grep nginx

6. MySQL 5.7.37

password —> authentication_string

7. 挂载磁盘设备

fdisk /dev/vdb1
{n, p, size, type, w}
mkfs.ext4 /dev/vdb1
mount /dev/vdb1 /data

8. 使用代理

curl -–socks5 127.0.0.1:10808 https://www.google.com
wget -e http_proxy=127.0.0.1:10808 http://www/google.com
wget -e https_proxy=127.0.0.1:10808 https://www/google.com

8.1 测试是否使用代理

curl cip.cc

8.2 设置临时代理

export  http_proxy="http://username:password@proxyServer:port/"
export https_proxy="http://username:password@proxyServer:port/"
export ftp_proxy="http://username:password@proxyServer:port/"
export no_proxy="127.0.0.1,192.168.124.0/16,*.example.com"

8.3 取消代理

unset  http_proxy
unset https_proxy
unset ftp_proxy
unset no_proxy

8.4 永久代理

cat   >>  /etc/profile   << EOF
export http_proxy="http://username:password@proxyServer:port/"
export https_proxy="http://username:password@proxyServer:port/"
export ftp_proxy="http://username:password@proxyServer:port/"
export no_proxy="127.0.0.1,192.168.124.0/16,*.example.com"
EOF

source /etc/profile

9. 清空正在使用的文件

/usr/bin/cp /dev/null /path2yourFILE
> /path2yourFILE
cp使用绝对路径, 避免出现cp提示是否覆盖文件
对正在使用的文件,如果直接rm -rf 文件是没了, 但是占用的空间还在.

10. 图形化配置网络ip

nmtui

nmtui 是 NetworkManager 工具的一部分,它为你提供了一个漂亮的用户界面来配置网络。这是 NetworkManager-tui 包的一部分,当你完成最小服务器的安装时它应该默认安装。

11. 删除某个目录下除了某个文件之外

rm -rf /pathtoyourdir/(!xx.txt)

12. 不重启系统识别新添加的硬盘

for i in 0 1 2; do echo "- - -" > /sys/class/scsi_host/host$i/scan; done

13. 删除乱码文件

ls -i
find -inum xxxx -delete

14. 查找已删除但正在使用的文件

lsof +L1
lsof | grep deleted

  • +L 启用文件链接计数
  • -L 关闭文件链接计数
  • +L1 列出已打开但是被取消链接的文件 (一般指deleted)

15. Windows切换samba用户

  • 查看当前链接net use
  • 删除链接 net use * /del

16. 判断口段是否开放

nc -zv <ip> <port>

17. 99-sysctl.conf

99-sysctl.conf 是一个在 /etc/sysctl.d/ 目录中的文件,它是用来配置系统内核参数的。文件名中的数字 99 表示它的优先级较高,因为数字越大,优先级越高。在应用 sysctl 设置时,系统会按照文件名的字典序来顺序加载这些文件,较高优先级的文件会覆盖较低优先级的文件中相同参数的设置。

在 99-sysctl.conf 文件中,您可以指定各种系统内核参数的设置,比如网络参数、内存参数等。这些参数的设置可以影响系统的性能、安全性和行为

18. I/O读写情况

pidstat -d | sort -k 5 -n -r | head -n 10

pidstat -d : 查看磁盘I/O
sort: -k : 第五列 -n : 数值大小 -r : 逆序

19. 查看 MySQL 各个数据库的大小

  • 查看所有数据库大小

    SELECT table_schema AS `Database`, 
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
    FROM information_schema.tables
    GROUP BY table_schema;
  • 查看某个数据库的所有表

    SELECT 
    table_name AS `表名`,
    ROUND((data_length + index_length) / 1024 / 1048576, 2) AS `表大小(GB)`
    FROM
    information_schema.tables
    WHERE
    table_schema = 'your_dbname'
    ORDER BY
    (data_length + index_length) DESC;

20. MySQL一些初始测试

CREATE database IF NOT EXISTS rand_db character SET utf8 collate utf8_general_ci;
CREATE user IF NOT EXISTS 'admin'@'%' identified BY 'admin123';
GRANT all privileges ON rand_db.* TO 'admin'@'%';
flush privileges;


CREATE TABLE IF NOT EXISTS rand_db.rand_table (
id INT AUTO_INCREMENT PRIMARY KEY,
column1 VARCHAR(255),
column2 INT,
column3 DATETIME
);

21. pve 去除订阅弹窗

编辑文件
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
Ext.Msg.show –> Ext.Msg.noshow

22. firewalld public不生效

public区域没有指定接口的时候, 相关public的设置不一定生效

firewall-cmd --zone=public --add-interface=eth0 --permanent

23. Linux 终端快捷键

快捷键 功能
Ctrl + A 切换光标至行首
Ctrl + E 切换光标至行尾
Ctrl + U 删除光标至行首
Ctrl + K 删除光标至行尾
Ctrl + W 删除光标前一个词
Ctrl + L 清屏
Ctrl + C 停止正在执行的进程或命令
Ctrl + D 注销或退出终端
Ctrl + Z 暂停正在执行的进程(fg恢复)
Ctrl + R 在命令历史中进行逆向搜索
!! 重复执行上一条命令
!n 重复执行命令历史中的第 n 条命令

24. yum 撤回安装操作

某些情况下,为了安装某些软件需要安装大量依赖,比如下面

yum install cmake3 glib2-devel libpcap libpcap-devel libgcrypt-devel glib2-devel qt-devel qt5-qtbase-devel qt5-linguist qt5-qtmultimedia-devel qt5-qtsvg-devel libcap-devel libcap-ng-devel gnutls-devel krb5-devel libxml2-devel lua-devel lz4-devel snappy-devel spandsp-devel libssh2-devel bcg729-devel libmaxminddb-devel sbc-devel libsmi-devel libnl3-devel libnghttp2-devel libssh-devel libpcap-devel c-ares-devel redhat-rpm-config rpm-build gtk+-devel gtk3-devel desktop-file-utils portaudio-devel rubygem-asciidoctor docbook5-style-xsl docbook-style-xsl systemd-devel python34 cmake3 git gcc gcc-c++ flex bison doxygen gettext-devel libxslt cmake

某些包已经存在, 会直接跳过安装, 安装依赖后发现软件还是无法安装, 这个时候我们打算撤回依赖安装
此时yum remove的话,会删除关键依赖

yum remove cmake3 glib2-devel libpcap libpcap-devel libgcrypt-devel glib2-devel qt-devel qt5-qtbase-devel qt5-linguist qt5-qtmultimedia-devel qt5-qtsvg-devel libcap-devel libcap-ng-devel gnutls-devel krb5-devel libxml2-devel lua-devel lz4-devel snappy-devel spandsp-devel libssh2-devel bcg729-devel libmaxminddb-devel sbc-devel libsmi-devel libnl3-devel libnghttp2-devel libssh-devel libpcap-devel c-ares-devel redhat-rpm-config rpm-build gtk+-devel gtk3-devel desktop-file-utils portaudio-devel rubygem-asciidoctor docbook5-style-xsl docbook-style-xsl systemd-devel python34 cmake3 git gcc gcc-c++ flex bison doxygen gettext-devel libxslt cmake

正确做法:

yum history查看yum操作记录

[root@pve-centos7 ~]# yum history 
Loaded plugins: fastestmirror, langpacks
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
168 | root <root> | 2024-05-24 14:46 | Install | 84
167 | root <root> | 2024-05-24 14:09 | Erase | 1
166 | root <root> | 2024-05-24 10:55 | Install | 2
165 | root <root> | 2024-05-24 10:09 | Update | 7
164 | root <root> | 2024-05-16 09:25 | Install | 1
163 | root <root> | 2024-05-15 16:48 | Install | 46
162 | root <root> | 2024-05-14 09:51 | Install | 1
161 | root <root> | 2024-05-08 08:46 | Update | 2 P<
160 | <dev> | 2024-05-06 15:36 | Install | 1 >
159 | <dev> | 2024-05-06 15:36 | Install | 2 P<
158 | <dev> | 2024-05-06 11:21 | I, U | 26 ><
157 | root <root> | 2024-04-29 10:39 | Erase | 1 >
156 | root <root> | 2024-04-26 16:37 | Install | 9
155 | root <root> | 2024-04-26 13:25 | Update | 7
154 | root <root> | 2024-04-24 10:19 | Install | 9 EE
153 | root <root> | 2024-04-24 09:09 | Install | 1
152 | root <root> | 2024-04-15 15:39 | Update | 5 <
151 | root <root> | 2024-04-07 16:50 | Install | 8 >
150 | root <root> | 2024-04-07 16:49 | Install | 2
history list

撤回刚才的操作直接 yum history undo 168 即可

25. vim 常见快捷键

快捷键 功能
x 向右删除光标所在的文本
X(大写) 向左删除光标所在的文本
y 复制选中的文本
i 在当前光标位置前插入
I 在当前行首插入
a 在当前光标位置后插入
A(大写) 在当前行尾插入
0 切换至行首

26. 端口检测

某些情况下系统可能没有安装 telnet ,nc , nmap 等端口检测工具, 可以利用一下常见的命令变相检测端口的连通性.

  • ssh -v $IP -p $PORT

参数解释:
-v 标识详细模式
-p 指定端口

输出内容中看到 Connection established 表示该端口是开放的

图

  • echo >/dev/tcp/$IP/$PORT

图

27. 容器检测nginx进程

检测所有容器是否包含某个进程,并返回该容器的容器名

#!/bin/bash
containers=$(docker ps -q)
for container in $containers; do
container_name=$(docker inspect --format '{{.Name}}' $container | sed 's/^\/\([^/]*\)$/\1/')
if docker exec $container pgrep -x nginx > /dev/null 2>&1; then
echo "Container $container_name is running Nginx"
fi
done

28. 基于TCP的时间同步

基于 TCP端口37的时间同步

服务端:

yum install xinetd

配置文件:

vim /etc/xinetd.d/time-stream
disable = yes —> disable = no

客户端:

yum install rdate
rdate -s server_ip

29. 查看非空行和非注释行

grep -E '^\s*[^#]' example.txt
egrep -v "^$|^#" example.txt

30. docker镜像便捷传输

docker save mysql:5.7.44 | gzip | ssh [email protected] 'gunzip | docker load'

31. docker 配置代理

docker 不支持socks代理,请使用http代理

more /etc/systemd/system/docker.service.d/http-proxy.conf 
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809/"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/16,192.168.0.0/16"

Environment="HTTP_PROXY=socks://127.0.0.1:10809"
Environment="HTTPS_PROXY=socks://127.0.0.1:10809/"

32. 下载rpm包

rpm -aq | grep boost | xargs yumdownloader --destdir=./
--destdir=./ : 指定下载路径
- -resolve : 下载依赖

33. Linux 终端命令提示符

# 设置颜色
USER_COLOR="\[\e[0;32m\]" # 绿色
HOST_COLOR="\[\e[0;34m\]" # 蓝色
PATH_COLOR="\[\e[0;33m\]" # 黄色
RESET_COLOR="\[\e[0m\]" # 重置颜色

# 设置提示符
if [ "$EUID" -eq 0 ]; then
PS1="[${USER_COLOR}\u@\h${RESET_COLOR} ${PATH_COLOR}\w${RESET_COLOR}]# "
else
PS1="[${USER_COLOR}\u@\h${RESET_COLOR} ${PATH_COLOR}\w${RESET_COLOR}]$ "
fi

34. git 代理

  • http/https代理
    git config --global http.https://github.com.proxy socks5://127.0.0.1:10808
  • ssh 代理
    vim ~/.ssh/config
    Host github.com
    Hostname ssh.github.com
    Port 443
    User git
    ProxyCommand nc -v -x 127.0.0.1:10808 %h %p
    IdentityFile ~/.ssh/id_rsa
    TCPKeepAlive yes

35. 任务后台运行

yum install screen -y

  • 启动新会话
    screen -S $SESSION_NAME

  • 将会话放入后台
    Ctrl + A, D

  • 查看后台运行的会话
    screen -ls

  • 重新连接会话
    screen -r $SESSION_NAME 或者 screen -r SESSION_ID

  • 结束会话
    Ctrl + D 或者 会话中执行 exit

  • 强制终止会话
    screen -X -S SESSION_NAME quit

36. 不借助 netstat, ss, lsof 命令查看进程监听的端口

某些情况, 比如容器内, 没有netstat, ss, lsof这些命令的情况下查看端口监听情况

cat /proc/net/tcp 查看所有进程的监听情况
cat /proc/1121/net/tcp 查看进程id为1121的端口监听情况

 cat /proc/net/tcp | awk 'NR>1 {
split($2,local,":");
split($3,remote,":");
printf("Local: %d.%d.%d.%d:%d Remote: %d.%d.%d.%d:%d\n",
strtonum("0x"substr(local[1],7,2)),
strtonum("0x"substr(local[1],5,2)),
strtonum("0x"substr(local[1],3,2)),
strtonum("0x"substr(local[1],1,2)),
strtonum("0x"local[2]),
strtonum("0x"substr(remote[1],7,2)),
strtonum("0x"substr(remote[1],5,2)),
strtonum("0x"substr(remote[1],3,2)),
strtonum("0x"substr(remote[1],1,2)),
strtonum("0x"remote[2]))
}'

一、 安装前准备

1.1 查看当前openssh版本

[root@centos7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[root@centos7 ~]#

1.2 查看当前openssl版本

[root@centos7 ~]# 
[root@centos7 ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@centos7 ~]#

1.3 安装依赖

yum install perl perl-Test-Harness perl-Test-Simple
yum groupinstall Development Tools

1.4 安装 zlib

1.4.1 下载

wget http://www.zlib.net/zlib-1.3.tar.gz

1.4.2 解压

tar -xzvf zlib-1.3.tar.gz

1.4.3编译&安装:

cd zlib-1.3
./configure --prefix=/usr/local/zlib
make
make test # 这一步出错不要继续 # 看到ok字样表示成功
make install

二、 安装OpenSSL(非必须)

2.1 源码编译安装

官网下载地址: https://www.openssl.org/source/

2.1.1 下载:

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz

2.1.2 解压

tar -xzvf openssl-1.1.1w.tar.gz

2.1.3 编译&安装:

cd openssl-1.1.1w
./config --shared --prefix=/usr/local/openssl # --shared 创建共享库
make -j4 # - j4 使用四个进程
make install

2.2 替换openssl为新版本

2.2.1 替换 openssl 二进制文件

mv /usr/bin/openssl{,.back}
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

2.2.2 openssl 相关库

mv /usr/include/openssl{,.back}
ln -s /usr/local/openssl/include/openssl/ /usr/include/

2.2.3 共享库路径加入系统

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

2.2.4 验证

ldconfig -v | grep openssl

三、 安装OpenSSH

3.1 备份相关文件

mv /etc/ssh{,.back}
mv /etc/pam.d/sshd{,.back}

3.2 下载

wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz

3.3 解压

tar -xzvf openssh-9.5p1.tar.gz

3.4 编译&安装

cd openssh-9.5p1
./configure \
--prefix=/usr/local/openssh \
--sysconfdir=/etc/ssh \
--with-zlib=/usr/local/zlib \
--with-ssl-dir=/usr/local/openssl \
--with-pam
make -j4
make tests
make install

3.5 注意事项

确保使用了openssl-1.1.1

./config的结果

make tests 这里时间特别较长

保证.key文件的权限为 0600

注意: 安装完不可直接systemctl去重启sshd, 可能会造成服务器无法连接
请在有ssh之外远程到服务器上的权限再去升级ssh, 避免升级过程中导致ssh无法连接

3.6 修改sshd配置文件

其实直接恢复原来的sshd_conf文件即可. 保险起见使用如下配置
编辑sshd配置文件: vim /etc/ssh/sshd_config
添加: PermitRootLogin yes

3.7 复制sshd的pam配置文件

cp openssh-9.5p1/contrib/redhat/sshd.pam /etc/pam.d/sshd

3.8 使用systemctl管理sshd

配置启动脚本
cp openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshd

添加sshd的service配置文件
vim /usr/lib/systemd/system/sshd.service

#vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/sshd start
ExecStop=/etc/rc.d/init.d/sshd stop
Restart=/etc/rc.d/init.d/sshd stop
[Install]
WantedBy=multi-user.target

3.9 替换为新的 sshd

mv /usr/bin/ssh{,.back}
mv /usr/sbin/sshd{,.back}
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh

重载systemctl
systemctl daemon-reload
重启sshd
systemctl restart sshd

3.10 验证

四、 相关问题

4.1 error: *** working libcrypto not found

解决: yum install openssl-devel

4.2 error: PAM headers not found

解决: yum install pam-devel

4.3 升级 openssl3.0.12 Can’t locate IPC/Cmd.pm

解决: yum install perl-IPC-Cmd

简洁点

  1. press e on grub,
  2. add parameters rd.break
  3. Ctrl + x
  4. mount -o remount rw /sysroot
  5. chroot /sysroot
  6. passwd
  7. touch /.autorelabel
  8. exit
  9. reboot

阅读全文 »

Linux下系统监视

System 系统

1. iostat 设备负载信息

命令 iostat 包含在软件包 sysstat
image.png

NOTE:
查询哪个软件包提供哪个command yum whatprovides COMMAND
查询哪个软件包提供哪个文件 yum whatprovides FILE

第一份 iostat 报告显示自引导系统以来收集的统计信息。后续报告则涵盖上一份报告之后的时间。

[root@centos7 ~]# iostat
Linux 3.10.0-1160.62.1.el7.x86_64 (centos7.9) 05/11/2022 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.13 0.00 0.30 0.02 0.00 99.55

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.70 23.68 17.60 336054 249741
sdb 0.06 1.82 7.55 25823 107131
dm-0 1.74 22.85 25.00 324293 354804
dm-1 0.01 0.16 0.00 2204 0

Pid 进程

Network 网络

Member 内存

Hardware 硬件

File and File system 文件和文件系统

Users 用户

Others 其他

内容转自:https://cloud.tencent.com/developer/article/1568077

一、进程状态

  • D:uninterruptible sleep (usually IO)
  • R:running or runnable (on run queue)
  • S:interruptible sleep (waiting for an event to complete)
  • T:stopped by job control signal
  • t:stopped by debugger during the tracing
  • W:paging (not valid since the 2.6.xx kernel)
  • X:dead (should never be seen)
  • Z:defunct (“zombie”) process, terminated but not - reaped by its parent
阅读全文 »

在当下, Linux 服务器的安全问题越来越频发,服务器被恶意入侵,业务数据被恶意删除和加密以及服务器被劫持作为 DDos 肉鸡等.为了增强 Linux 服务器的安全性,给大家推荐一款开源的防病毒软件 ClamAV,并附上相关安装配置步骤供参考.
关于 ClamAV 的更多详情, 参考 ClamAV 文档

阅读全文 »

LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制。LVM通过在硬盘和文件系统之间添加一个逻辑层,来为文件系统屏蔽下层硬盘分区布局,提高硬盘分区管理的灵活性,

名词解释

  • 物理存储介质(The physical media):指系统的物理存储设备,如硬盘,系统中为/dev/hda/dev/sda/dev/vda等等,是存储系统最低层的存储单元。

NOTE: /dev/sda/dev/sda1是有区别的。 /dev/sda 表示整个sda整个硬盘, /dev/sda1表示的是硬盘上的一个分区。
好比你的电脑是256的固态, 然后划分成C, D两个盘。 sda指固态, sda1指C盘, sda2指D盘。

  • PV: 物理卷(Physical Volume):指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID), 是LVM的基本存储逻辑块。物理卷包括一个特殊的标签,该标签默认存放在第二个 512 字节扇区,但也可以将标签放在最开始的四个扇区之一。该标签包含物理卷的随机唯一识别符(UUID),记录块设备的大小和LVM元数据在设备中的存储位置。

  • VG: 卷组(Volume Group):由物理卷组成,屏蔽了底层物理卷细节。可在卷组上创建一个或多个逻辑卷且不用考虑具体的物理卷信息。

  • LV: 逻辑卷(Logical Volume):卷组不能直接用,需要划分成逻辑卷才能使用。逻辑卷可以格式化成不同的文件系统,挂载后直接使用。

  • PE: 物理块(Physical Extent):物理卷以大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。

  • LE: 逻辑块(Logical Extent,):逻辑卷以“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的

lvm图解

使用LVM管理硬盘的基本过程如下:

  • 1.将硬盘创建为物理卷
  • 2.将多个物理卷组合成卷组
  • 3.在卷组中创建逻辑卷
  • 4.在逻辑卷之上创建文件系统
    通过LVM管理硬盘之后,文件系统不再受限于硬盘的大小,可以分布在多个硬盘上,也可以动态扩容。

情形一: 根目录扩容(常见于CentOS)

  • 格式化磁盘并修改分区格式
    fdisk /dev/sdb [n, p, 1, size, t, 8e, w]

  • 创建 PV
    pvcreate /dev/sdb

  • 扩展 VG
    vgextend centos /dev/sdb1

  • 扩展LV
    lvextend -l +100%FREE /dev/centos/root

  • 刷新
    xfs_growfs /dev/centos/root

情形二: 根目录扩容(常见于Ubuntu)

  • 格式化磁盘并修改分区格式
    fdisk /dev/sdb [n, p, 1, size, t, 8e, w]

  • 创建 PV
    pvcreate /dev/sdb

  • 扩展 VG
    vgextend ubuntu-vg /dev/sdb1

  • 扩展LV
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

  • 刷新
    resize2fs /dev/ubuntu-vg/ubuntu-lv

P.S 如果碰到 xfs 提示 xfs_growfs: /dev/centos/root is not a mounted XFS filesystem
对于 xfs : xfs_growfs + 挂载点
对于 ext2/3/4: resize2fs + 挂载点

  • 确认文件系统格式和挂载点

df -Thl
df -Thl
lsblk
lsblk

情形三: 一块磁盘做成lvm单独挂载某个目录

将新磁盘分成两个区,一个挂载/data; 一个挂载/var/lib/docker

图


# 创建 pv
pvcreate /dev/sdb1

# 创建 vg0
vgcreate vg0 /dev/sdb1


# 创建 lv0 和 lv1
lvcreate -l 50%FREE -n lv0 vg0

lvcreate -l 100%FREE -n lv1 vg0

# 格式化
mkfs.xfs /dev/vg0/lv0
mkfs.xfs /dev/vg0/lv0

# 挂载
echo "/dev/vg0/lv0 /data/ xfs defaults 0 0" >> /etc/fstab
echo "/dev/vg0/lv1 /var/lib/docker xfs defaults 0 0" >> /etc/fstab

情形四: 缩减/删除某个lv

进行任何操作前,请确保拥有当前系统的备份

  • xfs不支持缩减 (其实是支持缩减, 但是需要mkfs强制格式化)
  • ext4支持缩减
  • 缩减逻辑卷之前卸载该逻辑卷所在分区(强制缩减XFS例外)

检查某个目录相关的进程
yum install psmisc
fuser -m -v -i -k /home

4.1 逻辑卷删除

  • CentOS7系统 XFS文件系统为例, 删除 home 分区, 并将其空间扩充到 /
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 37G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sr0 11:0 1 973M 0 rom
[root@centos7 ~]#
  • 卸载 home 分区
    umount /home

  • 移除 home 逻辑卷
    lvremove /dev/centos/home

  • 调整 root 逻辑卷的大小
    lvresize -l +100%FREE /dev/centos/root

  • 更新分区
    xfs: xfs_growfs /
    ext4: resize2fs /dev/centos/root

  • 编辑 fstab
    删除 /home
    更新 /

注意前后UUID的变化

4.2 EXT4根逻辑卷缩减

  • ubuntu 系统 ext4 文件系统为例, 从/缩减10G, 并创建新分区 /data

  • ext4支持缩减

  • /缩减需要从Live CD模式操作

  • 操作之前确保拥有当前系统的备份

图

  1. 关闭Ubuntu系统, 插入CD并设置第一启动顺序

    图

  2. 选择第一个启动项

    图

  3. 右上角 help–>enter shell

    图

  4. 使用 lvreduce 缩减 /
    lvreduce --resizefs --size -50G /dev/ubuntu-vg/ubuntu-lv
    图

  5. 注意事项

  • 注意缩减前后UUID是否变化
  • Live CD 是否包含 lvm工具, 没有的话需 apt install lvm2

4.3 EXT4非根逻辑卷缩减

ubuntu 系统 ext4 文件系统为例, 从/home缩减5G

  1. 卸载/home
    umount /home
  2. 缩减/home
    lvreduce --resizefs --size -5G /dev/ubuntu-vg/ubuntu-home
    图

4.4 XFS缩减

CentOS7系统 XFS文件系统为例, 将/home缩至10G
前面说了XFS不支持缩减, 下面会解释

  • 缩减 /home 至 10G
    lvreduce -L 10G /dev/mapper/centos-home

  • 更新/home分区
    xfs_growfs /dev/centos/home

[root@centos7 ~]# 
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 37G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 18.1G 0 lvm /home
sr0 11:0 1 973M 0 rom
[root@centos7 ~]#
[root@centos7 ~]# lvreduce -L 10G /dev/mapper/centos-home
WARNING: Reducing active and open logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce centos/home? [y/n]: y
Size of logical volume centos/home changed from <18.09 GiB (4630 extents) to 10.00 GiB (2560 extents).
Logical volume centos/home successfully resized.
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]# xfs_growfs /dev/centos/home
meta-data=/dev/mapper/centos-home isize=512 agcount=5, agsize=1185024 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4741120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data size 2621440 too small, old size is 4741120
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 37G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 10G 0 lvm /home
sr0 11:0 1 973M 0 rom
[root@centos7 ~]#
  • 缩减后重启失败进入救援模式
    图
  • 使用lvresize还原逻辑卷/home原来的大小后重启顺利进入系统
    图

4.5 XFS 强制缩减逻辑卷

直接 shrink, 不需要先卸载
缩减成功后uuid会发生变化

  1. 直接缩减
    lvreduce -L -5G /dev/centos/home

  2. 文件系统的大小调整为其底层逻辑卷的实际大小
    xfs_growfs /dev/centos/home

  3. 卸载 /home
    umount /home/

  4. 强制格式化 /homexfs
    mkfs.xfs -f /dev/centos/home

  5. 重新挂载 /home
    mount /dev/centos/home /home/

[root@centos7 ~]# 
[root@centos7 ~]# lvreduce -L -5G /dev/centos/home
WARNING: Reducing active and open logical volume to <13.09 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce centos/home? [y/n]: y
Size of logical volume centos/home changed from <18.09 GiB (4630 extents) to <13.09 GiB (3350 extents).
Logical volume centos/home successfully resized.
[root@centos7 ~]# xfs_growfs /dev/centos/home
meta-data=/dev/mapper/centos-home isize=512 agcount=4, agsize=1185280 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4741120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data size 3430400 too small, old size is 4741120
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]# umount /home/
[root@centos7 ~]#
[root@centos7 ~]# mkfs.xfs -f /dev/centos/home
Discarding blocks...Done.
meta-data=/dev/centos/home isize=512 agcount=4, agsize=857600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3430400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@centos7 ~]#
[root@centos7 ~]# mount /dev/centos/home /home/
[root@centos7 ~]#

环境介绍

server : debian 9 腾讯云主机 124.xxx.xxx.xxx (公网可以被访问的主机)
client : centos minimal 7.9 (VMware) 192.168.128.7 (需要被内网穿透的主机)

  1. 根据自己的版本下载 frp (server和client都要下载)
    https://github.com/fatedier/frp/releases

  2. 解压
    tar -zxvf frp_0.39.1_linux_amd64.tar.gz

官方文档

阅读全文 »

Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。 Elasticsearch 在Apache Lucene 的基础上开发而成,由Elasticsearch N.V. (即现在的Elastic)于2010 年首次发布。
官方文档https://www.elastic.co/guide/en/elastic-stack/index.html

搭建环境: CentOS7.9(vm) ; ElasticSearch5.6.7 ; Java1.8.0_321
值得说一下, 不同的方式安装会遇到不同的问题, 这里我们采用两种方式 : rpm 和 tar两种方式安装

一 、rpm 包部署方式

Java环境 安装

  1. 下载jdk
    选择合适的版本下载(需要登陆Oracle) : https://www.oracle.com/java/technologies/downloads/
    这里我们选择 rpm 包
    image.png

  2. win下上传至 centos7

scp jdk-8u321-linux-x64.rpm [email protected]:/root
image.png

  1. 安装

rpm -ivh jdk-8u321-linux-x64.rpm
4) 配置Java环境
刚安装完成后会有个临时java环境, 将其永久生效
编辑文件 vim /etc/profile
文件末尾添加如下:
export JAVA_HOME=/usr/bin/
export PATH=$JAVA_HOME/:$PATH

其实并不需要$CLASSPTAH , 我们后面在说
5) 验证Java环境
java -version OR javac
看到有输出就OK了
image.png

ElasticSearch 安装

较新版本的ElasticSearch 会自带Java环境. 注意下载合适的版本

  1. 下载ElasticSearch
    https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-6-7
    image.png

  2. 上传到centos7

scp elasticsearch-5.6.7.rpm [email protected]:/root
3) 安装 ElasticSearch
rpm -ivh elasticsearch-5.6.7.rpm
4) 使用 systemd 管理 elasticsearch
systemctl daemon-reload
systemctl enable elasticsearch-service
5) 运行 elasticsearch
systemctl start elasticsearch
6) 测试运行
curl localhost:9200
看到如下输入表示成功运行
image.png

P.S

  • 这里使用 systemctl start elasticsearch 并不是使用root用户去运行的.
    使用 htop 看一下可以看到实际运行的用户就是 elasticsearch

image.png

  • 可能遇到 no java in(/usr/local…)等问题
    如果使用的是tar安装的配置的java环境, 那么 elasticsearch的运行用户是没有java环境的.

建议 Java 和 elasticsearch 保持相同安装方式. 都使用 rpm 包或者 tar包.

二、tar 包部署方式

  1. Java 和 elasticsearch 下载
    Java 下载
    elasticsearch 下载

  2. 解压

tar -zxvf /*tar

  1. 为 elasticsearch 创建用户

groupadd es
useradd es -g es
passwd es
上述操作在 root 用户下完成
(如果不创建密码的话, 该用户没有bash权限的, 影响下面调用java环境)

  1. 配置java环境
    编辑文件 vim /etc/profile
    文件末尾追加:

export JAVA_HOME=/jdk解压目录/jdk1.8.0_321/bin
export PATH=$JAVA_HOME/:$PATH

  • 上述操作是为root用户添加了Java环境

为es 用户添加环境
编辑文件 vim /home/es/.bash_profile
文件末尾追加:
export JAVA_HOME=/jdk解压目录/jdk1.8.0_321/bin
export PATH=$JAVA_HOME/:$PATH

  1. 使用 es 用户 启动 elasticsearch

su es
./elasticsearch安装目录/bin/elasticsearch

相关文档:
elasticsearch5.6.7 https://www.elastic.co/guide/en/elasticsearch/reference/5.6/rpm.html
systemd https://yo.zgserver.com/systemd-19.html
####### 有问题可留言…

常见报错以及相关解决办法

1. 安装完readonlyrest重启elasticsearch报错

  • elasticsearch.yml里关掉xpack

xpace.security.enabled: false
images

2. elasticsearch-plugin安装插件或者操作提示could not find java in JAVA_HOME at xxxxxx

  • 即使是root权限, 安装插件的时候也加上sudo
    images