跳到主要内容

Linux

[TOC]

Linux

By:weimenghua
Date:2022.05.14
Description:Linux 操作系统

环境变量

基本提示符,对于 root 用户是#,对于普通用户是$

  1. 使用 echo 命令查看单个环境变量。例如:echo $PATH
  2. 使用 env 查看所有环境变量。例如:env
  3. 使用 set 查看所有本地定义的环境变量。 常用的环境变量:
  4. PATH 决定了 shell 将到哪些目录中寻找命令或程序
  5. HOME 当前用户主目录
  6. USER 当前用户
  7. HISTSIZE 历史记录数
  8. LOGNAME 当前用户的登录名
  9. HOSTNAME 指主机的名称
  10. SHELL 当前用户 Shell 类型
  11. LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
  12. MAIL  当前用户的邮件存放目录

Linux 下获取当前的目录

Linux 下获取当前的目录:$(cd dirname $0;pwd)
dirname $0,取得当前执行的脚本文件的父目录
cd dirname $0,进入这个目录(切换当前工作目录)
pwd,显示当前工作目录(cd 执行后的)
在使用的过程中需注意此事项:命令中“`”不是英文的单引号,而是英文输入法下的“~”同一个按键下面的那个符号。

Linux 设置开机自启

/etc/rc.local 映射文件是/etc/rc.d/rc.local。(前提:chmod +x /etc/rc.d/rc.local)
在/etc/rc.local 或者/etc/rc.d/rc.local 添加执行脚本语句, 举例:sh /tmp/demo.sh。

Linux 查看防火墙状态

  1. getenforce
  2. /usr/sbin/sestatus -v SELinux 有三种工作模式,分别是:
  3. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中
  4. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中,一般为调试用
  5. disabled:关闭 SELinux SELinux 工作模式可以在 /etc/selinux/config 中设定, 如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统,反过来也一样, enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换

Linux 修改主机名

  1. vim /etc/hostname(ubuntu) 或者 /etc/sysconfig/network(RHEL、CentOS 和 Fedora), 添加:HOSTNAME=主机名, hostname 新主机名, 然后用 ssh 重新登录,就会显示新的主机名。
  2. hostnamectl set-hostname 新主机名, 重启:reboot。

Linux 字体颜色

  1. 浅蓝色:表示链接文件
  2. 灰色:表示其他文件
  3. 绿色:表示可执行文件
  4. 红色:表示压缩文件
  5. 蓝色:表示目录
  6. 红色闪烁:表示链接的文件有问题了
  7. 黄色:表示设备文件,包括 block,char,fifo

清除缓存 buff 或者 cache

通过 free -m 查看到 buff/cache 的值比较大,通过下面的命令,清除缓存。

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

常见服务对应的端口

查看远端的服务是否开通:tcp 8000 端口,比如查看 baidu.com 是否开通:telnet baidu.com 8000。

  1. 21 FTP
  2. 22 SSH
  3. 25 SMTP
  4. 3306 MYSQL
  5. 873 rsync
  6. 161 snmp
  7. 111 rpc
  8. 3389 RPC
  9. 80 HTTP
  10. 443 HTTPS
  11. 110 POP3
  12. 53 DNS
  13. 514 syslog

Linux 开放端口

$ iptables -I INPUT -p tcp --dport 80 -j DROP
$ iptables -I INPUT -p tcp -s 1.2.3.4 --dport 80 -j ACCEPT

这里仅允许 1.2.3.4 访问本地主机的 80 端口。

对于类似 docker run -d -p 80:80 shaowenchen/demo-whoami 运行的服务,上面的方法无效,需要在 DOCKER-USER 链中添加规则。 Docker 会将 iptables 规则添加到 DOCKER 链中,如果需要在 Docker 之前添加规则需要添加到 DOCKER-USER 链中 $ iptables -I DOCKER-USER -i ens192 ! -s 1.2.3.4 -p tcp --dport 80 -j DROP ens192 是本地的网卡,这里仅允许 1.2.3.4 访问本地主机的 80 端口。

$ yum install -y iptables-services
$ systemctl restart iptables.service

如果需要在主机重启之后 iptables 设置,依然有效,需要安装 iptables-services 并保存

$ yum install -y iptables-services
$ service iptables save

设置 SSH 会话时长

vim /etc/ssh/sshd_config

  • 设置 ClientAliveInterval 参数为一个较小的值,例如 300(表示 300 秒)。

  • 设置 ClientAliveCountMax 参数为一个较大的值,例如 0(表示没有限制)。 保存并关闭配置文件。
    重新加载 SSH 服务器配置,以使更改生效,可以使用 service ssh reload 或 systemctl reload sshd 命令。

  • ClientAliveInterval:指定服务器向客户端发送保持活动消息的时间间隔。如果在指定的时间内没有活动,服务器将向客户端发送一个保持活动的消息。

  • ClientAliveCountMax:指定服务器在关闭连接之前允许客户端没有响应的次数。设置为 0 表示没有限制。

其它

history 命令记录序号、日期时间、用户、登录IP及对应执行的命令 vim /etc/profile export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S who am i | awk '{print $1,$5}' " source /etc/profile

rsync+inotify-tools 实时同步数据

安装 raync
yum install rsync -y

同步整个目录A到目录B
rsync -avz 本地目录A 本地目录B
只同步目录A下的数据到目录B
rsync -avz 本地目录A/ 本地目录B

安装 gcc 依赖
yum install gcc* -y

下载 inotify-tools
wget https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz

解压 inotify-tools
tar -zxvf inotify-tools-3.13.tar.gz

--prefix 指定安装目录
cd inotify-tools
./configure --prefix=/usr/local/inotify && make && make install

设置软连接
ln -s /usr/local/inotify/bin/inotifywait /usr/sbin/
ln -s /usr/local/inotify/bin/inotifywatch /usr/sbin/

编写同步脚本
cat >> rsync.sh << EOF
#!/bin/bash

while true
do
inotifywait -rq -e modify,create,delete /root/tmp
rsync -avz --delete /root/tmp/ /root/tmp2
done

EOF

执行脚本
chmod u+x rsync.sh
sh rsync.sh

测试
在 tmp 新增文件/文件夹,进入 tmp2 目录查看是否增加文件,如增加则验证成功

Trickle 带宽控制供给

yum install trickle

trickle -V

trickle -d <download-rate> -u <upload-rate> <command> // 1000 KB/s
trickle -d 1000 wget http://10.0.1.25/iso/centos/CentOS-7.7-x86_64-Minimal-1908.iso

trickled 配置:cat /etc/trickled.conf

speedtest 测速工具

安装
sudo yum install speedtest-cli

测速
speedtest-cli

有教程用这个命令,经测试无效
speedtest

WonderShaper 网卡限速工具

安装 注:未安装成功
sudo yum install -y wondersharper epel-release

查看 eth0 当前的状态
wondershaper -s -a eth0

sshx

sshx 分享终端

安装 sshx: curl -sSf https://sshx.io/get | sh,执行 sshx 生成分享链接,点击链接可看见终端并一起协作。

查看 Linux 开放公网的端口

  • netstat -tuln
  • ss -tuln
  • sudo lsof -i -P -n | grep LISTEN
  • sudo nmap -sT -O localhost

Linux 性能基准测试工具及测试方法

参考资料

git clone https://github.com/clay-wangzhi/bench.git
bash bench.sh

  • CPU Super_Pi 是一种用于计算圆周率π的程序,通常用于测试计算机性能和稳定性。它的主要用途是测量系统的单线程性能,因为它是一个单线程应用程序。
yum -y install bc

time echo "scale=5000; 4*a(1)" | bc -l -q &>1

结果分析,看 real 即可,时间越短,性能越好

sysbench 素数计算

yum -y install sysbench

测试方法: 启动4个线程计算10000事件所花的时间
sysbench cpu --threads=4 --events=10000 --time=0 run

结果分析,看 total time 即可,时间越短,性能越好
  • 内存 内存带宽(stream) Stream测试是内存测试中业界公认的内存带宽性能测试基准工具
编译安装 STREAM
yum -y install gcc gcc-gfortran
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM/
make

指定线程数
export OMP_NUM_THREADS=1
./stream_c.exe

结果分析,看 Copy、Scale、Add、Triad,数值越大,性能越好
  • 磁盘 IO 磁盘读、写iops,iops:磁盘的每秒读写次数,这个是随机读写考察的重点
# 安装
yum -y install fio
# 测试随机读 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/home/randread.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 测试随机写 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randwrite --filename=/home/randwrite.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 结果分析,看 IOPS 即可,值越大,性能越好

ssh 远程服务器报错

报错:kex_exchange_identification: read: Connection reset by peer Connection reset by 114.67.240.27 port 22

解决:
方式一:ssh-keygen -R 114.67.240.27 方式二: vim /etc/hosts.allow sshd:ALL systemctl restart sshd

umask

umask 用于设置默认的文件权限掩码。文件权限掩码决定了在创建新文件或目录时,所设置的默认权限模式。umask 命令的作用是从当前文件权限掩码中减去给定的权限位,以设置新文件或目录的默认权限。它可以用来限制新文件的默认权限,以确保安全性和隐私。

查看当前的文件权限掩码值:umask
将文件权限掩码设置为 027。新创建的文件将具有权限模式 640,新创建的目录将具有权限模式 750:umask 027
永久更改文件权限掩码值: 在用户的配置文件(如 ~/.bashrc、~/.bash_profile)中添加以下行:umask 027
文件权限掩码的值是一个八进制数,用于指定要从默认权限模式中屏蔽的权限位。常见的权限位包括:

  • 0:没有权限被屏蔽。
  • 2:屏蔽写权限。
  • 7:屏蔽所有者权限、组权限和其他用户权限。

示例
文件umask 0022 是将文件权限掩码设置为 0022 的命令。
文件权限掩码是一个八进制数,用于指定默认文件和目录权限中要屏蔽的权限位。在 0022 的情况下,权限掩码指定要屏蔽的权限位为 w(写入权限)。
具体影响如下:

  • 对于新创建的文件,默认权限模式为 666,然后从中减去权限掩码 0022,结果为 644。因此,新创建的文件将具有所有者可读写,其他用户只能读取的权限。
  • 对于新创建的目录,默认权限模式为 777,然后从中减去权限掩码 0022,结果为 755。因此,新创建的目录将具有所有者可读写执行,其他用户只能读取和执行的权限。

Linxu 发行版

Linux 黑话解释:什么是 Linux 发行版?为什么它被称为“发行版”?

Linux 发行版是一个由 Linux 内核、GNU 工具、附加软件和软件包管理器组成的操作系统,它也可能包括显示服务器和桌面环境,以用作常规的桌面操作系统。

这个术语之所以是 “Linux 发行版”,是因为像 Debian、Ubuntu 这样的机构“发行”了 Linux 内核以及所有必要的软件及实用程序(如网络管理器、软件包管理器、桌面环境等),使其可以作为一个操作系统使用。

swp

交换文件(.swp)的存在是为了在编辑器会话意外中断的情况下保护数据。再次打开相同的文件进行编辑时,编辑器会检测到交换文件的存在,并询问是否恢复之前的编辑会话。