Linux脚本常用命令

需要用到Linux脚本,参考了一些博客和电子书,整理了一些命令,仅供参考!

yum: Fedora/RedHat/SUSE
基于PRM包管理,能够从指定的服务器自动下载PRM包并安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,无须繁琐的一次次下载,安装。提供了查找,安装,删除某一个,一组,甚至全部软件包的命令。
yum[options][command][package…]
options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
command:要进行的操作。
package:安装的包名。

Tips:
1)Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
2)Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
3)#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即:使用哪一种 Shell
4)输出的变量前要加"$"。
5)"{}“帮助解释器识别变量的界限。
6)命令参数只有短格式之间可以合并。
7)在执行命令时在末尾添加一个&符号,则命令将进入系统后台来执行。
8)linux中以点(.)开头的文件代表隐藏文件,他们大多为系统服务文件。
9)“echo $?” 显示上一条命令执行后的返回值
10)read用于读取用户输入信息,能够把接收到的用户信息赋值给后面的指定变量,-p参数
11)用于向用户向用户展示一定的提示信息。
“read -p “please inout a number:” grade”

12)linux中有一个/dev/zero 的设备文件,他不会占用系统存储空间,但却可以提供无穷无尽的数据
13)$RANDOM可以调取出一个随机的数值(0~32767),使用expr取得其结果

Linux变量:
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:

#!/bin/bash
myUrl=“https://www.google.com”
readonly myUrl
myUrl=“https://www.runoob.com”
运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.

删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
实例
#!/bin/sh
myUrl=“https://www.runoob.com”
unset myUrl
echo $myUrl

以上实例执行将没有任何输出。
注:只有效一次,可以继续给该变量赋值

变量类型
运行shell时,会同时存在三种变量:

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,
    其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,
    有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,
    有一部分是局部变量,这些变量保证了shell的正常运行

单引号:
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号
your_name=‘runoob’
str=“Hello, I know you are “$your_name”! \n”
echo -e $str

输出结果为:
Hello, I know you are “runoob”!

双引号的优点:
1.双引号里可以有变量
2.双引号里可以出现转义字符

Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
使用 @ 符号可以获取数组中的所有元素
echo a r r a y [ @ ] 获 取 数 组 的 长 度 l e n = {array[@]} 获取数组的长度 len= array[@]len={#array[@]}

接收用户参数
shell传递参数,脚本获取参数的格式为:$n。
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

#!/bin/bash
echo “Shell 传递参数实例!”;
echo “执行的文件名:$0”;
echo “第一个参数为:$1”;
echo “第二个参数为:$2”;
echo “第三个参数为:$3”;

$ sh test.sh 1 2 3
Shell 传递参数实例!
执行的文件名: test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

$# 传递到脚本的参数个数
∗ 以 一 个 单 字 符 串 显 示 所 有 向 脚 本 传 递 的 参 数 。 如 " * 以一个单字符串显示所有向脚本传递的参数。 如" "*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

判断用户的参数
测试语句: [ 条件表达式 ]
文件测试语句:使用指定条件来判断文件是否存在或者权限是否满足等情况的运算符
-d/-e/-f/-r/-w/-x

逻辑测试语句:对测试结果进行逻辑分析,根据测试结果可以实现不同的效果
与(&&):表示当前命令执行成功后才会执行他后面的命令
或(||):表示当前命令执行失败后才会执行他后面的命令
非(!):表示把条件测试的判断结果取反

整数比较运算符:(-eq/-ne/-gt/-lt/-le/-ge)
字符串比较:(=/!=/-z(判断字符串是否为空))

if条件语句

if 条件测试语句
then 命令序列1
else 命令序列2
fi

for条件循环语句

for 变量名 in 取值列表
do
命令序列
done

while条件循环

while 条件测试操作
do
命令操作
done

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;

#其他命令模式

*)
默认命令序列
esac

常用命令

ps命令
PS 用于查看系统中的进程状态:
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

Linux中有五种进程状态
R(运行):进程正在运行或者在运行队列中等待
S(中断): 进程处于休眠中,当某个条件形成后或者接收信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。

top命令
top用于动态监视进程活动与系统负载等信息,相当Windows任务管理器

pidof/kill/killall命令
pidof用于查询某个指定服务进程的PID值
kill用于终止某个指定PID的服务进程
killall用于终止某个指定名称的服务所对应的全部进程

ifconfig命令用于获取网卡配置与网络状态等信息
uname命令用于查看系统内核与系统版本信息
uptime用于查看系统负载信息
free命令用于显示当前系统中内存的使用量信息
who 用于查看当前登入主机的用户终端信息
last 用于查看所有系统的登录记录
history 命令用于显示历史执行过的命令(默认显示1000条命令记录,可以自定义/etc/profile文件中的HISTSIZE变量值来修改)
sosreport命令用于收集系统配置及架构信息并输出诊断文档

cat命令用于查看纯文本文件(内容较少的)
more用于查看纯文本文件(内容较多的)
head命令用于查看纯文本文档的前N行
tail命令用于查看纯文本文档的后N行
tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,会特别有用,命令格式为"tail -f 文件名"

tr命令用于替换文本文件中的字符,格式为"tr [原始字符] [目标字符]

wc命令用于统计指定文本的行数,字数,字节数(-l/-w/-c)
stat 命令用于查看文件的具体存储信息和时间等信息
cut命令用于按列提取文本字符"cut [参数] 文本"
按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号
eg"cut -d: -f1 /etc/passwd"

diff命令用于比较多个文本文件的差异,格式为"diff[参数] 文件"
diff --brief确定两个文件是否相同
diff -c 详细比较出多个文件的差异之处

touch命令用于创建空白文件或者设置文件的时间"touch [选项] [文件]"(-a 读取时间 -m 修改时间 -d 两者)
先用ls命令查看一个文件的修改时间,然后修改这个文件,最后通过touch命令把修改后的文件时间设置为修改之前的时间

mkdir命令用于创建空白目录(结合-p参数来递归创建出具有嵌套层叠关系的文件目录)

cp命令用于复制文件或者目录 “cp [选项] 源文件 目标文件”
mv命令用于剪切文件或者将文件重命名

dd命令用于按照指定大小和个数的数据块来复制文件或者转换文件,他可以让用户按照指定大小和个数的
数据块来复制文件中的内容,还可以在复制过程中转换其中的数据。

if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数
eg:“dd if=/dev/zero of=560_file count=1 bs=400M”

tar命令用于对文件进行打包压缩或者解压
-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或者解压
-j 用bzip2压缩或者解压
-v 显示压缩或者解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录
eg"tar -czvf etc.tar.gz /etc" “tar xzvf etc.tar.gz -C /root/etc”

grep命令用于在文本中执行关键词搜索,并显示匹配的结果

find命令用于按照指定条件来查找文件,他可以使用不同的文件特性作为查找条件(文件名、大小、修改时间,权限等)

输入重定向就是把文件导入到命令中,输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中。
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇到分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1/命令 &>> 文件 将标准输出和错误输出重定向到一个文件中(追加到原有内容的后面)

管道命令符:把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入
通配符:通用的匹配信息的符号:*代表匹配零个或多个字符,?代表匹配单个字符
转义字符
反斜杠:使反斜杠后面的一个变量变为单纯的字符串
单引号:转义其中所有的变量为单纯的字符串
双引号:保留其中的变量属性,不进行转义处理
反引号:把其中的命令执行后返回结果

awk命令
awk把文件逐行的读入,以空格为默认分隔符将每行切开,切开的部分再进行各种分析处理
awk ‘{pattern + action }’ {filename}
pattern表示AWK在数据中查找的内容,action是在找到匹配内容时执行的一系列命令
花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域, 1 表 示 第 一 个 域 , 1表示第一个域, 1,n表示第n个域。默认域分隔符是"空白键" 或 “[tab]键”

语法格式:
格式1:前置命令 | awk [选项] ‘条件{编辑指令}’
格式2:awk [选项] ‘条件{编辑指令}’ 文件…
编辑指令如果包含多条语句时,可以用分号分隔,处理文本时,若未指定分隔符,则默认将空格、制表符等作为分隔符。print是最常见的指令。
常用命令选项
-F:指定分隔符,可省略(默认空格或Tab位)
-V:调用外部Shell变量 variable

awk中同时提供了print和printf两种打印输出的函数。
其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

数组
因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

awk编程

显示/etc/passwd的账户
awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}’ /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games

变量和赋值
除了awk的内置变量,awk还可以自定义变量。

下面统计/etc/passwd的账户人数
awk ‘{count++;print $0;} END{print "user count is ", count}’ /etc/passwd
root❌0:0:root:/root:/bin/bash

user count is 40
count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:
awk ‘BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}’ /etc/passwd
[start]user count is 0
root❌0:0:root:/root:/bin/bash

[end]user count is 40

统计某个文件夹下的文件占用的字节数
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}’
[end]size is 8657198

如果以M为单位显示:
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,“M”}’
[end]size is 8.25889 M
注意,统计不包括文件夹的子目录。

awk内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

chmod命令控制用户对文件的权限
只有文件所有者和超级用户可以修改文件或者目录的权限,可以使用绝对模式/符号模式指定文件的权限
语法: chmod [-cfvR] [–help] [–version] mode file…
mode:权限设定字符,格式为: [ugoa…][[±=][rwxX]…][,…]
其中:

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限,设置指定用户权限的设置,即将用户类型的所有权限重新设置 。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。
命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:

dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n。
unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Unix格式文件转换为Windows格式文件的命令。

猜你喜欢

转载自blog.csdn.net/liulanba/article/details/112194441