Linux常用指令及基础知识讲解

本文将给大家详细介绍linux常用的指令、演示以及一些基础知识的讲解
在本文章实战案例中,我们会学习怎样写一个自己常用的工具脚本,怎样调试shell,怎么写一个常用java项目的管理脚本,怎样找到适合自己的工具库。
本文选自电子工业出版社的《linux从入门到精通》一书
本书:由浅入深,从系统安装到文档处理,再深入权限、磁盘、进程、系统管理实战:凝聚作者十多年开发运维经验,系统地理解和使用linux图表:100 张图片,80 个表格,详细说明工具使用方法,可以作为案头工具书配套:手把手式教学,每个章节都有配套ppt与视频详解,让你从零开始也能学会案例:10 个实战案例作为章节小结,更有相关源码,让你拿来就用
1,写一个自己的日志命令:logmsg
1)一般打印日志时需要记录时间戳,我们现在改写脚本“004-while.sh”,示例如下:
……##→编写logmsg函数,每次调用,重新打印时间戳logmsg () {  local_time=`date +%y-%m-%d %h:%m:%s`  echo $local_time $1}……   if [ $sshd_count -lt 1 ]   then       logmsg  '没有找到ssh服务,重启该服务'          #调用logmsg函数       systemctl start sshd   else       logmsg  'ssh服务正常运行中...'                 #调用logmsg函数    fi 重新执行,示例如下:
[root@linuxido /shell]# sh 004-while.sh 2021-06-07 0711 ssh服务正常运行中...2021-06-07 0716 ssh服务正常运行中...…… 2)如果每个脚本中都要写个logmsg的方法,就会很麻烦,可不可以像使用其他命令一样,直接调用呢?例如echo、cat我们先来新建logmsg脚本。示例如下:
[root@linuxido /shell]# vi logmsg.sh     ##→编辑logmsg.sh脚本……logmsg() {  local_time=`date +%y-%m-%d %h:%m:%s`  echo $local_time $1  #此时的$1是指调用logmsg时输入的第一个参数}logmsg $1     #调用logmsg函数,此时的$1是指调用脚本时输入的第一个参数 3)虽然写了logmsg脚本,但是没法在文件目录以外的地方使用。还记得前面章节所说的,命令一般放在哪个目录吗?当然是/bin目录了。
##→创建logmsg命令的符号链接[root@linuxido /shell]# ln -s  /shell/logmsg.sh /bin/logmsg  [root@linuxido /shell]# logmsg         ##→直接执行logmsg命令-bash: /usr/bin/logmsg: 权限不够         ##→执行时发现虽然调用了/usr/bin,但权限不够[root@linuxido /shell]# chmod 555 /bin/logmsg  ##→赋予555权限,所有用户可读可执行[root@linuxido ~]##→logmsg linuxido.com       ##→直接执行logmsg命令,参数为yaomm2021-06-07 2319 linuxido.com                 ##→执行成功 (4)为什么/bin目录下的命令可以在任何目录下直接执行呢?因为环境配置的原因,/bin目录下的命令直接被赋予了全局调用的环境。
注意:除了echo,还可以使用print、printf打印文本。
2,写一个常用的备份命令:backup
1)编辑backup脚本,先故意命名bachup.sh。
[root@yaomm shell]# vi bachup.sh                ##→编写备份脚本#!/bin/bash    # description:编写备份常用脚本# date:2020-06-26# filename:bachup.sh# author:linuxido.com# 编辑backup函数,将要备份的文件名添加上时间戳之后改名function backup() {  newfile=$1.`date +%y-%m-%d.%h%m.bak`;         ##→新文件名称,加上时间戳  cp -p $1 $newfile;                                ##→复制一份文件  echo backed up $1 to $newfile.;             ##→打印成功日志}backup $1                                          ##→调用backup函数 2)创建/bin目录下的脚本链接,将bachup.sh链接为/bin/backup。
[root@yaomm shell]# ln -s /shell/bachup.sh /bin/backup    ##→创建链接,注意全路径[root@yaomm shell]# ll /bin/backu*##→创建成功lrwxrwxrwx 1 root root 16 jun 20 10:33 /bin/backup -> /shell/bachup.sh [root@yaomm shell]# chmod 555 /bin/backup.sh       ##→赋予所有用户执行权限[root@yaomm shell]# touch sss.txt                  ##→创建测试脚本[root@yaomm shell]# backup sss.txt                    ##→备份测试backed up sss.txt to sss.txt.2021-06-20.1034.bak.  ##→备份成功[root@yaomm shell]# ll-rw-r--r-- 1 root root   0 jun 20 10:31 sss.txt                            ##→原文件-rw-r--r-- 1 root root   0 jun 20 10:31 sss.txt.2021-06-20.1034.bak ##→备份文件 3,写一个java项目的管理脚本:springboot-admin.sh
在做java开发、运维、测试的工作中,和spring boot打交道的地方很多。怎么轻松管理一个spring boot的项目部署呢?借着这个来自github的开发者junbaor的优秀实例,我们来看看一个shell脚本是如何炼成的。
修改后的脚本详见本书代码网盘(详见“前言”)。简略代码如下:
operation=$1      ##→第一个参数,start、stop、restart、statusspringboot=$2     ##→第二个参数,jar包名##→校验参数是否为空showusage() {    ##→校验第一个参数是否为空     if [ $operation ==  ];        ##→注意:中括号[]两端至少要有一个空格……    ##→校验第二个参数是否为空    if [ $springboot ==  ];……    count=`ls $springboot | wc -l`   # 校验jar包是否存在……}##→启动springboot项目function start(){    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`    if [ $count != 0 ];then        echo $springboot is running...    else                ls $spring        ##→启动springboot项目,反斜杠连接命令        nohup java -server -xmx1g -xms1g -xss512k         -jar $springboot > /dev/null 2>&1 &        ##→调换提示位置        echo start $springboot success...    fi}##→关闭springboot项目function stop(){……    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`    ##→先用kill -15 发出停止信号,等待springboot自行关闭    if [ $count != 0 ];then        echo stop success! 优雅关闭 $springboot  process...        kill $boot_id     fii……}##→重启springboot项目,关闭后停止两秒重新启动function restart(){    stop    ##→睡眠两秒调用start方法    sleep 2    start}##→查看springboot项目的启动状态function status(){    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`    jarstatus=`ps -ef |grep java|grep $springboot`……}showusage ##→先验证参数是否为空##→只有第一个输入变量是 start|stop|restart|status的时候,才执行对应的方法case $1 in        start)        start;;        stop)        stop;;        restart)        restart;;        status)        status;;        *) echo -e 33[0;34m  请正确操作:{start|stop|restart|status}. example:bash springboot-admin.sh start test-springboot.jar 33[0mesac执行脚本:[root@yaomm shell]# sh springboot-admin.sh start xx.jar  ##→执行一个不存在的jar包ls: cannot access xx.jar: no such file or directory        ##→v0.3应该解决这个问题 xx.jar不存在[root@yaomm shell]# sh springboot-admin.sh reload /home/deploy/face-0.0.1-snapshot.jar   请正确操作:{start|stop|restart|status}.                    ##→reload不存在已有选项中 example:bash springboot-admin.sh start test-springboot.jar[root@yaomm shell]# sh springboot-admin.sh start /home/deploy/face-0.0.1-snapshot.jar ……    start /home/deploy/face-0.0.1-snapshot.jar success...     ##→正常启动[root@yaomm shell]# sh springboot-admin.sh stop /home/deploy/face-0.0.1-snapshot.jar stop /home/deploy/face-0.0.1-snapshot.jar ...               ##→正常关闭stop success! 优雅关闭 /home/deploy/face-0.0.1-snapshot.jar  process...我们可以通过将脚本放入/usr/bin下或建立systemd服务的方式进行服务控制,这个可以做到如下效果:systemctl start xxx.jar                                          ##→方法1springboot-admin start xxx.jar                                 ##→方法2 小结
在学习完本章内容后,我们已经掌握了shell的基本环境配置与常用的内置变量,基本的语法操作与简单的脚本编写,知道了怎样写一个自己的shell命令,怎样使用shell命令实现一个服务的管理。


海信发布全球首款120寸可折叠激光电视L5K
安科瑞APView500电能质量在线监测装置
钕铁硼N45磁铁性能参数、退磁曲线、高斯
微信“交通卡”功能在全国近200个城市上线
落实陈吉宁书记调研要求 争创通用GPU行业领军企业
Linux常用指令及基础知识讲解
诺基亚拍照旗舰Nokia 9 PureView搭载后置五摄
PCB设计:如何避免关键设计错误?
混合云环境中的Kubernetes HPC使用经验
多元共进|2023 Google 谷歌开发者大会现场全回顾
快来了解这个超厉害的电流检测芯片-FP130A
以无人机换人力,以智能平台增效能
知识分享:多大的电机才需要降压启动,你知道吗?
机身厚度不足7mm,搭载4000毫安电池,华为新机荣耀V9很有诚意
日产联手欣旺达在华开启HEV车型电池战场
RC滤波器和LC滤波器有什么区别?
飞兆半导体300mA低压降LDO适合高效率和空间受限数字应用
HDJB-702A微机继电保护测试仪外接PC机操作说明
专为“水下摄影爱好者”准备,奥林巴斯六防相机TG-5 发布
Taranis推出杂草识别系统 机器视觉成为防止农作物减产的新式武器