Linux-Shell命令整理

2019-07-12  本文已影响0人  榷奕

(遇到不会的就往这里整理呗)
现在想做一个shell的一键启动脚本,装环境不好做脚本,因为执行到一半可能失败。

绝对目录和相对目录

(1) 绝对目录

绝对目录以/开头,上来直接就是/user 、 /root之类的这些,都是根目录下的

(2) 相对路径

一种写法是 yang/log,最开头没加/,直接就是文件名,这是以当前目录开头的相对路径。
同上,./,点杠开头也是当前目录开头。
../是上一级目录开头的。

创建目录

mkdir -p xxx/xxx/xxx/xxx/xxx
加了-p之后,同时创建这一大堆的目录。
不加-p的话,只能创建最后一个。

分号;等同于回车

如果你回车了,就不用写分号,写了分号就不用回车

if条件判断

if[空格-n "$AUTH_pid"空格]
shell编写if,报command not found,原因在于那两个空格,真的恶心
然后-n,-n 的意思是not null

变量定义

A=1
export B=1
这个定义变量变态就变态在中间不能加空格,加一个空格判定你错啊。
上面的是局部变量,下面是环境变量。

shell脚本

写一个脚本是真的没什么难度,顶上一行写一句

#!/bin/sh

没了,后面全是shell语句,真没了。

case

语法:

case 值 in
模式1)
    command1
    command2
    ...
    ;;
模式2)
    command1
    command2
    ...
    ;;
esac

(1) 这里面注意的几点,首先是in后面跟的这个范围,是用
case1)
case2)
这样的形式来写的,顶格写,只有一半的有括号
(2) 每一个分支写完之后,要跟两个;;,这东西相当于其他语法里面的break了吧
(3) 最后就是case对应了esac


ps查进程

ps -aux|grep hospital

用这个指令查进程是最好的!

netstat

netstat -plt

(原来是alt的,现在改成了plt,p是progress,进程,l是监听,t是tcp连接。这么写可以查到启动的所有的mysql、redis之类的,注意,这个查不到java)

find和locate

find  /  -name  “docker.service”
locate  docker.service

目前对于find只会一个-name也差不多了,locate直接就相当于find / -name,后面直接跟文件名的部分字段就可以了,都是自带模糊查询。

grep

grep  "docker"  docker.txt
(重要) find  /  -name  "docker.service"  |  grep  log

grep跟管道工作符结合在一起可能是最厉害的地方,本来应该在最后加使用文件,然后使用管道工作符变成了在最前面操作一遍,然后把操作结果直接给后面的grep当输入。
(这里差一个|和xargs的区别)

awk

lsof -i:7050  |  awk  '$2>0  { print $2 }'

awk主要是筛选出某一列出来,用种种条件筛除某些符合条件的行,然后再取其中的某几列。$2>0筛选行,print $2筛选列。
awk这个不准备深入学习,真的需要切片分析做日志的时候就会去用python吧。

sed

sed其实是为了替换用的,不过到现在还没遇上啥替换的工作,先不看。
用sed筛选出某几行来

sed -n '5p' file

sed -n '2,5 p' file

sed -n '1~2 p' file

sed -n '2~2 p' file

估计会这些就够了吧。-n用来只显示符合条件的。p用于输出。

管道和xargs -n

管道后面除了接xargs和grep之外还不知道能接别的,就是把上一个命令的输出变成下一个命令的标准输入,但是接收标准输入的命令好像也不多。
xargs是把标准输入变成跟用户手输差不多的形式,xargs还有好几个参数 - n 和 - p,这两个应该最有用。

lsof -ti : 7050 | xargs -pn 1 kill -9

这个-n是切割,由于输出了很多列,每一列都执行一个命令,-n 1 就是每次取一个传给后面的命令表达式。 -n这个应该是非用不可的。
-p是每次执行之前都要输出一下给你看看,然后你敲y才会运行的,这个可用可不用,debug用吧。

history

history  |  grep  firewalld

history可以查看当前账号之前的命令历史,甩锅用。

who

who只能查看不同账户的登录历史,也是甩锅用。

telnet和ping

有用的命令估计也就telnet IP地址 端口
ping IP地址

firewall和iptable

在RHEL 7系统中,firewalld防火墙取代了iptables防火墙。其实,iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。

换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。大家甚至可以不用完全掌握本章介绍的内容,只要在这多个防火墙管理工具中任选一款并将其学透,就足以满足日常的工作需求了。

既然这两个都是管理防火墙的管理工具,那就学firewalld好了,这两个工具运不运行都是无所谓的,看工具后面的防火墙。

运行、停止、禁用firewalld

启动:# systemctl start firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
停止:# systemctl disable firewalld
禁用:# systemctl stop firewalld

systemctl和service

这两个的区别就懒得列清楚了,systemctl比service更强大,大概的作用都是去管理服务启动停用,开机启动服务这些。

文本编辑

Vim编辑器

vim一开始进入的时候,命令模式不能操作,要输入i然后进入编辑模式,再按esc回到命令模式,再按:进入末行模式,
:q退出 :w保存 :wq保存并退出

搜索模式,进入之后按/,在后面输入要搜的东西,以及跳转的时候不能按空格,要按n(next),然后就跳到下一个。

Cat

cat docker.txt
cat后面直接跟要看的文件,最好是小文件。

工作目录切换

cd
pwd (当前绝对路径)
ls (当前文件夹内容)

Screeen

(screen真是个神器,跟nohup发挥一样的作用,你想让程序不间断运行的时候,这个是真的好用啊!!!)

  1. screen -S yourname -> 新建一个叫yourname的session

  2. screen -ls -> 列出当前所有的session

  3. screen -r yourname -> 回到yourname这个session

  4. Ctrl-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

  5. screen -S session_name -X quit(这就是在新建那个后面加上了-X quit)

(screen这个命令和nohup这两个是互相替代的,之所以要用nohup是因为你如果不设置成不停止,那你这个xshell一关,程序就退出了。你输完nohup &之后,前台空出来了,你还能接着做其他事情,screen也是一样的作用,只是他可以分很多个屏幕,每个屏幕里面做一件事互不干扰,不需要腾出前台这个需求。)

nohup命令

nohup 是 no hang up 的缩写,就是不挂断的意思。打上了nohup之后,输出到日志文件,前天正常运行;关闭窗口程序不关。
& : 指在后台运行,输出到前台,前台用不了了;关闭窗口程序跟着关了。
  1. sh test.sh & 将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)

将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。

2. nohup sh test.sh 将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使<u>关闭xshell退出当前session依然继续运行</u>。

3. nohup sh test.sh & 将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使<u>关闭xshell退出当前session依然继续运行</u>。

nohup和&的区别

& : 指在后台运行

nohup : nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

lsof和netstat

lsof命令更高级一点,还能看见pid进程信息,方便清理。
lsof = netstat + ps(ps是系统进程,其实用lsof主要就是为了看系统的进程号pid的,netstat看不了pid)
以及lsof升级了,lsof -ti:7050,在i前面加一个t,直接就把端口筛出来了,根本就不用什么行列处理之类的。

lsof -ti:7050
kill -9 11111

给Linux用户添加sudo权限

sudo  adduser  yang  sudo

把yang改成别的用户名,一行命令添加sudo权限。

上一篇下一篇

猜你喜欢

热点阅读