Skip to content

关机/重启

sh
shutdown -r now             # 立即重启(reboot)
shutdown -h now             # 立即关机(poweroff)

内存占用

sh
ps aux --sort -rss
top
htop
free
ps aux | grep nginx         # 查看某个软件的进程
ifconfig eth0 | grep 'inet ' | awk '{print $2}'       # 获取ip
iftop                       # 检测网络流量

cpu

sh
cat /proc/cpuinfo           # 查看cpu信息
cat /etc/redhat-release     # 查看系统版本
cat /proc/version           # 查看系统内核

端口占用

sh
netstat -lnp|grep 80        # 查看端口占用
ps 14973                    # 查看进程情况
kill -9 14973               # 杀进程

查看软件安装路径

sh
which node
find ./ -type f -name "*.conf" | xargs grep "aaa"   # 查找当前文件夹下的文件后缀位.conf的文件,文件内容包含aaa的
cat /etc/redhat-release                             # 查看centos版本

环境变量

sh
vi /etc/profile
export PATH="/usr/local/git/git/bin:$PATH"
source /etc/profile

测试网速

sh
yum install python-pip
pip install speedtest-cli
speedtest-cli
speedtest-cli --simple

生成rsa公私钥

sh
openssl genrsa -out rsa_1024_priv.pem 1024                          # 生成私钥
cat rsa_1024_priv.pem
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem     # 生成公钥
cat rsa_1024_pub.pem

shell语句

  • 遍历文件夹

    sh
    for file in ./*
    do
        if test -f $file
        then
            echo $file 是文件
        else
            echo $file 是目录
        fi
    done
  • 递归遍历

    sh
    function read_dir() {
        for file in `ls $1`
        do
            if [-d $1"/"$file] 
            then
                read_dir $1"/"$file
            else 
                echo $1"/"$file
            fi
        done
    }
    read_dir $1

文件管理

  • cat: 连接文件并打印到标准输出设备上

    sh
    cat 1.txt                           # 打印文件到控制台
    cat -n 1.txt                        # 打印文件到控制台并对每一行编号
    cat -b 1.txt                        # 打印文件到控制台并对每一行编号,不包括空白行
    cat 1.txt > 2.txt                   # 把1.txt的内容复制到2.txt中
    cat 1.txt >> 2.txt                  # 把1.txt的内容追加到2.txt中
    cat 1.txt 2.txt > 3.txt             # 把1.txt和2.txt的内容复制到3.txt中
    cat null > 3.txt                    # 清空3.txt
  • chgrp: 变更文件或目录的所属群组

    sh
    chgrp -v user 1.txt                 # 修改1.txt的群组为user
    chgrp -v -R user test               # 修改test文件夹及其下面所有的文件的群组为user
    chgrp -v --reference=test2 test     # 修改test文件夹的群组与test2的群组相同
  • chown: 指定文件的拥有者改为指定的用户或组

    sh
    chown user test                     # 把test文件夹所属用户改为user用户
    chown user:user test                # 把test文件夹所属用户改为user用户,所属组设为user组
    chown -R user:user test             # 把test文件夹及其下面所有的文件所属用户改为user用户,所属组设为user组
  • chmod: 修改文件权限 chmod 777 -R file.txt

  • cksum: 检测文件是否被改动,确保文件从一个系统传输到另一个系统的过程中不被损坏

    sh
    cksum 1.txt                         # 若文件被改动,则两次输出结果不同
  • cmp: 比较两个文件是否相同(只显示第一次出现不同的位置,一般比较二进制文件)

    sh
    cmp 1.txt 2.txt                     # 如果两个文件相同,则不显示信息,否则显示第一个不同的位置
  • diff: 以逐行的方式,比较文本文件的异同处

    sh
    diff 1.txt 2.txt         
    diff 1.txt 2.txt -y                 # 以并列的方式显示文件的异同之处。
  • file: 查看文件类型

    sh
    file 1.js                           # 1.js: ASCII text
    file -i 1.js                        # 1.js: text/plain; charset=us-ascii(显示MIME类别)
  • find: 查找文件(find path -option [ -print ] [ -exec -ok command ] {} \;)

    sh
    find . -name "*.js"                         # 查找当前目录下的所有.js的文件
    find . -type f                              # 查找当前目录所有文件
    find . -type d                              # 查找当前目录下的所有目录(文件夹)
    find . -name "*.js" -exec ls -l {} \;       # 查找当前目录下的所有.js的文件并列出它们的完整路径(-exec参数后面的命令可以操作查找出来之后的结果)
  • ln: 为某一个文件在另外一个位置建立一个同步的链接(软链接)

    sh
    ln -s node/index.js aa/index.js                 # 在aa文件夹下创建一个软连接,指向node/index.js
  • less: 查看文件(可分页和搜索)less 1.html

    1. 内部快捷键:

      sh
      /post           # 向下查找
      ?post           # 向上查找
      n               # 重复前一个搜索,接着查找
      N               # 反向重复前一个搜索
      pagedown        # 向下翻动一页
      pageup          # 向上翻动一页
      -N:             # 显示行号
      -m:             # 显示百分比
      -i:             # 忽略搜索大小写
  • mv: 为文件或目录改名、或将文件或目录移入其它位置

    sh
    mv 1.js 2.js            # 把1.js文件名修改为2.js
    mv 1.js ../node/        # 移动文件
  • paste: 会把每个文件以列对列的方式,一列列地加以合并

    sh
    paste 1.txt 2.txt       # 按列合并文件(按行合并用cat)
  • rm: 删除一个文件或者目录

    sh
    rm -f 1.txt             # 删除文件,无需确认
    rm -rf aa               # 删除文件夹及其文件,无需确认
  • tee: 读取标准输入的数据,并将其内容输出成文件

    sh
    ping baidu.com | tee 1.txt          # 把ping的结果实时的存进1.txt文件
    ping baidu.com | tee 1.txt -a       # 把ping的结果实时的追加到1.txt文件
  • touch: 修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件

    sh
    touch 1.txt                         # 文件若不存在,则创建,若存在,则修改时间属性为当前系统时间(可用 ls -l 查看)
    touch {1..6}.txt                    # 创建1.txt, 2.txt, ... 6.txt等6个文件
  • cp: 复制文件或目录

    sh
    cp ../1.txt .        # 复制上一次的1.txt文件到本目录
    cp -r ../aa .        # 复制上一次的aa文件夹到本目录
  • scp: 跨服务器复制

    sh
    scp .\1.txt [email protected]:~/              # 复制windows当前文件夹下的1.txt文件
    scp -P 22 .\1.txt [email protected]:~/        # 复制windows当前文件夹下的1.txt文件
    scp -P 22 [email protected]:~/1.txt .\        # 复制到本地

防火墙

sh
firewall-cmd --query-port=80/tcp                                # 查询防火墙指定端口是否开启
firewall-cmd --zone=public --add-port=80/tcp --permanent        # 开启防火墙端口(需重新载入)
firewall-cmd --zone=public --remove-port=80/tcp --permanent     # 关闭防火墙端口(需重新载入)
firewall-cmd --reload                                           # 防火墙重新载入
systemctl start firewalld                                       # 开启防火墙
systemctl stop firewalld                                        # 关闭防火墙
firewall-cmd --state                                            # 查看防火墙状态
firewall-cmd --list-ports                                       # 查询防火墙已开放的端口
firewall-cmd --list-all                                         # 查询防火墙信息
firewall-cmd --zone=public --add-port=22/tcp --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=20-22tcp --permanent

用户管理

sh
useradd user            # 创建新用户
passwd user             # 设置密码
userdel user            # 删除用户
su user                 # 切换用户
groupadd testgroup      # 添加组
groupdel testgroup      # 删除组
cat /etc/passwd         # 查看所有用户
cat /etc/group          # 查看所有组

发送请求curl

sh
-b [str/url]: 使用cookie字符串或文件用来向服务器发送 Cookie
-X [type]: 请求类型(POST)
-o [url]: 抓取内容到一个文件
-d: 传输数据(-d log=aaaa)
-x: 代理(-x 24.10.28.84:32779)

添加到systemctl服务

  1. 新建文件/usr/lib/systemd/system/frp.service

  2. 添加以下文件

    sh
    [UNIT]
    Description=frp Service
    After=network.target
    
    [Service]
    Type=simple
    # Type=forking
    
    # 命令
    ExecStart=/web/frp/frp_0.38.0_linux_amd64/frps -c /web/frp/frp_0.38.0_linux_amd64/frps.ini
    ExecReload=
    ExecStop=
    
    PrivateTmp=True
    
    [Install]
    WantedBy=multi-user.target
  3. 重载 systemctl daemon-reload

  4. 启动服务 systemctl start frp.service

centos8网卡操作

sh
nmcli connection reload                             # 重启网卡
nmcli connection up eth0                            # 激活网卡eth0
nmcli connection down eth0                          # 停用网卡eth0
nmcli device status                                 # 查看网卡状态
nmcli device show eth0                              # 查看网卡详情
vi /etc/sysconfig/network-scripts/ifcfg-eth0        # 编辑网卡文件

压缩

sh
tar -czvf a.tar.gz a.txt                # 压缩a.txt文件(c: create创建, z: gzip压缩, v: 显示压缩的文件信息, f: file压缩文件名)
tar -tzvf a.tar.gz                      # 查看压缩包包含哪些文件(t: 不解压查看tar包的内容)
tar -xzvf a.tar.gz                      # 解压(x: 解压tar包)
zip -v a.zip a.txt b.txt                # 压缩a.txt和b.txt或者向压缩文件追加(v: 显示压缩信息)
zip -d a.zip 3.txt                      # 从压缩包删除文件(d: 删除文件)
zip -r aa.zip ./aa                      # 压缩文件夹(r: 压缩目录)
zip -v a.zip {1..6}.txt -x "3.txt"      # 压缩1,2,4,5,6.txt文件(x: 排除文件或文件夹)
unzip a.zip                             # 解压到当前目录
unzip -d ../aa a.zip                    # 解压到指定目录

解压.tar.xz

sh
xz -d *.tar.xz
tar -xvf *.tar

vsftpd(配置文件删除后面的注释及空格,centos8)

  • vsftpd安装 yum install vsftpd -y

  • 新建虚拟宿主用户 useradd ftpadmin -s /sbin/nologin

  • 配置vsftpd的文件(/etc/vsftpd/)

    sh
    listen=YES
    listen_ipv6=NO
    allow_writeable_chroot=YES  
    chroot_list_enable=NO
    chroot_local_user=YES
    guest_enable=YES            # 启用虚拟用户
    guest_username=ftpadmin     # 虚拟宿主用户名
    user_config_dir=/etc/vsftpd/user_conf
    pasv_min_port=30000
    pasv_max_port=31000
  • 虚拟用户配置文件存放路径 mkdir /etc/vsftpd/user_conf/

  • 生成虚拟用户的数据库文件

    sh
    vi /etc/vsftpd/login.txt                                                    # 奇数行为用户名,偶数行为密码
    db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db     # 转换成db文件
    chmod 600 /etc/vsftpd/vsftpd_login.db                                       # 权限设置
  • 生成一个使用vsftpd_login.db数据文件的PAM认证文件

    sh
    vi /etc/pam.d/vsftpd                 # 注释文件内的所有行,添加下面2,3行
    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
  • 创建虚拟用户的配置文件 cd /etc/vsftpd/user_conf

    • 新建文件(文件名为虚拟用户表中的名字),并写入下面的权限 vi test
    sh
    local_root=/home/ftpadmin       # 访问目录
    write_enable=YES                # 写入的权限
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
  • 重启服务 systemctl restart vsftpd

  • 开启端口

    sh
    firewall-cmd --permanent --add-port=20-21/tcp
    firewall-cmd --permanent --add-port=30000-31000/tcp
  • 若出现500 OOPS: cannot change directory:/home/ftpadmin

    sh
    getsebool -a | grep ftp          # 发现tftp_home_dir–>off则执行
    setsebool -P tftp_home_dir 1
    systemctl restart vsftpd

gitlab安装

centos7安装gitlab

sh
yum install -y curl policycoreutils-python openssh-server    # 防火墙中打开HTTP,HTTPS和SSH访问
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
yum install postfix                                          # 邮件服务
systemctl enable postfix
systemctl start postfix
curl <https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh> | sudo bash    # 下载速度慢,可以先下载安装包,用rpm -ivh安装
EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee                  # vi /etc/gitlab/gitlab.rb

gitlab runner安装

  • 选中一个项目或群组,点击设置CI/CDRunner

  • 点击显示Runner安装说明,即可看到安装代码

    sh
    # 下载
    sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    
    # 权限设置
    sudo chmod +x /usr/local/bin/gitlab-runner
    
    # 创建用户
    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    
    # 安装服务
    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo gitlab-runner start
    
    # 注册
    sudo gitlab-runner register --url http://gitlab.gendanet.cn/ --registration-token $REGISTRATION_TOKEN
    
    # 最后选择一个输入(输入shell)
    shell
  • gitlab查看当前可用runner,点击修改图标,把运行未标记的作业打勾,然后保存(如果不选中 运行未标记的作业, CI/CD 任务会一直被阻塞挂起)

  • 卸载

    sh
    # 停止服务
    gitlab-runner stop
    
    # 取消随机启动
    chkconfig gitlab-runner off
    
    # 卸载服务
    gitlab-runner uninstall
    
    # 清理文件
    rm -rf /etc/gitlab-runner
    rm -rf /usr/local/bin/gitlab-runner
    rm -rf /usr/bin/gitlab-runner
    rm -rf /etc/sudoers.d/gitlab-runner
    
    # 删除用户
    userdel -r gitlab-runner

docker安装gitlab

sh
docker pull gitlab-ce                 # 获取镜像
docker volume create gitlab-etc
docker volume create gitlab-log
docker volume create gitlab-data
docker run -d --hostname localhost -p 3001:80 -p 3002:443 --name gitlab --restart unless-stopped --volume gitlab-etc:/etc/gitlab --volume gitlab-log:/var/log/gitlab --volume gitlab-data:/var/opt/gitlab gitlab/gitlab-ce:latest
docker ps
docker exec -it gitlab /bin/bash      # 进入容器
vi /etc/docker/gitlab.rb              # 修改配置文件
docker restart gitlab                 # 重启服务

邮件配置

  • 修改配置文件/etc/gitlab/gitlab.rb

    sh
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.qq.com"
    gitlab_rails['smtp_port'] = 465
    gitlab_rails['smtp_user_name'] = "******@qq.com"
    gitlab_rails['smtp_password'] = "授权码"
    gitlab_rails['smtp_domain'] = "smtp.qq.com"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true
    gitlab_rails['gitlab_email_from'] = '******@qq.com'
  • 进入控制台 gitlab-rails console

  • 发送邮件测试 Notify.test_email('收件人邮箱', 'title', 'body').deliver_now

命令

  • systemctl restart gitlab-runsvdir.service
  • 配置重载 gitlab-ctl reconfigure
  • 启动 gitlab-ctl start

linux常见错误

centos7修改网络配置文件

sh
vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改ONBOOT=yes
systemctl restart network.service           # 重启网络服务
systemctl status network                    # 查看网络状态

安装ifconfig

sh
yum search ifconfig
yum install net-tools.x86_64

centOS 7 network服务重启不了

  1. 执行service network restart,提示Restarting network (via systemctl): Job for network.service failed because the control process exited with error code.See "systemctl status network.service" and "journalctl -xe" for details. [失败]
  2. 和 NetworkManager 服务有冲突
  3. 关闭服务 service NetworkManager stop
  4. 禁止开机启动 chkconfig NetworkManager off
  5. 网卡重启 service network restart

centos没网,显示io:flags=73..., ip变为127.0.0.1

  • 动态获取或释放IP地址,执行代码: dhclient

把默认的CentOS Yum源修改成国内的aliyun Yum源

  • 下载wget: yum install wget
  • 备份: mkdir /opt/centos-yum.bak, mv /etc/yum.repos.d/* /opt/centos-yum.bak/
  • 下载aliyun Yum源repo文件: wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
  • 清除缓存: yum clean all, yum makecache
  • 腾讯云: http://mirrors.cloud.tencent.com/repo/centos8_base.repo
  • 还原: cp /opt/centos-yum.bak/* /etc/yum.repos.d/

环境变量

  • vi /etc/profile
  • export PATH=$PATH:/web/maven/maven-maven-3.8.4/bin
  • source /etc/profile

安装gcc编译

  • yum -y install gcc automake autoconf libtool make
  • yum install gcc gcc-c++ -y

centos8升级stream

  • sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
  • sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*
  • dnf install centos-release-stream -y
  • dnf swap centos-{linux,stream}-repos -y
  • dnf distro-sync -y

glibc2.27升级

提示

安装GLIBC所需的依赖 可以在 glibc 目录下的INSTALL中找到, 该版本需要 GCC 4.9 以上 及 make 4.0 以上

  • 配置来源

  • 安装 glibc-2.28

    sh
    # 下载并解压 glibc-2.28
    wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
    tar -xzvf glibc-2.28.tar.gz
    cd glibc-2.28
    # 创建临时文件
    mkdir build && cd build
    ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
    
    # 这一步时, 发生了错误, 提示大致为
    These critical programs are missing or too old: make compiler
  • 升级gcc

    sh
    # 直接安装 GCC-8
    yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
    # 设置环境变量
    echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
    source /etc/profile
  • 升级make

    sh
    wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
    tar -xzvf make-4.3.tar.gz 
    cd make-4.3/
    # 安装到指定目录
    ./configure  --prefix=/usr/local/make
    make
    make install
    # 创建软链接
    cd /usr/bin/
    mv make make.bak # backup
    ln -sv /usr/local/make/bin/make /usr/bin/make
  • 继续编译 glibc

    sh
    # 进入之前的 `~/glibc-2.28/build`目录下
    cd /root/glibc-2.28/build
    ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
    make
    make install
    # 查询
    strings /lib64/libc.so.6 | grep GLIBC

GLIBCXX_3.4.20升级

sh
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX # 查看当前版本
yum provides libstdc++.so.6
cd /usr/local/lib64
wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
cp libstdc++.so.6.0.26 /usr/lib64
cd  /usr/lib64
mv libstdc++.so.6 libstdc++.so.6.bak # 备份
ln -s libstdc++.so.6.0.26 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

debian

apt install net-tools

apt install vim

配置静态ip

  • vim /etc/network/interfaces

    bash
    iface eth0 inet static          #static表示使用固定ip,dhcp表述使用动态ip
    address 192.168.100.198         #设置ip地址
    netmask 255.255.255.0           #设置子网掩码
    gateway 192.168.100.1           #设置网关
  • /etc/init.d/networking stop

  • /etc/init.d/networking start

ssh root登录

  • vim /etc/ssh/sshd_config
  • 添加PermitRootLogin yes

debian防火墙

sh
apt install ufw
ufw status verbose       # 查看防火墙状态
ufw app info OpenSSH     # 查看软件关于防火墙的配置规则
ufw allow OpenSSH        # UFW 防火墙接受 SSH 连接
ufw enable               # 启用防火墙
ufw disable              # 停用防火墙
ufw allow 80/tcp
ufw allow 7100:7200/tcp
ufw allow from 64.63.62.61                       # 允许某个ip访问
ufw allow from 64.63.62.61 to any port 22        # 允许指定 IP 地址访问指定端口
ufw deny from 23.24.25.0/24                      # 禁止某个ip访问
ufw deny from 23.24.25.0/24 to any port 80       # 禁止指定 IP 地址访问指定端口
ufw status numbered      # 查看规则(序号)
ufw delete 3             # 删除规则3
  • ufw deny out from any to 116.62.153.154

apt源

  • vi /etc/apt/sources.list
sh
deb http://mirrors.ustc.edu.cn/debian buster main contrib non-free
deb http://mirrors.ustc.edu.cn/debian buster-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian buster-backports main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free

apt update && apt upgrade -y