pdf文件转为md
Linux基础命令1
Linux软件安装
Linux操作练习项目
Linux磁盘管理体系1
Linux磁盘管理体系2
Linux磁盘管理故障案例与特殊符号
获取设置yum源
# 清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/
# yum源地址
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
# 设置yum源
cat /etc/yum.repos.d/gitlab.repo
[gitlab]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
enabled=1
gpgcheck=0
yum执行失败-修复rpm数据库(Fix rpmdb Thread died in Berkeley DB library)
-- 参考地址 https://blog.csdn.net/zksfyz/article/details/116699114
[root@centos ~]# yum
error: rpmdb: BDB0113 Thread/process 16994/140307288778816 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed
-- 以上错误意味着rpm 数据库被毁坏了
-- 请执行以下恢复步骤命令,并重建rpm数据库
mkdir /var/lib/rpm/backup
cp -a /var/lib/rpm/__db* /var/lib/rpm/backup/
rm -f /var/lib/rpm/__db.[0-9][0-9]*
rpm --quiet -qa
rpm --rebuilddb
yum clean all
jdk环境变量配置
export JAVA_HOME=/usr/local/src/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
Ubuntu添加用户
useradd -r -m -s /bin/bash rbc
用户、组
whoami //显示当前用户的身份
id rbc //显示当前用户id信息
who、w //显示在线登录用户
pkill -9 -t pts/2 //剔出用户pts/2
useradd/usermod –d /usr/rbc -m rbc -g rbc -G hadoop,hive rbc
-d指定目录,-m创建目录,-g指定组,-G指定附加组
userdel -r rbc -r删除主目录
usermod -l new old 修改用户名
passwd [-l -u -d -f] rbc
-l锁定,-u解锁,-d使账号无口令,-f强迫用户下次登录时修改口令
/etc/passwd 用户信息保存文件
sam:x:200:50:Sam san:/usr/sam:/bin/sh
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow 密码信息保存文件
/etc/group 组信息保存文件
adm::4:root,adm
组名:口令:组标识号:组内用户列表
groupadd share
groupdel share
groupmod -n 新组名 组名
chgrp -R share dir 更改文件属组
chown -R :share dir 修改文件属主及属组
chmod ugoa +-= rwx dir 修改权限
su - 用户 切换用户,加"-"表示切换到用户所在的目录
exit 退出切换的用户
linux IP查询
本机IP
hostname -I 第一个地址
ifconfig eth0
ip addr show eth0
对应外网IP
curl ifconfig.me
密码修改为原密码方案
修改密码时提示:你当前设置的密码最近已经使用过,请重新设置。 那如果偏要使用当前设置的密码该怎么办呢?
1、找到linux下的一个文件/etc/security/opasswd, 这个文件记录了历史密码,把它清空,再重新设置密码;
2、vim /etc/pam.d/system-auth
发现类型内容:password requisite pam_pwhistory.so remember=5
修改remember的值为0即可
每个目录属于哪个磁盘
for i in `ls /`;do du -sh /$i; df -h /$i; echo ''; done
for i in `ls /opt`;do du -sh /opt/$i; df -h /opt/$i; echo ''; done
普通用户快捷登录root用户
1、切换roo用户操作
2、在/usr/bin目录下编辑脚本sur.sh
3、脚本内容
4、给脚本授权:
chown root:root sur.sh
chmod 755 sur.sh
5、安装expect :yum -y install expect
6、切换到普通用户执行:echo 'alias sur="/usr/bin/sur.sh"' >> ~/.bashrc
7、重新登录普通用户执行:sur,看是否可以登录到root
禁止root账号登录
1.新建一个用户,用来登录:useradd test
2.设置密码(需要切换到root下进行设置):passwd test
3.修改SSHD配置,禁用root登录:vim /etc/ssh/sshd_config 找到“PermitRootLogin yes”把yes改成no
4.启用telnet服务(如果没安装请安装)
5.重启SSHD服务:service sshd restart
6.下次登陆的时候先用test用户登录,然后再切换root用户即可
给用户添加sudo命令
编辑sudoers文件:sudo visudo
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
rbc ALL=(ALL) NOPASSWD: ALL
普通登录用户切换root无密码登录
切换到root权限;
创建group为wheel,命令为:groupadd wheel
将用户加入wheel group中,命令为:usermod -G wheel ecsuser
修改su的配置文件/etc/pam.d/su,增加下列项:vim /etc/pam.d/su
auth sufficient pam_wheel.so trust use_uid
NFS设置
https://www.cnblogs.com/syushin/p/14538790.html
https://www.cnblogs.com/ludingchao/p/17551262.html
安装使用nfs
选择一台服务器作为共享目录服务器:例如选择30.171.126.93
安装nfs包:yum install -y nfs-utils
新建一个目录作为共享目录 mkdir /nfs/data
编辑NFS配置文件 vim /etc/exports 追加 /nfs/data 30.171.126.0/24(rw,sync,all_squash)
安装NFS和rpcbind服务:
systemctl start rpcbind
systemctl start nfs-server
检查是否启动成功:
ps aux | grep nfs
启动成功后,可以通过看 /var/lib/nfs/etab 这个文件,看文件有没有配置的nfs信息,如果有则表明启动服务没什么问题。
查询可用的NFS地址
showmount -e 30.171.126.93
其他服务器挂载93服务器的共享目录
mount 30.171.126.93:/nfs/data /nfs/data/
卸载挂载共享目录
umount /nfs/data/
命令搜索
whereis ls 搜索命令所在目录
which ls 搜索命令所在目录及别名
公私钥生成
/root/.ssh root账号路径
ssh-keygen -t rsa 生成秘钥,按三次回车
ssh-keygen -f /root/.ssh/id_rsa -t rsa -N '' 或者 生成秘钥
会生成id_rsa私钥、id_rsa.pub公钥
免密访问时复制公钥追加到另外一台服务器的/root/.ssh/authorized_keys文件内
文件authorized_keys权限需要是0600
chmod 0600 ~/.ssh/authorized_keys
服务器免密访问
如A服务器免密访问B服务器
把A的公钥/root/.ssh/id_rsa.pub添加到B的权限文件中/root/.ssh/authorized_keys
shell脚本格式转换
在linux下通过vi打开该文件。在命令模式下使用set ff命令,可以看到该文件的格式为fileformat=dos,然后修改文件格式:set ff=unix,最后保存退出就可以了
dos2unix 文件名.sh 把dos文件转换成unix文件
日期
date -d day '+%Y-%m-%d %H:%M:%S' 时间的格式化(2018-03-24 16:01:00)
date -s "2015-06-15 13:30" 修改时间
timedatectl 查看时区信息
date -d "-1 day" "+%Y-%m-%d %H:%M:%S" 获取之前或者之后的某个时间
--符号的可选值:+(之后) 或者 -(之前)
--单位的可选值:day(天)、month(月份)、year(年)
date '+%Y-%m-%d %H:%M:%S' 输出当前日期时间
ntpdate asia.pool.ntp.org & > /dev/null 同步系统时间
启动、停止服务脚本
nohup java -jar demo.jar >/dev/null 2>&1 &
kill -9 `ps -ef | grep -w "item-namae" | grep -v "grep" | awk '{print $2}'`
基本命令
hostname 显示主机名称
uname -a 显示操作系统信息(获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划))
dmesg 显示系统启动信息
locale 显示当前语言环境
ls -l | grep "^d" 只列出目录
JAR_NAME=`ls -r data-app-*.jar | head -n 1` 根据更新时间排序,获取第一个
重启生效命令
chkconfig iptables on 重启后开启
chkconfig iptables off 重启后关闭
软链接
ln -s [源文件] [软链接文件] 创建软连接,(不加-s是创建硬链接)
unlink [软链接文件] 删除软连接
rm [软链接文件] 删除软连接
通配符
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任意内容
[] 匹配括号中任意一个字符,例如[abc]代表一定要匹配这其中的一个字符
[-] 匹配括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是括号中的一个字符,例如[^0-9]代表匹配一个不是数字的字符
正则表达式
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首。例如:^hello会匹配以hello结尾的行
$ 匹配行尾。例如:hello$会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,值匹配一个字符。
例如:[abcdef] 匹配任意一个字母,[0-9]匹配任意一个数字,
[a-z][0-9]匹配小写字母和一位数字构成两位字符
[^] 匹配除括号中字符以外的任意一个字符
\ 转义符。用于将特殊符号的含义取消
\{n\} 表示其前面的字符恰好出现n次
\{n,\} 表示其前面的字符出现不小于n次
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次
位置参数变量
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
文件查看
head -n fileName
tail -n fileName
tail -f fileName
less
more
cat
提取数据
# 提取数据
df -h /dev | grep -v Filesystem | awk '{print$4,$5}'
df -h | grep -v Filesystem | awk '{print $4 " " $5}' | cut -d "%" -f 1
df -h | grep -v Filesystem | awk '{print $4 " " $5}' | awk '{FS="%"} {print $1}'
cat /etc/passwd | awk 'BEGIN{FS=":"} {print $1 " " $7}'
cat /etc/passwd | awk 'BEGIN{FS=":"} END{print "end"} {print $1 " " $7}'
获取目录空间使用量
df -h | sed '1d' | awk '{print$4" "$5}' | awk -F"%" '{print $1}'|awk NF
df -h | sed '1d' | awk '{if($4~"%")print$4} {if($5~"%")print$5}' | sed 's/%//g'
df -h | sed '1d' | awk '{if($5~"/")print$5; if($6~"/")print$6}'
文件操作
ls /root/.ssh/ | grep id_rsa.pub 查询文件是否存在
stat fileName 显示指定文件的相关信息
scp -r -P 22 fileName root@ip:/dir/ 传速文件
find / -type f -name *.xml | xargs grep -i abc 文件的查找
find / -type d | grep dir* 目录的查找
find /data/app -maxdepth 2 -type d -empty 查询限制层数的空目录
find /data/app -maxdepth 2 -type d ! -empty 查询限制层数的非空目录
df -h 显示文件系统信息
mount -l 查询系统中挂载的设备
du -sh 查询当前目录的总占用空间大小
du -ah / –-max-depth=1 查询当前各个目录及文件的大小
du -b fileName | awk -F '\t' '{print$1}' 提取查询文件大小信息
du -s /usr/* | sort -rn | head -10 选出占空间排在前面的10个(字节排序)
du -s /usr/* | sort -rn | tail -10 选出占空间排在后面的10个(字节排序)
grep -i、-v、-n、--color=auto grep忽略大小写、取反字符、输出行号、搜索出的关键字用颜色显示
wc <fileName> 统计指定文本文件的行数、字数、字符数
sed -i 's/old/new/g' fileName sed直接修改原文件全部匹配字符
sed -i '1s/old/new/g' fileName sed直接修改原文件第1行匹配字符
sed 's/old/new/g' fileName sed不修改原文件,仅输出
cat /etc/passwd|awk -F ":" '{print$1}' awk提取用户名列表
cat /etc/passwd|cut -d ":" -f 1 cut提取用户名列表
-F、-d分隔符 -f列号
#批量修改文件内容字符
#在当前目录查询包含字符abc的文件列表,并且把字符abc替换为字符def
for i in `find . -type f|xargs grep -l abc`;do sed -i 's/abc/def/g' $i;done
进程查找
jps | awk '{print$1}'|awk '{printf("%s|",$0)}END{printf("\n")}' pid多端口查询
ps -ef|grep -E '8080|9090' #同时查询多个端口
ps -aux | grep pid #根据pid查找
ps -ef | grep path #根据path查找
lsof -i:port #根据port查找
cat /proc/pid/status #进程的状态
State(运行、睡眠、僵尸)
ssh
默认是22 ssh协议端口号
/etc/ssh/ssh_config 修改ssh服务端口号,配置项Port
service sshd start/stop/restart 服务启动/停止/重启
/etc/init.d/sshd start/stop/restart 服务启动/停止/重启
网络命令
/etc/sysconfig/network-scripts 网卡配置文件位置
service network restart 重启网卡
/etc/init.d/network restart 重启网卡
ifconfig #网络配置命令
wget #下载命令
traceroute ip或域名 #路由追踪
telnet ip port #端口连通性检查
#http请求
curl -X POST --cookie 'a=b' -H 'a:b' -H 'Content-Type:application/json' -d '{"a":"b","c":"d"}' --insecure 'https://ip:port/a/b'
参数含义:
-X 请求方式 GET POST
--cookie 添加cookie
-H 添加header
-d 请求体
--insecure 使用https请求时,忽略SSL验证
ssh -v -p port root@ip # -v
#调试模式,返回connection established 端口通,connection refused 不通
磁盘挂载、卸载
列出磁盘信息:
fdisk -l
blkid
lsblk
more /proc/partitions
mount挂载
mount /dev/[sdb] [/mnt]
mount [-t ntfs] /dev/sd /appdata
机器重启后自动挂载
echo '/dev/sdb1 /appdata ext4 defaults 0 0' >> /etc/fstab
卸载
umount /appdata
mount -a 将/etc/fstab 中定义的全部挂载
lsblk -a 显示所有设备信息
lsblk -f 显示文件系统信息
lsblk /dev/sda 列出指定磁盘信息
mount 查询已挂载的文件信息
mount /dev/sdb /data 临时挂载命令
umount /dir 临时卸载挂载
blkid 显示所有设备信息
blkid /dev/sda1 显示指定设备信息
机器重启后自动挂载硬盘的方式
1、挂载命令写入到/etc/rc.local,命令最好写绝对路径如:mount /dev/sdb /data
2、配置开机自动挂载的文件 /etc/fstab (fstab文件系统挂载表)
如添加挂载配置:/dev/sdb /data ext4 defaults 0 0
fdisk -l 列出硬盘信息
fdisk /dev/sdb 操作硬盘分区
p print 输出磁盘分区信息
n new 创建分区
d delete 删除分区
w write 保存并退出
q quite 退出不保存
资源信息
vmstat [刷新延时] [刷新次数] 系统资源监控
top P、M、N(pid排序)、q(退出) top命令
free -h 查看内存使用状态
fdisk -l 列出磁盘和分区情况
/var/log/messages 日志信息路径(大部分错误)
/etc/rc.d/rc.local 开机自启动脚本存放位置
/etc/init.d/ 启动脚本位置
系统信息
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看物理CPU的个数
cat /proc/cpuinfo |grep "processor"|wc -l 查看逻辑CPU的个数
cat /proc/cpuinfo |grep "cores"|uniq 查看CPU是几核
cat /proc/cpuinfo |grep MHz|uniq 查看CPU的主频
uname -a 查看系统内核信息
uname -r 内核版本
uname -m 位数
cat /etc/issue /etc/redhat-release 发行版本
uptime 持续在线时间
cat /proc/cpuinfo 查询cpu信息
lscpu 查询cpu信息
reboot 重启
reboot -w 模拟重启(仅写入开关日志)
yum命令
yum install、remove、search、list、info yum的操作
yum clean packages yum清除缓存
yum install -y lrzsz (rz -be file sz -be file) lrzsz(上传、下载)
swap磁盘内存禁用
1、禁用SWAP分区:
swapoff /swapfile
2、删除SWAP分区:
rm /swapfile
3、/etc/fstab文件中删除相关配置:vim /etc/fstab
#/swapfile swap swap defaults 0 0
jar包解压后修改文件再压缩
解压:jar -xvf *.jar
压缩:jar -cvfM0 *.jar ./*
压缩包
tar -cvf file.tar dir tar文件
tar -xvf file.tar -C /rbc/
tar -zcvf file.tar.gz dir tar.gz文件
tar -zxvf file.tar.gz -C /rbc/
zip -r file.zip dir zip文件
unzip file.zip -q -o -d /rbc/
-q 不显示详细信息
-o 直接覆盖
tar -zxvf file.tar.gz a*.jar 解压压缩包tar.gz中指定的文件
tar -jxvf *.tar.bz2 tar.bz2文件
tar -jcvf *.tar.bz2 *
拆分、合并压缩包
#拆分压缩包
zip openjdk8.zip openjdk8.tar
split openjdk8.zip -b 30m -d openjdk8.zip
#合并多个分包为一个包
cat openjdk8.zip.00* >> openjdk8.zip
unzip openjdk8.zip
iptables
chkconfig iptables off/on 永久关闭/开启防火墙
service iptables stop/start/status 防火墙状态查询
vim /etc/sysconfig/iptables 配置iptables策略文件
iptables -L -n 查看iptables配置信息
INPUT、OUTPUT、FORWARD filter表(三个链)
-j ACCEPT、DROP、REJECT 允许、丢弃、拒绝数据包
[!]-p、-s、-d 匹配协议、源地址、目标地址
[!]--sport、--dport 匹配源端口、目标端口
-A、-I、-D、-F 添加(尾部)、插入、删除、清空规则
从上往下依次执行,发现匹配规则时停止继续向下执行 规则执行顺序
service iptables save 保存防火墙配置(否则重启即失效)
iptables -L -n --line-number 显示规则列表(含行号)
iptables -D INPUT num 删除规则
-m multiport --dports 70,80,90 同时配置多个不连续的端口
iptables -A INPUT -p tcp -s IP -j DROP 禁止tcp协议的特定IP访问
iptables -I INPUT -p tcp --dport 8080 -j DROP 禁止tcp协议访问指定端口
iptables -I INPUT -p tcp -s IP --dport 8080 -j ACCEPT 允许tcp协议特定ip访问指定端口
iptables -I INPUT -p tcp --dport 8090 -j ACCEPT 允许所有tcp协议IP访问指定端口
iptables -I INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 允许本机访问本机
--dport 8090,8081,8082 同时写多个端口
--dport 8000:9000 同时写端口范围
iptables示例
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
对22端口开放
-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
对7001端口开放
-A INPUT -m state --state NEW -p tcp --dport 7001 -j ACCEPT
屏蔽8080、9090端口
-I INPUT -p tcp -m multiport --dports 8080,9090 -j DROP
对ip地址127.0.0.1、127.0.0.2接受访问
-I INPUT -m state --state NEW -p tcp -s 127.0.0.1,127.0.0.2 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibite
COMMIT
iptables示例
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="127.0.0.1" accept'
firewall-cmd --reload
firewall-cmd --list-all-zone
firewalld
firewall-cmd --version 版本查看
systemctl start/stop/restart/status firewalld 启动/停止/重启/状态
systemctl enable/disable firewalld 开机启动(开启/禁止)
firewall-cmd --reload 重载防火墙规则
firewall-cmd --list-all 查看防火墙规则
firewall-cmd --state 防火墙状态查询
firewall-cmd --zone=public --list-ports 查看已打开的所有端口
firewall-cmd --permanent --zone=public 防火墙前缀
--add-rich-rule='rule family="ipv4" 添加ip段连接3306防火墙
--remove-rich-rule='rule family="ipv4" 删除ip段防火墙
source address="192.168.0.0/16"
port port="3306" protocol="tcp" accept'
--add-port=10001-11999/tcp 添加指定范围端口开放访问
--remove-port=8080/tcp 删除开放端口访问
--add-source=173.245.48.0/24 添加指定IP段访问
--remove-source=173.245.48.0/24 删除指定IP段访问
示例
firewall-cmd --permanent --zone=public --add-port=80/tcp 开启一个端口
firewall-cmd --permanent --zone=public --remove-port=9898/tcp 关闭一个端口
// 还可以通过修改配置文件的方式设置防火墙端口
文件:/etc/firewall/zones/public.xml
firewalld rich-rule
# 添加禁用端口访问
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port protocol='tcp' port='3306' accept"
# 移除禁用端口访问
firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port protocol='tcp' port='3306' accept"
缓存清理
虚拟文件系统 /proc
sync 将缓存刷到磁盘中 手动释放缓存
echo 1 > /proc/sys/vm/drop_caches
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
echo 3 > /proc/sys/vm/drop_caches 释放后值改为默认
sync && echo 3 | tree /proc/sys/vm/drop_caches 释放缓存
lsof | grep delete 磁盘空间满了找不到占用的文件
kill -9 `lsof | grep delete |awk '{print $2}'` kill掉这些进程
rpm(Redhat Package Manager )
rpm -qpi *.rpm 查询安装包信息
rpm -ivh *.rpm 安装软件
rpm -ivh--test *.rpm 安装测试,非真实安装
rpm -Uhv *.rpm 升级软件
rpm -e jdk 卸载jdk
rpm -ql 包名 查询已安装软件包安装位置
rpm -q 包名 查询软件包是否安装
rpm -qa | grep jdk 查询已安装的jdk
rpm -qf fileName 查询系统文件所属哪个软件包
ftp相关
https://blog.csdn.net/qq_31130741/article/details/114986351
https://blog.csdn.net/wqh0830/article/details/104684697
yum -y install vsftpd 安装ftp服务
service vsftpd start 启动ftp服务
service vsftpd restart 重启ftp服务
service vsftpd status 查看ftp服务状态
chkconfig vsftpd on 开机启动ftp服务
查看服务是否启动成功
# netstat -an | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
如果看到以上信息,证明ftp服务已经启动成功
ftp虚拟用户
配置文件 /etc/vsftpd/vsftpd.conf 中自定义虚拟用户位置
user_config_dir=/etc/vsftpd/vuser_conf
虚拟用户密码文件/etc/vsftpd/vuser_passwd.txt
ftp IP linux连接ftp命令
命令行操作
ctrl + a/e 移动到开头/结尾
ctrl + f/b 移动一个字符前/后
ctrl + ←/→ 移动整个单词前/后
alt + f/b 移动整个单词前/后
ctrl + h/d 删除光标前/后一个字符
ctrl + w 删除光标前的一个单词
ctrl + u 删除行首到光标所有字符
crtl + k 删除光标到行尾所有字符
ctrl + y 粘贴ctrl+k/u/w删除文本
ctrl + r 搜索命令行使用过的历史记录
ctrl + g 从执行ctrl+r命令模式中退出
vim操作
:! ls /usr/local/ 在vim窗口中执行命令
1.esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 批量添加注释(esc)
2.选择需要注释的多行;
3.按下键盘(大写)"I"键,进入插入模式;
4.然后输入注释符("#"等);
5.最后按下"Esc"键。
1.esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 批量删除注释(esc)
2.需要注释的多行;
3.按下d键
:n1,n2s/^/#/g 批量加注释
:n1,n2s/^#//g 批量取消注释
ctrl f、b 翻整页
ctrl d、u 翻半页
ctrl e、y 翻一行
zz、zb、zt 光标居中、居下、居上
:set nu/nonu 显示/隐藏行号
gg、G 跳到第一行、最后一行
nG 跳到固定行
^/0、$ 跳到行首、行尾
w/W 后一个单词头部
e/E 后一个单词尾部
b/B 前一个单词头部
d$ 删除光标到行尾
d^/d0 删除光标到行首
dd 删除当前行
ndd 删除当前行开始的n行
dG 删除当前行到最后一行
dnG 删除第n行到最后一行
:[start],[end]d 根据范围删除
:s/old/new/ 替换当前行第一个字符串
:s/old/new/g 替换当前行所有字符串
:%s/old/new/ 替换每行第一个字符串
:%s/old/new/g 替换每行所有字符串
:n1,n2s/old/new/g 第n1与n2行之间每行第一个字符串
:n1,n2s/old/new/g 第n1与n2行之间替换每行所有字符串
:.,$-1d 删除当前行到最后一行-1行
:! ls /usr/local/ 在vim窗口中执行命令
生成文件的md5
md5sum fileName
shell
循环输出字符到文本文件
for i in `seq 10`; do echo "hello $i" >> data.txt; done;
定时任务
yum install contabs 安装crontab
systemctl enable crond 设置开机启动
systemctl start crond 启动crontab
service crond status 查看crontab服务状态
/etc/crontab 定时任务配置文件路径
*(分)*(时)*(天)*(月)*(周) crontab表达式
*/5 * * * * 每5分钟执行一次
3,15 8-11 * * 1 每个星期一的上午8点到11点的第3和第15分钟执行
crontab -e 或vim /etc/crontab 修改定时任务
crontab -l 查看定时任务
/var/log/cron 定时任务运行记录日志文件
crontab -e -u rbc 指定用户执行脚本
网络命令
ifconfig 查看当前ip信息
ifconfig eth0 192.168.1.222 netmask 255.255.255.0 up 设置id
route add default gw 172.18.128.1 设置网关
ip route show 或 route -n 查看网关
cat /etc/resolv.conf 查看DNS
service ssh restart 重启ssh-server
/etc/init.d/ssh restart 重启ssh-server
cat /etc/ssh/sshd_config 查看SSH端口Port参数
/etc/hosts 域名映射文件
安装中文字体
https://www.linuxidc.com/Linux/2016-09/135548.htm
yum源更换
/etc/yum.repos.d/ yum的安装目录
mv CentOS-Base.repo CentOS-Base.repo.bak 备份所有存在的文件
https://mirrors.aliyun.com 打开镜像网站
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 下载镜像
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-8.repo
yum clean all 清除yum的已有缓存
yum makecache 生成yum的缓存
设置yum源
yum包更新到最新
yum update
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
命令放后台执行方法
ctrl + z 挂起当前任务
jobs 查看任务,返回任务编号和进程号
bg %n 将编号为n的任务任务放后台运行
fg %n 将编号为n的任务任务转前台运行
ctrl+c 结束前台任务
jobs 查看在后台运行的任务
disown -h %n 忽略后台任务HUP信号,退出登录不影响任务的执行
ps -ef|grep scp 退出登录,再次进去查看任务运行状态和父进程号
部署获取当前目录
DIR=`cd $(dirname "${BASH_SOURCE[0]}");pwd`
echo "running dir [$DIR]"
cd $DIR
服务停止脚本
#!/bin/bash
JAR_DIR=`cd $(dirname "${BASH_SOURCE[0]}");pwd`
echo "running dir [$JAR_DIR]"
cd $JAR_DIR
HERE=`pwd`
PID=`ps -ef | grep $HERE | awk '/java/' | awk '{print $2}'`
if [ "$PID" != "" ] ;then
echo 'kill $JAR_DIR process'
kill -9 $PID
fi
echo ">>>>>>>>>> server stop......"
服务启动脚本
#!/bin/bash
export JAVA_HOME="/usr/local/java"
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
JAR_DIR=`cd $(dirname "${BASH_SOURCE[0]}");pwd`
HERE=`pwd`
JAR_NAME=`find . -name "*SNAPSHOT.jar"`
JVM_OPTS="-server -Xms1g -Xmx1g -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$JAR_DIR/logs"
JAVA_OPTS=" -Dfile.encoding=UTF-8"
if [ "$1" == "debug" ]; then
echo ">>>>>>>>>> mode is debug"
java $JVM_OPTS $JAVA_OPTS -DPWD=$HERE -jar $JAR_NAME -DMODE=DEBUG
echo "java $JVM_OPTS $JAVA_OPTS -DPWD=$HERE -jar $JAR_NAME -DMODE=DEBUG"
else
echo ">>>>>>>>>> mode is normal"
java $JVM_OPTS $JAVA_OPTS -DPWD=$HERE -jar $JAR_NAME > /dev/null 2>&1 &
echo "java $JVM_OPTS $JAVA_OPTS -DPWD=$HERE -jar $JAR_NAME > /dev/null 2>&1 &"
fi
echo ">>>>>>>>>> server start......"
1、shell条件判断语句
# 1、单分支if条件语句
if [ 条件判断 ]
then
程序
fi
或者
if [ 条件判断 ]; then
程序
fi
例如:判断分区使用率
rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f1)
if[ $rate -ge 80 ]; then
echo "warning /dev/sda1 is full"
fi
# 2、双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行
else
条件不成立时,执行
fi
# 3、多分支if条件语句
if [ 条件判断1 ]
then
条件1成立时执行
elif [ 条件判断2 ]
then
条件2成立时执行
......
else
当条件都不成立时执行
fi
# 4、case语句
case $变量名 in
"1")
如果变量值等于值1,则执行
;;
"2")
如果变量值等于值2,则执行
;;
"3")
如果变量值等于值3,则执行
;;
.............
*)
如果变量的值读不是以上的值,则执行
esac
# 5、for语句
for i in 1 2 3 4 5 6
do
echo $i
done
for((i=1;i<=100;i=i+1))
do
echo $i
done
# 6、while循环,从1加到100的程序
i=1
s=0
while [ $i -le 100 ] #如果变量i的值小于等于100,则执行
do
s=$(($s + $i))
i=$(($i+1))
done
echo "the sun is:$s"
# 7、until循环,从1加到100的程序
i=1
s=0
until [ $i -gt 100 ] #如果变量i的值大于100,则停止执行
do
s=$(($s + $i))
i=$(($i+1))
done
echo "The sun is: $s"
2、shell脚本条件判断
# 1、按照文件类型进行判断:
-d 文件:判断该文件是否存在,并且是否为目录文件(是目录为真)
-e 文件:判断该文件是否存在(存在为真)
-f 文件:判断该文件是否存在,并且是否为普通文件(是普通文件为真)
-L 文件:判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
# 书写格式:test -e /usr/test && echo yes || echo no
# 两边有空格:[ -e /usr/test ] && echo yes || echo no
# 2、安装文件权限进行判断
-r 文件:判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)
-w 文件:判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)
-x 文件:判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)
-u 文件:判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真)
-g 文件:判断该文件是否存在,并且是否该文件拥有SGID权限(有SGID权限为真)
-k 文件:判断该文件是否存在,并且是否该文件拥有SBit权限(有SBit权限为真)
# 3、两个文件之间进行比较
文件1 -nt 文件2:判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2:判断文件1的修改时间是否比文件2的旧(如果旧则为真)
文件1 -ef 文件2:判断文件1是否和文件2的Inode号一致,可以理解为两个文件
# 是否为同一个文件,这个判断用于判断硬链接是很好的方法
# 4、两个整数直接的比较
整数1 -eq 整数2:判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2:判断整数1是否和整数2不相等(不相等为真)
整数1 -gt 整数2:判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2:判断整数1是否小于整数2(小于为真)
整数1 -ge 整数2:判断整数1是否大于等于整数2(大于相等为真)
整数1 -le 整数2:判断整数1是否小于等于整数2(小于相等为真)
# 5、字符串的判断
-z 字符串:判断字符串是否为空(为空返回真)
-n 字符串:判断字符串是否非空(非空返回真)
字符串1 == 字符串2:判断字符串1是否和字符串2相等(相等返回真)
字符串1 != 字符串2:判断字符串1是否和字符串2不相等(不相等返回真)
例如:[ -z "$name" ] && echo yes || echo no
例如:[ "$aa"=="bb" ] && echo yes || echo no
# 6、多重条件判断
判断1 -a 判断2:逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -o 判断2:逻辑或,判断1和判断2有一个成立,最终的结果就为真
!判断:逻辑非,使原始的判断式取反
例如:[ -n "$aa" -a "$aa" -gt 23 ] && echo yes || echo no