Linux基础、Shell基础语法等

常用指令

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是密码

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值