常用指令
sed
删除redis.conf文件中的空行和注释行
sed -i ‘/^$/ d’ redis.conf
sed -i ‘/^#/ d’ redis.conf
文件目录类
df -Th 查看磁盘占用比例
du -sh * 当前目录磁盘占用情况
du -sh /home /home目录磁盘占用
pwd 显示当前工作目录的绝对路径
ls 显示当前目录和文件
ls -a 显示当前目录所有的文件和目录,包含隐藏的
ls -l 以列表方式显示信息
cd 切换目录
cd ~ 切换到家目录
cd … 切换到上一级目录
mkdir 创建目录
mkdir -p 创建多级目录
rmdir 删除空目录(不能删除非空目录)
rm -r 递归删除整个文件、文件夹
rm -f 强制删除文件不提示
rm -rf 递归强制删除目录不提示
touch 创建空文件
cp a.txt b/ 拷贝a.txt 到b目录
cp -r b/ c/ 拷贝整个目录b到c目录下
\cp -r 当目标目录下有相同文件用 \ 强制覆盖
mv a.txt b.txt 将a.txt重命名为b.txt(相当于将a.txt移动到当前目录)
mv b.txt /root 将b.txt移动到/root目录中去
cat -n /etc/profile | more 浏览profile文件 -n显示行号 |more 分页
more /etc/profile 以全屏的方式按页显示文本内容 回车按行浏览、空格下一页、Ctrl+B上一页
less /etc/profile 根据需要加载显示内容(适合查看大文件)
ls -l > a.txt 将ls -l 显示的列表信息 写入到a.txt文件中,如果该文件不存在则创建,存在则覆盖
ls -l >> a.txt 追加写入到该文件中
cat /etc/profile > a.txt 将该文件内容写入到a.txt ,如果a.txt不存在则创建文件
echo “hello” > a.txt 将hello覆盖写到a.txt
echo “hello” >> a.txt 将hello追加写到a.txt
echo 输出到控制台,如:echo $PATH 输出环境变量到控制台
head -n 5 /etc/profile 查看该文件的前5行
head /etc/profile 不带参数,默认显示前10行
tail -n 5 /etc/profile tail与head相反,查看该文件后5行
tail /etc/profile 不带参数,默认显示后10行
tail -f a.txt 监听a.txt文件,可以实时打印a.txt变化的内容,常用于监听日志文件。Ctrl+C退出监听
ln -s /root linkRoot 创建软连接(快捷方式)创建名为linkRoot的快捷方式指向/root
rm -r linkRoot 删除软连接
rm -rf linkRoot 强制删除软连接,删除软连接时不要带/
history 查看历史执行的指令
history 10 显示最近使用过的10个指令
!104 执行编号为104条指令
yum install lrzsz -y 安装rz
rz -y 上传文件
时间日期类
date “+%Y-%m-%d %H:%M:%S”
date 显示当前时间
date -s “2020-10-01 12:00:01” 设置系统时间
cal 查看当前日历
cal 2020 显示2020年日历
date +%s 显示当前时间戳
搜索查找
find /root -name Hello.java 查找/root目录下Hello.java 的文件
find /opt -user root 根据文件拥有者登陆
find / -size +20M 查找根目录下大于20M的文件(+大于 -小于 空等于)k(KB)
find / -name *.txt 通配符查找
updatedb
locate Hello.java 快速查找文件(使用locate前需要updatedb)
cat a.txt | grep php 查找a.txt文件中的php内容
cat a.txt | grep -n php 并显示行号
cat a.txt | grep -i php 不区分大小写(同理 -ni 既显示行号又不区分大小写)
压缩解压缩
gzip a.txt 压缩a.txt文件(不保留原来文件)
gunzip a.txt.gz 解压a.txt.gz
zip -r test.zip /home/ 压缩/home命名为test.zip(-r递归压缩所有子文件)
unzip -d /home/test test.zip 解压test.zip到/home/test目录下
tar -c 产生.tar打包文件
-v 显示详情信息
-f 指定压缩后的文件名
-z 通过gzip支持压缩或解压缩
-x 解包.tar文件
tar -zcvf a.tar.gz a.txt b.txt 压缩a.txt和b.txt两个文件并命名为a.tar.gz
tar -zcvf b.tar.gz /home/ 压缩/home下的所有文件命名为b.tar.gz
tar -zxvf a.tar.gz 解压a.tar.gz
tar -zxvf a.tar.gz -C /home 解压a.tar.gz 到/home下
其他
ssh -p9122 32.10.1.10 连接
scp -P 9122 0.jpg root@32.10.1.10:/home 传0.jpg到10服务器/home下
cat log.txt |grep login | awk ‘{sum+=$11} END {print "AVG = ",sum/NR}’ 统计平均数
cat log.txt|awk ‘{sum+=$11} END {print "SUM = ", sum}’ 求和
cat log.txt|awk ‘{sum+=$11} END {print "AVG = ", sum/NR}’ 求平均
cat log.txt|awk ‘BEGIN {max = 0} {if ($11+0>max+0) max=$11 fi} END {print “MAX=”, max}’ 求最大值
cat log.txt |awk ‘BEGIN {min = 9999} {if ($11+0<min+0) min=$11 fi} END {print “MIN=”, min}’ 求最小值
ps -ef|grep java|grep projectname |grep -v grep|awk ‘{print $2}’|xargs kill -9 杀项目进程
df -hT 查看空间
free -h 查看内存
ps -ef|grep java|grep projectname |grep -v grep|wc -l 查看项目进程
find /home -type f -size +2000M|xargs ls -lrth |sort -rn -k 5|more 查找大文件
halt 关机
reboot 重启
sync 把内存的数据同步到磁盘中
shutdown -h now 立即关机
shutdown -h 1 1分钟后关机
shutdown -r now 立即重启
setup 工具
touch 新建文件
logout 退出
man 命令 查看当前命令的帮助信息
help 命令 查看当前命令的帮助信息
lsof -i:80 查看80端口使用的程序
kill -9 123 杀pid为123的程序
lsblk -f 查看分区情况
用户管理
用户
useradd [可选项] 用户名 新建用户(创建用户成功后,会自动创建和用户名同名的家目录)
useradd -d 指定目录 新的用户名 给新创建的用户指定家目录
passwd 用户名 指定密码,修改密码
userdel 用户名 删除用户(保留家目录)
userdel -r 用户名 删除用户(删除家目录)
id 用户名 查看用户信息
su - 用户名 切换用户
exit 返回到原来的用户
whoami 查看当前用户
组
groupadd 组名 新建组
groupdel 组名 删除组
useradd -g 组名 用户名 新建用户并指定小组
usermod -g 组名 用户名 修改用户所在的小组
/etc/passwd 用户配置信息文件
/etc/shadow 用户口令文件
/etc/group 组配置信息文件
组管理和权限管理
ls -ahl 查看文件所有者
chown xiaoming a.txt 修改a.txt文件的所有者为xiaoming
chown -R xm test/ 修改test目录下的所有文件(包含子目录、子目录中的子文件)的所有者为xm
chgrp dev a.txt 修改a.txt文件所在组为dev
-rw-r–r-- - 文件类型:-普通文件 d:目录 l:软链接c:字符设备 键盘 鼠标b:块文件 硬盘
rw- 文件所有者权限
r-- 文件所在组用户的权限
r-- 文件其他组用户的权限
chmod 修改文件或目录的权限
u 所有者
g 所在组
o 其他人
a 所有人(u、g、o综合)
r/4 读
w/2 写
x/1 执行
rwx=4+2+1=7
chmod u=rwx,g=rx,o=rx a.txt 将a.txt的所有者增加读、写、执行,所在组读执行,其他人读、执行权限
chmod u-x,g+w a.txt 将a.txt的所有者删除执行、所在组增加写的权限
chmod a+r a.txt 将a.txt 的所有人增加读的权限
chmod 755 a.txt chmod u=rwx,g=rx,o=rx a.txt
任务调度
crontab -e编辑 -l显示当前有哪些任务 -r删除所有任务 定时任务
占位符(1小时当中第几分钟,一天当中第几小时,一个月当中第几天,一年当中第几月,一周当中星期几)
案例1:
- 执行crontab -e
- 输入*/1 * * * * ls -l /etc >> /home/a.txt
案例2:输出日期(每分钟)
- 编写一个文件 mytask.sh date >> /home/mydate
- 给mytask.sh一个可以执行的权限
- crontab -e
- */1 * * * * mytask.sh
案例3:备份mysql(每10分钟)
- 编写一个文件 mytask.sh /usr/local/mysql/bin/mysqldump -uroot -p1998 --databases dbname1 > /root/temp/mydb.bak
- 添加可执行权限 chmod 744 mytask.sh
- crontab -e
- */10 * * * * mytask.sh
vi和vim
命令行模式 vim xxx ——> 一般模式/正常 i或者a ——> 编辑模式 Esc——> 一般模式/正常
一般模式/正常 :或者/ ——> 命名模式 Esc——> 一般模式/正常
命名模式 :wq :q :q!
yy 复制当前行
3yy 复制3行
dd 删除当前行
3dd 删除3行
p 粘贴
查找 /,回车查找,输入n就是查找下一个
:set nu 设置行号
:set nonu 取消行号设置
G 最末行
gg 最首行
u 撤销
3shift+g 移动到第三行
进程管理
ps -a 显示当前终端所有进程信息
-u 已用户的格式显示进程信息
-x 显示后台进程运行的参数
ps -aux | more 分页查看
ps -aux | grep mysql 查看mysql进程(grep 过滤)
ps -ef | more 已全格式显示当前所有进程(显示父进程)
-e 显示所有进程
-f 全格式
kill、killall 终止进程
kill -9 强迫进程立即停止
案例1:踢掉非法用户
- 使用ps -aux | grep sshd 获取此用户的进程号
- 在kill即可
killall gedit 终止所有gedit进程(根据名称)
ps -aux | grep bash 显示终端
pstree 显示进程树
-p 显示进程号
-u 显示用户
服务管理
在Centos7.0后,不再使用service,而是systemctl 。该指令只会临时生效,重启后恢复之前状态。
如果希望设置某个服务自启动或关闭永久生效,需要使用chkconfig指令
service iptables status 查看防火墙状态
start 开启
stop 停止
restart 重启
reload 重新加载
ls -l /etc/init.d/ 查看系统服务
chkconfig --list 查看服务的各个运行级别的运行状态
chkconfig --list | grep aegis 查看aegis服务
chkconfig aegis --list 查看aegis服务
chkconfig --level 6 aegis off 将aegis服务在运行级别6的情况下不要自启动
checonfig aegis off 在所有运行级别下关闭
chkconfig 设置完毕 需要重启才能生效
top 动态监控(q 退出)输入P安装pid排序M按照内存排序
监视特定用户 输入u在输入用户名回车即可
终止指定进程 输入k在输入进程id号即可
top -d 10 每10秒刷新(默认3秒)
netstat -anp 查看系统网络情况(-an 按一定顺序排列 -p显示哪个进程在调用)
RPM、YUM包管理器
rpm -qa 查询所安装的所有rpm软件包
rpm -qa | grep mysql
rpm -qi mysql 查看mysql版本
rpm -ql mysql 查看mysql安装位置
rpm -qf /etc/passwd 查看/etc/passwd文件属于哪个包
rpm -e firefox 卸载火狐 --nodeps强制删除
rpm -ivh firefox.rpm 安装火狐
yum基于rpm,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包(需要联网)
yum list 列表
yum install jdk 安装jdk
常见目录
/bin 存放经常使用的命令
/sbin 存放系统管理员使用的系统管理程序
/home 存放普通用户的主目录
/root 系统管理员
/boot 存放启动Linux时使用的一些核心文件
/proc 虚拟目录,系统内存映射
/srv 服务启动之后需要提取的数据
/sys 该目录下安装了2.6内核中新出现的一个文件系统
/tmp 存放临时文件
/dev 类似于windows设备管理器
/media linux系统自动识别的一些设备,如U盘 光驱,识别后,linux会把识别的设备挂载到此
/mnt 让用户临时挂载别的文件系统
/opt 额外安装软件所放的目录
/usr/local 额外安装软件所放的目录(通过编译源码方式安装的程序)
/var 存放不断扩充的东西,经常被修改的目录放此。包括各种日志文件
/selinux 安全子系统,控制程序只能访问特定文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改固定ip
运行级别
0 关机
1 单用户(找回丢失密码)
2 多用户状态没有网络服务
3 多用户状态有网络服务
4 系统未使用保留用户
5 图形界面
6 系统重启
/etc/inittab 运行级别配置文件
init 3 切换到3级别
找回root密码:开机 、引导时输入 回车、 e、 选中第二行(编辑内核)、 e 、输入 1回车、b、使用passwd root 修改root密码
MySQL
whereis mysql
which mysql 查询运行文件所在路径
/usr/bin/mysql -uroot -p1998 连接MySQL
exit 退出命令行
备份多个数据库
mysqldump -uUsername -pPassword --databases dbname1 dbname2 … > Backup.sql
备份所有数据库
mysqldump -uUsername -pPassword -all-databases > BackupName.sql
JDK安装
- tar -zxvf jdk-8u231-linux-x64.tar.gz
- vim /etc/profile
- export JAVA_HOME=/opt/jdk1.8.0_231
export CLASSPATH= : C L A S S P A T H : :CLASSPATH: :CLASSPATH:JAVA_HOME/lib/
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin - source /etc/profile
Tomcat安装
-
tar -zxvf apache-tomcat-8.5.59.tar.gz
-
进入bin目录 ./startup.sh
后台方式启动用&:/opt/apache-tomcat-8.5.59/bin/shutdown.sh &
Shell
案例1:输出hello
#i/bin/bash
echo hello
案例2:定义变量A,撤销变量A
A=100
echo A=$A
unset A
案例3:定义静态变量A,静态变量不能被撤销
readonly A=100
案例4:将命令行赋值给变量
A=`ls -l /home`
echo $A
MY_DATE=$(date)
echo $MY_DATE
案例5:定义环境变量(在/etc/profile文件中)
TOMCAT_HOME=/opt/apache-tomcat-8.5.59/
export TOMCAT_HOME
案例6:位置参数
#i/bin/bash
echo $0 $1 $2
echo $*
echo $@
echo "参数个数=$#"
执行 ./myShell.sh 100 200
输出 ./myShell.sh 100 200
100 200
100 200
参数个数=2
案例7:预定义变量
$$ 当前进程号 $!后台运行的最后一个进程的进程号 $?最后一次命令返回的状态,0为正确执行
#i/bin/bash
echo "当前的进程号=$$"
#后台的方式运行tomcat
/opt/apache-tomcat-8.5.59/bin/shutdown.sh &
echo "最后的进程号=$!"
echo "执行的值=$?"
输出:当前的进程号=20692
最后的进程号=20693
执行的值=0
案例8:运算
#i/bin/bash
#方式一$(())
RS=$(((2+1)*4))
echo $RS
#方式二$[]
RS2=$[(2+1)*4]
echo $RS2
#方式三expr 注意要有空格
TEMP=`expr 2 + 1`
RS3=`expr $TEMP \* 4`
echo $RS3
#求出两个参数的和
SUM=$[$1+$2]
echo $SUM
案例9:条件判断[ condition ] 注意condition两边要有空格
#i/bin/bash
#ok 是否等于ok
if [ "ok" = "ok" ]
then
echo "equal"
fi
#23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于等于"
fi
#/root/shell/hello.txt此文件是否存在
if [ -e /root/shell/hello.txt ]
then
echo "存在"
fi
案例10:流程控制if
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
案例11:流程控制case
#i/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
案例12:流程控制for
#i/bin/bash
#打印命令行输入的参数
#使用$*
for i in "$*"
do
echo "the num is $i"
done
echo "==================="
#使用$@
for j in "$@"
do
echo "the num is $j"
done
#从1加到100
SUM=0
for((k=1;k<=100;k++))
do
SUM=$[$SUM+$k]
done
echo $SUM
案例13:流程控制while
#i/bin/bash
#输入一个数n,计算 1+...+n的值
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM;
案例14:读取控制台输入
#i/bin/bash
#读取控制台输入的一个num值
read -p "请输入一个num1=" NUM1
echo "你输入的值是num1="$NUM1
#读取控制台输入一个num值,在5秒内输入
read -t 5 -p "请输入一个num2=" NUM2
echo "你输入的值是num2="$NUM2
案例15:函数
输入:basename /home/aa.sh
输出:aa.sh
输入:basename /home/aa.sh .sh
输出:aa
输入:dirname /a/b/c/aa.sh
输出:/a/b/c
#i/bin/bash
#计算两个参数的和
function getSum(){
SUM=$[$N1+$N2]
echo "和是="$SUM
}
read -p "请输入第一个数" N1
read -p "请输入第二个数" N2
#调用
getSum $N1 $N2
案例16:备份mysql数据库
#!/bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/root/temp/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo "============开始备份==============="
echo "============备份的路径是 $BACKUP/$DATETIME.tar.gz====================="
#主机
HOST=106.14.116.12
#用户名
DB_USER=root
#备份数据库名
DATABASE=agile
#创建备份路径
#如果备份的路径文件夹存在就使用否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库指令
/usr/local/mysql/bin/mysqldump -u$DB_USER -p$1 --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===========备份文件成功==========="
执行 ./mysql_backup.sh 19981101
或者采用定时任务 2 * * * * /root/mysql_backup.sh 19981101
19981101是密码