关机/重启
shutdown -r now # 立即重启(reboot)
shutdown -h now # 立即关机(poweroff)
内存占用
ps aux --sort -rss
top
htop
free
ps aux | grep nginx # 查看某个软件的进程
ifconfig eth0 | grep 'inet ' | awk '{print $2}' # 获取ip
iftop # 检测网络流量
cpu
cat /proc/cpuinfo # 查看cpu信息
cat /etc/redhat-release # 查看系统版本
cat /proc/version # 查看系统内核
端口占用
netstat -lnp|grep 80 # 查看端口占用
ps 14973 # 查看进程情况
kill -9 14973 # 杀进程
查看软件安装路径
which node
find ./ -type f -name "*.conf" | xargs grep "aaa" # 查找当前文件夹下的文件后缀位.conf的文件,文件内容包含aaa的
cat /etc/redhat-release # 查看centos版本
环境变量
vi /etc/profile
export PATH="/usr/local/git/git/bin:$PATH"
source /etc/profile
测试网速
yum install python-pip
pip install speedtest-cli
speedtest-cli
speedtest-cli --simple
生成rsa公私钥
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语句
遍历文件夹
shfor file in ./* do if test -f $file then echo $file 是文件 else echo $file 是目录 fi done
递归遍历
shfunction 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: 连接文件并打印到标准输出设备上
shcat 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: 变更文件或目录的所属群组
shchgrp -v user 1.txt # 修改1.txt的群组为user chgrp -v -R user test # 修改test文件夹及其下面所有的文件的群组为user chgrp -v --reference=test2 test # 修改test文件夹的群组与test2的群组相同
chown: 指定文件的拥有者改为指定的用户或组
shchown 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: 检测文件是否被改动,确保文件从一个系统传输到另一个系统的过程中不被损坏
shcksum 1.txt # 若文件被改动,则两次输出结果不同
cmp: 比较两个文件是否相同(只显示第一次出现不同的位置,一般比较二进制文件)
shcmp 1.txt 2.txt # 如果两个文件相同,则不显示信息,否则显示第一个不同的位置
diff: 以逐行的方式,比较文本文件的异同处
shdiff 1.txt 2.txt diff 1.txt 2.txt -y # 以并列的方式显示文件的异同之处。
file: 查看文件类型
shfile 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 ] {} \;
)shfind . -name "*.js" # 查找当前目录下的所有.js的文件 find . -type f # 查找当前目录所有文件 find . -type d # 查找当前目录下的所有目录(文件夹) find . -name "*.js" -exec ls -l {} \; # 查找当前目录下的所有.js的文件并列出它们的完整路径(-exec参数后面的命令可以操作查找出来之后的结果)
ln: 为某一个文件在另外一个位置建立一个同步的链接(软链接)
shln -s node/index.js aa/index.js # 在aa文件夹下创建一个软连接,指向node/index.js
less: 查看文件(可分页和搜索)less 1.html
内部快捷键:
sh/post # 向下查找 ?post # 向上查找 n # 重复前一个搜索,接着查找 N # 反向重复前一个搜索 pagedown # 向下翻动一页 pageup # 向上翻动一页 -N: # 显示行号 -m: # 显示百分比 -i: # 忽略搜索大小写
mv: 为文件或目录改名、或将文件或目录移入其它位置
shmv 1.js 2.js # 把1.js文件名修改为2.js mv 1.js ../node/ # 移动文件
paste: 会把每个文件以列对列的方式,一列列地加以合并
shpaste 1.txt 2.txt # 按列合并文件(按行合并用cat)
rm: 删除一个文件或者目录
shrm -f 1.txt # 删除文件,无需确认 rm -rf aa # 删除文件夹及其文件,无需确认
tee: 读取标准输入的数据,并将其内容输出成文件
shping baidu.com | tee 1.txt # 把ping的结果实时的存进1.txt文件 ping baidu.com | tee 1.txt -a # 把ping的结果实时的追加到1.txt文件
touch: 修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
shtouch 1.txt # 文件若不存在,则创建,若存在,则修改时间属性为当前系统时间(可用 ls -l 查看) touch {1..6}.txt # 创建1.txt, 2.txt, ... 6.txt等6个文件
cp: 复制文件或目录
shcp ../1.txt . # 复制上一次的1.txt文件到本目录 cp -r ../aa . # 复制上一次的aa文件夹到本目录
scp: 跨服务器复制
shscp .\1.txt [email protected]:~/ # 复制windows当前文件夹下的1.txt文件 scp -P 22 .\1.txt [email protected]:~/ # 复制windows当前文件夹下的1.txt文件 scp -P 22 [email protected]:~/1.txt .\ # 复制到本地
防火墙
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
用户管理
useradd user # 创建新用户
passwd user # 设置密码
userdel user # 删除用户
su user # 切换用户
groupadd testgroup # 添加组
groupdel testgroup # 删除组
cat /etc/passwd # 查看所有用户
cat /etc/group # 查看所有组
发送请求curl
-b [str/url]: 使用cookie字符串或文件用来向服务器发送 Cookie
-X [type]: 请求类型(POST)
-o [url]: 抓取内容到一个文件
-d: 传输数据(-d log=aaaa)
-x: 代理(-x 24.10.28.84:32779)
添加到systemctl服务
新建文件
/usr/lib/systemd/system/frp.service
添加以下文件
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
重载
systemctl daemon-reload
启动服务
systemctl start frp.service
centos8网卡操作
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 # 编辑网卡文件
压缩
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
xz -d *.tar.xz
tar -xvf *.tar
vsftpd(配置文件删除后面的注释及空格,centos8)
vsftpd安装
yum install vsftpd -y
新建虚拟宿主用户
useradd ftpadmin -s /sbin/nologin
配置vsftpd的文件(
/etc/vsftpd/
)shlisten=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/
生成虚拟用户的数据库文件
shvi /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认证文件
shvi /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
shlocal_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
开启端口
shfirewall-cmd --permanent --add-port=20-21/tcp firewall-cmd --permanent --add-port=30000-31000/tcp
若出现500 OOPS: cannot change directory:/home/ftpadmin
shgetsebool -a | grep ftp # 发现tftp_home_dir–>off则执行 setsebool -P tftp_home_dir 1 systemctl restart vsftpd
gitlab安装
centos7安装gitlab
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/CD,Runner
点击
显示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
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
shgitlab_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修改网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改ONBOOT=yes
systemctl restart network.service # 重启网络服务
systemctl status network # 查看网络状态
安装ifconfig
yum search ifconfig
yum install net-tools.x86_64
centOS 7 network服务重启不了
- 执行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. [失败]
- 和 NetworkManager 服务有冲突
- 关闭服务
service NetworkManager stop
- 禁止开机启动
chkconfig NetworkManager off
- 网卡重启
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
shwget 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升级
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
bashiface 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防火墙
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
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