0%

Linux常用命令

记录一下 CentO7 中常用的命令

命令:

rpm -q package-name     #检查包是否被安装
rpm -qa                 #列出所有安装的包

shell 脚本参数 传参数$$$

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

Linux corn

定时任务

代表意义 分钟 小时 日期 月份 命令
数字范围 0~59 0~23 1~31 1~12 0~7 需要执行的命令
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

sed

sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。

sed
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

function:
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行

一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。

>> 与 >

> : 会重写文件,如果文件里面有内容会覆盖。
>   是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空。
   一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节)。
>> :追加文件,也就是如果文件里面有内容会把新内容追加到文件尾。
    这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件。

shell 字符串

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

双引号里可以有变量
双引号里可以出现转义字符

home=tj
echo "hello, ${home}"
echo 'hello, ${home}'

命令 grep

  1. 作用
    ​ Linux系统中grep命令是一种强大的文本搜索工具,
  2. 它能使用正则表达式搜索文本,并把匹 配的行打印出来。
  3. grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

主要参数

-a或–text 不要忽略二进制的数据。
-A<显示列数>或–after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。
-b或–byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
-B<显示列数>或–before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。
-c或–count 计算符合范本样式的列数。
-C<显示列数>或–context=<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作>或–directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>或–regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。
-E或–extended-regexp 将范本样式为延伸的普通表示法来使用。
-f<范本文件>或–file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
-F或–fixed-regexp 将范本样式视为固定字符串的列表。
-G或–basic-regexp 将范本样式视为普通的表示法来使用。
-h或–no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H或–with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。
-i或–ignore-case 忽略字符大小写的差别。
-l或–file-with-matches 列出文件内容符合指定的范本样式的文件名称。
-L或–files-without-match 列出文件内容不符合指定的范本样式的文件名称。
-n或–line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。
-q或–quiet或–silent 不显示任何信息。
-r或–recursive 此参数的效果和指定“-d recurse”参数相同。
-s或–no-messages 不显示错误信息。
-v或–revert-match 反转查找。
-V或–version 显示版本信息。
-w或–word-regexp 只显示全字符合的列。如 “grep -w magic” 匹配 magic 不匹配magical
-x或–line-regexp 只显示全列符合的列。
-y 此参数的效果和指定“-i”参数相同。

举例: 查找 /etc/profile文件 去掉 空行,去掉注释行(以#开头)
grep -v ‘^$’ /etc/profile |grep -v ‘^#’

awk

awk命令详解

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

awk处理过程: 依次对每一行进行处理,然后输出

awk:(将一行分为多个字段做处理)(重点)

awk [-F  field-separator]  'commands'  input-file(s)

其中,commands 是真正awk命令,*[-F域分隔符]*是可选的。default : 空格 * input-file(s) *是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。

last -n 5 | awk  '{print $1}' # 去除最后5行  打印第一个字段(域)
$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符

curl 命令

#常见参数
    -A/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么
    -basic 使用HTTP基本验证
    --tcp-nodelay 使用TCP_NODELAY选项
    -e/--referer <URL> 来源网址,跳转过来的网址
    --cacert <file> 指定CA证书 (SSL)
    --compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
    -H/--header <line>自定义头信息传递给服务器
    -I/--head 只显示响应报文首部信息
    --limit-rate <rate> 设置传输速度
    -u/--user <user[:password]>设置服务器的用户和密码
    -0/--http1.0 使用HTTP 1.0
    -o/--output	把输出写到该文件中(必须指定文件绝对路径)
    -s/--silent	静默模式。不输出任何东西

举例:

#取URL返回状态码:
curl -s -m 10 -o /dev/null -w %{http_code} https://www.baidu.com

#检查一批URL的HTTP状态:
cat url.txt|while read line; do curl -I $line -m 5 --connect-timeout 5 -o /dev/null -s -w "$line "%{http_code}"\n"; done>ok.txt

linux中 /dev/null命令

/dev/null :代表空设备文件
0 :表示键盘输入(stdin)

:代表重定向到哪里,例如:echo “123” > /home/123.txt
1 :表示标准输出(stdout),系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2 :表示标准错误(stderr)
& :表示等同于的意思,2>&1,表示2的输出重定向等同于1

#1、禁止标准输出

[root@zhoucentos log]# cat filename
wo ai wo jia
[root@zhoucentos log]# cat filename >/dev/null

#2、禁止标准错误

[root@zhoucentos log]# rm filename1 
rm: 无法删除"filename1": 没有那个文件或目录
[root@zhoucentos log]# rm filename1 2>/dev/null

#3、禁止标准输出和标准错误

[root@zhoucentos log]# rm filename1
rm: 无法删除"filename1": 没有那个文件或目录
[root@zhoucentos log]# rm filename1 >/dev/null 2>&1

#4、清除文件的内容

[root@zhoucentos log]# cat filename
wo ai wo jia
[root@zhoucentos log]# cat /dev/null > filename
[root@zhoucentos log]# cat filename

command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 &

#1)command:表示shell命令或者为一个可执行程序
#2)>:表示重定向到哪里
#3)/dev/null:表示Linux的空设备文件
#4)2:表示标准错误输出
#5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于1
#6)&:表示后台执行,即这条指令执行在后台运行

#1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。 
#2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

#这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空. 
#所以可以看出” >/dev/null 2>&1 “常用来避免shell命令或者程序等运行中有内容输出。

if 判断

  1. 条件测试的表达式:
    [ expression ]  # 括号两端必须要有空格
    [[ expression ]] # 括号两端必须要有空格
    test expression
组合测试条件:

-a  # : and
-o  # : or
!   # :  非
  1. 整数比较:
-eq # 测试两个整数是否相等
-ne # 测试两个整数是否不等
-gt # 测试一个数是否大于另一个数
-lt # 测试一个数是否小于另一个数
-ge # 大于或等于
-le # 小于或等于
# 命令间的逻辑关系

&&  # 逻辑与:
        # 第一个条件为假 第二个条件不用在判断,最总结果已经有
        # 第一个条件为真,第二个条件必须得判断

|| # 逻辑或
  1. 字符串比较
== # 等于  两边要有空格
!= # 不等
>  # 大于
<  # 小于
  1. 文件测试
-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e FILE 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z  是否为空  为空则为真
-a  是否不空

iconv 命令

iconv 命令是linux下用于文件转编码的常用命令,对于同时使用windows系统和linux系统的同学来说文件转编码也是经常遇到的操作。

 # 输入/输出格式规范:
  -f, --from-code=名称     #原始文本编$$码
  -t, --to-code=名称         #输出编码

# 信息:
  -l, --list                    #列举所有已知的字符集

# 输出控制:
  -c                           #从输出中忽略无效的字符
  -o, --output=FILE        #输出文件
  -s, --silent                   #关闭警告
      --verbose                #打印进度信息
  -?, --help                    #给出该系统求助列表
      --usage                   #给出简要的用法信息
  -V, --version                #打印程序版本号

SCP


#  本地向服务器上传文件
scp -r /path/to/file username@host:/path/to.file

# 从服务器下载文件

scp -r username@host:/path/to.file /path/to/file

欢迎关注我的其它发布渠道