【全网首发】Linux系统最全笔记(建议收藏)

发布时间:2024年01月01日

68bbddcebf086a321cd24895ead4d5d5.gif

目录

一 Linux通用知识

1 vmvare

2 进行网络配置

3 安装xshell

4 基本命令的使用

5 用户管理

6 软件的安装方法

6 shell

7 awk文本处理工具

8 进程管理与定时任务和后台执行

9 后台运行


这篇文章是 Linux 的超级基础且经常用到的内容,不多说,直接肝!

图片

Linux软件安装


图片

Linux排查问题套路


图片

Linux命令详解

一 Linux通用知识

说到操作系统,如果读大学的时候是计算机专业,那肯定就会上这门课,我猜测当时的你们想法是这样的

  • 上大学使用的都是Windows系统,界面友好,上手快,习惯性的点点点操作

  • 大部分的课程在windows中操作,比如C++用的Vistual Studio,学数据库的SQL Server

  • 大学中的操作系统更加偏向理论研究,至于到底是怎么运作的可能懵懵懂懂

知道上了研究生到了实验室,我发现实验室的怎么都是对着一个窗口操作,瞬间觉得以前的计算机知识白学了,于是开启了Linux之路。

其实大部分的系统,团购,打车,快递都部署在服务端,其中都包含Linux,什么云计算,虚拟化,大数据等也是基于Linux,那为啥在大学里都是windows?

图片

为什么说了解Linux的生态,会让你学到更多的新技术?

我们要知道很多的大牛通过Linux来开发各种如那件,数据库Mysql,kafka,Spark等技术都会默认提供Linux的安装运维手册,所以尽快的进入Linux的世界对于个人的进步和职业发展都是非常有好处的

每当我们买了手机,买了电脑,上手就可以用,这是因为预装了操作系统。所以呀,那有什么岁月静好,知识有人帮我们负重前行了,操作系统就是这样一个角色。

那么操作系统帮助我们做了哪些事儿呢?

  • 跑几个问题,桌面上的图标是什么,为啥子敲一下键盘就出来了画面

  • 电脑咋个知道我们鼠标点击的那个位置

  • 为什么我一回车,这些字符就飞出去了

这几个任何一个操作,基本上都覆盖了操作系统的所有功能,那我来认识熟悉而默认的操作系统

1 vmvare

虚拟机是什么?

虚拟机通过软件来模拟具有完整硬件系统功能的,运行在完全隔离的完整计算机系统。每个虚拟计算机可以独立运行并安装各种软件和应用

  • 首先从官方下载并解压虚拟机安装包,然后双击运行

图片

双击VMVARE

  • 下一步

图片

接受许可进行下一步

  • 选择安装位置,最好不要出现中文

图片

自定义路径

  • 设置用户体验选项,都可以选择

图片

设置用户体验

  • 在桌面和开始菜单程序文件夹创建快捷方式。

图片

创建快捷方式

  • 百度一个许可证ZG1WH-ATY96-H80QP-X7PEX-Y30V4

图片

输入许可证密钥

  • 打开vmvare

图片

打开vmvare

  • 点击新建虚拟机向导 选择文件-新建虚拟机打开

图片

新建虚拟机

  • 选择自定义 下一步

图片

选择自定义

  • 下一步

图片

选择下一步

  • 安装客户机操作系统,选择稍后安装操作系统

图片

选择稍后安装操作系统

  • 命名虚拟机 更改虚拟机名称并选择安装得位置

图片

命名虚拟机

  • 更改主机配置进行处理的分配

图片

处理器核心数分配

  • 虚拟内存分配:注意内存分配不能大于主机内存

    图片

    虚拟内存分配

  • 设置虚拟机网络得类型,这里选择NAT

图片

网络类型暂设为NAT

  • IO控制器选择,选择LSILogic

  • 磁盘类型选择SCSI即可

图片

  • 创建磁盘选择创建新虚拟磁盘

图片

创建新虚拟磁盘

  • 指定磁盘文件

图片

指定磁盘文件

  • 修改路径

  • 选择自定义硬件

图片

选择自定义硬件

  • 选择centos得ISO镜像文件,先选择CDDVN---ISO镜像文件---浏览找到镜像、

图片

导入镜像

  • 点击完成

图片

完成

  • 开启虚拟机 选择配置好的虚拟机

图片

开启虚拟机

  • 鼠标移动到虚拟机内部,上下键选择install centos7然后回车

图片

install centos7

  • 选择软件选择最小安装,选择语言

    图片

    选择最小化安装

  • 软件安装

图片

软件安装

  • 选择计算节点

图片

选择计算节点

  • 开始安装

图片

开始安装

  • 设置root密码,点击完成配置

  • 图片

    设置root密码

2 进行网络配置

现在我们的centos还是个空壳子,如果我们需要访问外网,则需要进一步配置一波

  • 打开配置文件

#vi?/etc/sysconfig/network-scripts/ifcfg-eth0
  • 更改相应的配置

DEVICE=eth0?#设备名称,可根据ifcofnig命令查看到。
BOOTPROTO=dhcp?#连接方式,dhcp会自动分配地址,此时不需要在下面设置ip和网关
HWADDR=00:0C:29:AD:66:9F #硬件地址,可根据ifcofnig命令查看到。
ONBOOT=yes?#yes表示启动就执行该配置,需要改为yes
  • service restart network完事 ping www.baidu.com

图片

网络检测

3 安装xshell

我们已经完成了安装vmvare并导入了centos,那么我们如何去玩儿这个看似很牛皮的玩意?直接上手?不习惯吧,那我们用个远程工具连连

Xshell 是一个强大的安全终端模拟软件,Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。

  • 下载xshell(别去下了,贼慢麻烦)

  • 链接测试(因为使用的ssh,那么确保centos中22端口已经打开了)

  • 文件-----属性进行XHSELL相关的配置,比如配色,字体大小等

4 基本命令的使用

命令太多,必须要全部记忆,但是要学会如何查每个命令的参数。我画了个思维导图可以当作小字典查看,下面列出可能我们使用频率会更高的命令

执行命令含义
cd ~切换到登录用户的主目录即/home/用户名
cd /进入根目录
cd /home/lj将/home/LJ作为当前的目录
cd ..返回到上一层目录
cd -回到上次所在的目录
cd ../../去上上层目录
ls查看当前目录
ls -la查看当前目录的文件信息 包含了隐藏文件
pwd查看当前目录的绝对路径
cp /目录/1.txt /目录/复制
rm删除
q!不保存文件退出
wq!保存退出
hostname查看当前主机名
ifconfig查看网卡相关信息
firewall-cmd --statecentos7查看卡其关闭防火墙状态

5 用户管理

刚才说了可以创建自己的用户,那么怎么创建自己的用户呢?

添加用户

useradd?-d?/home/lanj?-m?lanj

更改密码

passwd?lanj

系统有很多的用户,怎么进行用户的切换?

su?-lanj
su?-root

如果需要

用户之间的切换使用su命令实现。root用户可以无需输入密码切换到lj用户,如果普通用户lj切换到root用户则需要输入密码,我们看看

su -lj

su -root

如何切换路径,绝对路径和相对路径

6 软件的安装方法

在Linux安装相关的工具分为三种方式,分别为源码安装,RPM包安装以及YUM安装方式

源码安装方式

开源软件都会提供源码下载的方式,对于源代码安装方式的好处即可以定制软件功能,安装需要的模块,不需要的模块可以屏蔽,方便管理,卸载等。

对于源码安装的步骤如下

  • 下载解压源码

一般下载下来源码以后都会存在一个Readme文件,首先应该仔细阅读这个文件,可能有很多需要修复的以前人家遇见的问题都会在上面做记录,以免入坑不回头

  • 分析平台环境

  • 编译安装软件

这里会使用make工具,make工具就会通过makefile文件来实现。makefile文件是一种按照某种语法来编写且定义了各个文件的依赖关系。

在Linux中,习惯使用Makefile替代makefile,当用户执行configure后,就会在当前目录生成这个makefile文件,然后用户输入make就开始运行。我们看看Makefile是怎么个有样子

edit?:?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o???????/*注释:如果后面这些.o文件比edit可执行文件新,那么才会去执行下面这句命令*/
????cc?-o?edit?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o

main.o?:?main.c?defs.h
????cc?-c?main.c
kbd.o?:?kbd.c?defs.h?command.h
????cc?-c?kbd.c
command.o?:?command.c?defs.h?command.h
????cc?-c?command.c
display.o?:?display.c?defs.h?buffer.h
????cc?-c?display.c
insert.o?:?insert.c?defs.h?buffer.h
????cc?-c?insert.c
search.o?:?search.c?defs.h?buffer.h
????cc?-c?search.c
files.o?:?files.c?defs.h?buffer.h?command.h
????cc?-c?files.c
utils.o?:?utils.c?defs.h
????cc?-c?utils.c
clean?:
????rm?edit?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o

make和make install的关系

当我们输入make命令过后即进入了编译阶段,编译时间根据软件的程序规模大小以及硬件配置有关,当输入make install就会开始安装软件,我们可以指定安装目录也可以不指定,系统将给你默认指定目录为/user/local,这样安装完毕。

RPM安装方式

RPM是Red Hat公司开发出来的Linux下的软件包管理工具。这些以.rpm结尾的包包含了已经编译好的二进制可执行文件,一句话即将源代码进行编译,安装,然后封装为RPM包

优点即安装简单,方便,因为已经编译完成,安装只是用来验证和解压过程,缺点也比较明显,过于依赖于操作系统,要求RPM包的安装环境必须和RPM封装时的环境保持一致,

RPM包是怎么个样子?

server-2.1.0-22.I386.rpm

其中:server为如那件的名称

2.1.0:软件的版本号

22:软件更新发行的次数

i386:适合硬件发行的次数

.rpm:rpm软件包的标识

YUM安装方式

  • 查看是否存在yum

rpm?-qa?|?grep?yum
  • 没有则安装

rpm?-ivh?yum-*.noarch.rpm
  • 自定义yum的配置。我们可以通过打开/etc/yum.repos.d/Centos-Base.repo进行源的配置

YUM有哪些特点呢

  • 安装方便

  • 可以同时配置多个源

  • 配置文件简单明了

推荐个不错的yum源

  • EPEL

是一个针对红帽企业版Linux及衍生发行版的一个高质量附加软件包项目。网址:http://fedoraproject.org/wiki/EPEL/zh-cn

  • RPMForge

这是一个第三方软件仓库,被centos社区认为是一个最安全最稳定的一个软件仓库

6 shell

大部分情况都是Linux操作系统,那么熟悉命令的用法以外,熟悉使用shell脚本能介绍不少时间

shell是什么

“ 平时经常在Linux操作系统中使用各种命令,比如查看当前的目录文件,我们会使用"ls"或者"ls -l",这些字符串参数实际上会被"某段程序"执行并启动它。这个负责将用户输入的字符串转换为需要执行程序的东西叫做"shell"。即帮用户更方便使用操作系统接口的“壳”。同样的壳还有当我输入Maven+相关参数的时候是不是就会去执行相应的功能,我们驶入sql语句的时候,数据库引擎是不是也会各种调用,一样的道理

尝试编写第一个shell

vim创建打开一个文件,扩展名为.sh。如下所示

#!/bin/bash?#告诉系统使用什么解析器
echo?"Hello?xiaolan?!"?#?echo进行输出
  • 执行方法1

?chmod?+x?./hello.sh?./hello.sh
  • 执行方法2

?/bin/sh?hello.sh

变量

变量名和等号之间不能有空格

定义变量注意事项

  • 命名首个字符不能是数字,只能使用英文字母、数字和下划线

  • 不能使用标点符号

  • 不能使用bash中关键字

变量使用

使用变量(使用变量的过程中,最好加上花括号),只需要在变量前面加上美元符号即可

#!/bin/bash
James="小皇帝"
echo?$James

只读变量

使用readonly将变量定义为只读,只读意味着不能改变

#!/bin/bash
James="小皇帝"
readonly?James
James="登哥"

删除变量

使用unset删除变量 变量删除以后不能再次使用,且不能删除只读变量

#!/bin/bash
James="小皇帝"
unset?James
echo?$James?#不会有任何输出

变量类型

  • 局部变量

仅当前shell可用

  • 环境变量

所有程序都能访问环境变量

  • shell变量

通过一部分环境变量和shell变量保证shell的正常运行

字符串

使用字符串的过程中,既可以用双引号也可以用单引号,也可以不用

  • 单引号

单引号内容原样输出,不能包含变量,且不能出现单独单引号

  • 双引号

可以出现转义字符

#!/bin/bash
James="小皇帝"
str="\"$?James\"!?oh?my?gad?\n?"
echo?-e?$str?

获取字符串长度

使用#

string="qwert"
echo?$(#string)

#?提取子字符串
echo?$(string:1:3)
#查找字符串
echo?

数组

支持以为数组

定义数组

数组元素使用“空格”隔开

array=(value1,value2,value3)

读取数组

value1=${array[0]}

使用@输出数组所有元素

echo?${array[@]}

获取数组中所有元素以及数组长度

#!?/bin/bash
# author:xiaolan
array[0]=a
array[1]=b
array[3]=c

echo “数组的元素为:${array[*]}”
echo “数组的元素为:${array[@]}”
echo “数组的个数为:${#array[*]}”
echo “数组的个数为:${#array[@]}”

执行

./array.sh

结果

图片

result

注释

单行注释

使用#开头的行为注释,会被解释器忽略

多行注释

shell传递参数

在执行shell的时候,命令行指定参数,如下所示

#!/bin/bash
James="小皇帝"
echo?"执行的文件名为:$0"
echo?"第一个参数为:$1"
echo?"第二个参数为:$2"

执行

./param.sh 1 2

结果

图片

result

几个特殊字符

图片

result

案例(partionnal.sh)

#!/bin/bash
#?author:xiaolan

echo?"--?\$*?演示?---"
for?i?in?"$*";?do
????echo?$i
done

echo?"--?\$@?演示?---"
for?i?in?"$@";?do
????echo?$i
done

执行

./demo2.sh?1?2?3

结果

图片

img

相同点:都是会引用所有参数

不同点:在使用双引号的时候。如果脚本运行时两个参数为a,b,则"*"等价于"ab",而"@"等价于"a","b"

#!/bin/bash
#?author:xiaolan

echo?"--?\$*?演示?---"
for?i?in?"$*";?do
????echo?$i
done

echo?"--?\$@?演示?---"
for?i?in?"$@";?do
????echo?$i
done

8 printf

使用printf格式化字符串,同时可以指定字符串宽度和对齐方式,格式如下

printf?format-string?[arguments...]

#!/bin/bash
#?author:xiaolan

printf?"%-8s?%-8s?%-4s\n"?姓名?科目?分数??
printf?"%-8s?%-8s?%-4f\n"?小明?数学?97
printf?"%-8s?%-8s?%-4f\n"?小话?语文?89
printf?"%-8s?%-8s?%-4f\n"?王三?英语?93

结果

图片

img

9 test

shell中的test用于检查某个条件是否成立

图片

result

案例

#!/bin/bash
#?author:xiaolan
num1=55
num2=55
if?test?$[num1]?-eq?$[num2]
then
????echo?'两个数相等!'
else
????echo?'两个数不相等!'
fi

结果

图片

result

字符串比较

图片

字符串比较

#!/bin/bash
#?author:xiaolan
num1="xiaolan"
num2="xiaolna"
if?test?$num1?=?$num2
then
????echo?'两个字符串相等!'
else
????echo?'两个字符串不相等!'
fi

结果

图片

result

流程

if语句语法格式

if?condition
then
????exec1?
????exec2
????...
????execN?
fi

如果简化为一行

if?[$(ps?-ef?|?grep?-c?"httpd")?-gt?1];then?echo?"true";fi

if else-if else

if?condition1
then
????exec1
elif?condition2?
then?
????exec2
else
????execn
fi

案例 判断两数值是否相等

#!/bin/bash
#?author:xiaolan
a=2
b=3
if?[?$a?==?$b?]
then
???echo?"a?等于?b"
elif?[?$a?-gt?$b?]
then
???echo?"a?大于?b"
elif?[?$a?-lt?$b?]
then
???echo?"a?小于?b"
else
???echo?"没有符合的条件"
fi

for循环

for?loop?in?1?2?3?4?5
do
????echo?"The?value?is:?$loop"
done

while语句

“ 通常用于从输入文件不断读取数据

while?condition
do
????exec
done

#!/bin/bash
#?author:xiaolan
int=1
while((?$int<=6?))
do
????echo?$int
????let?"int++"#?用于执行一个或者多个
done

无限循环

while?true
do
????exec
done

case语句

多选择语句。取值后面为单词in,每一个模式以")"结束。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ";;"。

#!/bin/bash
#?author:xiaolan
echo?'输入?1?到?3?之间的数字:'
echo?'你输入的数字为:'
read?aNum
case?$aNum?in
????1)??echo?'你选择了?1'
????;;
????2)??echo?'你选择了?2'
????;;
????3)??echo?'你选择了?3'
????;;
????*)??echo?'你没有输入?1?到?3?之间的数字'
????;;
esac

输入不同的内容,会有不同的结果,例如:

输入?1?到?4?之间的数字:
你输入的数字为:
3
你选择了?3

跳出循环

break

break命令允许跳出所有循环

#!/bin/bash
#?author:xiaolan
while?:
do
????echo?-n?"输入?1?到?3?之间的数字:"
????read?aNum
????case?$aNum?in
????????1|2|3)?echo?"你输入的数字为?$aNum!"
????????;;
????????*)?echo?"你输入的数字不是?1?到?3?之间的!?游戏结束"
????????????break
????????;;
????esac
done

continue

跳出当次循环

#!/bin/bash
while?:
do
????echo?-n?"输入?1?到?3?之间的数字:?"
????read?aNum
????case?$aNum?in
????????1|2|3|4|5)?echo?"你输入的数字为?$aNum!"
????????;;
????????*)?echo?"你输入的数字不是?1?到?3?之间的!"
????????????continue
????????????echo?"游戏结束"
????????;;
????esac
done

10 shell函数

用户定义函数,然后在shell脚本中随便调用,格式如下

[?function?]?funname?[()]

{

????action;

????[return?int;]

}

例子

#!/bin/bash
#?author:xiaolan

Fun1(){
????echo?"这是我的第一个?shell?函数!"
}
echo?"-----函数开始执行-----"
Fun1
echo?"-----函数执行完毕-----"

带return语句

#!/bin/bash
#?author:xiaolan

FunReturn(){
????echo?"这个函数会对输入的两个数字进行相加运算..."
????echo?"输入第一个数字:?"
????read?aNum
????echo?"输入第二个数字:?"
????read?anotherNum
????echo?"两个数字分别为?$aNum?和?$anotherNum?!"
????return?$(($aNum+$anotherNum))
}
FunReturn
echo?"输入的两个数字之和为?$??!"

函数参数

#!/bin/bash
#?author:xiaolan

funParam(){
????echo?"第一个参数为?$1?!"
????echo?"第二个参数为?$2?!"
????echo?"参数总数有?$#?个!"
????echo?"作为一个字符串输出所有参数?$*?!"
}
funParam?1?2?3?4

shell重定向

输出重定向

command1 > file # 如果file中存在内容将被清空覆盖。如果追加使用command1 >>file

ls?-l?>?dir.txt

cat dir.txt

图片

img

/dev/null文件

写入到它的内容都会被丢弃,会起到"禁止输出"的效果,如果希望屏蔽stdout和stderr ?“ command > /dev/null 2>&1

注意:Linux命令行都会打开三个文件

  • 标准输入文件:stdin文件描述符为0

  • 标准输出文件:stdout文件描述符为1

  • 标准错误文件:stderr文件描述符2

12 运算符

下表列出了常用的算术运算符,假定变量 a 为 2,变量 b 为 3:

算术运算符

图片

算术运算符

关系运算符

图片

关系运算符

布尔运算符

图片

布尔运算符

逻辑运算符

图片

逻辑运算符

字符串运算符

图片

12 shell实战

  • 请将当前目录中demo.txt第二行第三列数据输出到demo2.txt中

?cat?demo.txt|awk?’NR==2{print?$3}’?>demo2.txt?
  • 日志如下统计访问ip最多的前10个

awk?’{print?$1}’?*.log?|?sort?|?uniq?-c?|?sort?-nr?|?head?-n?

uniq - 删除排序文件中的重复行 sort对于文本进行排序 -l 按照当前环境排序. -m 合并已经排序好的文件,不排序. -n 按照字符串的数值顺序比较,暗含-b -r 颠倒比较的结果.

  • 查看占用内存最大的进程的PID和VSZ

ps?-aux|sort?-k5nr|awk?’BEGIN{print?”PID?VSZ”}{print?![2,(https://www.zhihu.com/equation?tex=2%2C)2,5}’|awk?’NR<3′?
  • 如何检查文件系统中是否存在某个文件

if?[-f?/var/log/messages]
then
echo?"File?exts"
fi
  • 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?

#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python

  • &和&&区别

“ “&” 脚本在后台运行时使用它。“&&”当前一个脚本成功完成才执行后面的命令

  • 脚本文件中,如何将其重定向标准输出和标准错误流到 log.txt 文件 ?

./a.sh?>log.txt?2>&1
  • 如何计算本地用户的数目

wc?-l?/etc/passwd?|?cut?-d
  • shell中进行字符串比较和数字比较

[?$A?==?$B?]?–?用于字符串比较
[?$A?-eq?$B?]?–?用于数字比较
  • 去掉字符串空格

echo $string | tr -d " "

  • 统计内存使用

#!?/bin/bash
#?author:xiaolan
sum=0
for?mem?in?`ps?aux?|awk?'{print?$6}'?|grep?-v?'RSS'?`
do
????sum=$[$sum+$mem]
done
echo?"The?total?memory?is?$sum""k"

结果

图片

result

  • 批量更改文件名

批量修改123目录下txt为txt.temp。将temp打包为test.tar.gz

#!/bin/bash
##查找txt文件
find?/123?-type?f?-name?"*.txt"?>?/tmp/txt.list
##批量修改文件名
for?f?in?`cat?/tmp/txt.list`
do
????mv?$f?$f.temp
done
##创建一个目录,为了避免目录已经存在,所以要加一个复杂的后缀名
d=`date?+%y%m%d%H%M%S`
mkdir?/tmp/123_$d
##把.temp文件拷贝到/tmp/123_$d
for?f?in?`cat?/tmp/txt.list`
do
????cp?$f.temp?/tmp/123_$d
done
##打包压缩
cd?/tmp/
tar?czf?123.tar.gz?123_$d/

7 awk文本处理工具

awk是一个处理文本文件的应用程序,几乎所有的Linux系统都自带了这个程序

依次处理每一行,并读取里面的每一个字段。对于处理生产环境的日志有着非常高校的作用

基本用法

#?格式
awk?做什么?文件吗
awk?'print?$0'?lan.txt

上面lan.txt是awk需要处理的文本文件。前面单引号里面有一个大括号,单引号里面就是每一行的处理动作。其中print为打印命令,

上菜

echo?'my?name?is?lanlan'?|?awk?'{print?$0}'

上面代码中,print?0位当前行,所以执行结果就是把每一行原样打印出来??上菜??¨G56G上面代码中,print0即将标准输入my name is lanlan ,c重新打印一遍

awk根据空格和制表符,将每一行分成若干段,依次为2

echo?'my?name?is?lanlan'|?awk?'{print?$3}'

为了方便,我们直接使用/etc/passwd文件进行操作,

awk?-F?':'?'{?print?$1?}'?demo.txt

3 变量

上面我们说了,可以使用符号 “3代表第一个字段,第二个字段,第三个字段¨G57G为了方便,我们直接使用/etc/passwd文件进行操作,¨G58G??3变量??上面我们说了,可以使用符号“+” 数字的方式表示第几个字段,其实还有一些变量可以直接表示相应的字段。比如 “$NFb” 表示最后一个字段

echo?'my?name?is?lanlan'|?awk?'{print?$NF}'
awk?-F?':'?'{print?NR?")?"?$1}'?demo.txtshe

这里出现了双引号,表示原样输出

其他常用的内置变量

  • FILENAME:当前文件名

  • FS:字段分隔符,默认是空格和制表符。

  • RS:行分隔符,用于分割每一行,默认是换行符。

  • OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。

  • ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。

  • OFMT:数字输出的格式,默认为%.6g。

4 函数

既然算是一门语言,函数当然少不了,下面看一波常用的函数

函数toupper()用于将字符转为大写

awk?-F?':'?'{?print?toupper($1)?}'?demo.txt

可以发现第一个字段输出的时候变成了大写

  • tolower():字符转为小写。

  • length():返回字符串长度。

  • substr():返回子字符串。

  • sin():正弦。

  • cos():余弦。

  • sqrt():平方根。

  • rand():随机数。

5 条件**

通过使用相应的条件,过滤出自己想要的内容

awk?'条件?动作'?文件名

上菜

$?awk?-F?':'?'/usr/?{print?$1}'?demo.txt
root
daemon
bin
sys

这里/usr/表示只输出包含usr的行

这个例子输出奇数行

#?输出奇数行
$?awk?-F?':'?'NR?%?2?==?1?{print?$1}'?demo.txt
root
bin
sync

#?输出第三行以后的行
$?awk?-F?':'?'NR?>3?{print?$1}'?demo.txt
sys
sync

下面的例子输出第一个字段等于指定值的行。

$?awk?-F?':'?'$1?==?"root"?{print?$1}'?demo.txt
root

$?awk?-F?':'?'$1?==?"root"?||?$1?==?"bin"?{print?$1}'?demo.txt
root
bin

5 if语句

通过if语句编写比较复杂的内容

$?awk?-F?':'?'{if?($1?>?"m")?print?$1}'?demo.txt
root
sys
sync

上面代码输出第一个字段的第一个字符大于m的行。

if结构还可以指定else部分。

8 进程管理与定时任务和后台执行

crond是什么?

crond是一个可以在指定时间执行一个shell脚本或者一系列的Linux命令。和Windows下的计划任务类似。当安装完操作系统后,默认会安装这个服务工具,并且会自动启动crond进程。

在Linux中任务的调度分为两类

  • 系统任务的调度

系统会周期性的执行一些工作,比如说写缓存的数据到硬盘,清理日志等

  • 用户任务的调度

用户定期也会执行一些任务,比如用户数据的备份,定时的邮件提醒等,这些都是通过crondtab来设置

那么crontab到底怎么用么

首先看看crontab的使用格式:

crontab?-u?user?file

常见的选项

  • -u user:很明显是需要表明是那个用户的crontab服务,别瞎搞

  • file:file是命名文件的名字,表示将file作为crontab的任务列表文件并载入到crontab中

  • -e:e为edit,表示标记某个用户的crontab文件内容

  • -l:显示用户的crontab文件、

crontab的含义

创建的crontab文件,每一行代表一项任务,每个字段都有对应的设置规则,一共分为6个字段,分别为:

minute?hour?day?month?week?command
  • minute:区间 0-59

  • hour:区间0-23

  • day:区间0-31

  • month:区间1-12

  • week:区间0-7 周日可以是0/7

  • command

这里的command代表的是需要执行的而命令,通常为脚本文件,

除了上面几个字段,还需要注意几个特殊字段

  • *:代表所欲呕可能的值

  • ,:通过,来表示区间范围的值

  • _:整数之间的中杠表示一个证书范围

  • 正斜线:表示时间的间隔频率,比如0-23/2表示每两个小时执行一次
    开始放几个例子**

crontab?-e
0?5?*?*?*?/root/bin/backup.sh

这代表的是每天早上5点运行backup.sh

每个工作日11:59pm进行备份作业

59?11?*?*?1-5?/root/bin/backup.sh

每五分钟运行一个命令

*/5?*?*?*?*?/root/bin/check-status.sh

crontab有哪些选项

crontab -e:修 改crontab文件,如果文件不存在会自动创建

crontab -l:显示crontab文件

crontab -r:删除crontab 文件

crontab -ir:删除crontab文件前提醒用户

9 后台运行

用途:不挂断的运行命令

语法:nohup Command [ Arg … ] [&]

  • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

  • 如果当前目录的 "nohup.out" 文件不可写,输出重定向到"home/nohup.out"

  • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值: 

  • 126 可以查找但不能调用 Command 参数指定的命令。 

  • 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。 

  • 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

使用&
用途:在后台运行,一般两个一起用

nohup?command?&

文章来源:https://blog.csdn.net/2302_81075415/article/details/135304695
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。