bash工具

2021-05-10 fishedee 后端

1 概述

部署工具

2 用户

2.1 adduser

fish@VM-0-14-ubuntu:~$ sudo adduser jan
Adding user `jan' ...
Adding new group `jan' (1001) ...
Adding new user `jan' (1001) with group `jan' ...
Creating home directory `/home/jan' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:

使用adduser就能添加一个新用户,默认这个用户是独立的同名用户组

2.2 gpasswd

gpasswd -a peter users

将peter加入到users用户组

gpasswd -d peter users

将peter移出users用户组

groups peter

查看peter所属的用户组

2.3 useradd

useradd --no-create-home --shell /bin/false prometheus

useradd可以创建一个没有Home目录和没有shell的用户。在CentOS里面,useradd与adduser是一样的。在Ubuntu里面,adduser有交互提示,但useradd没有

3 nohup

nohup xxxx > nohup.out

在命令行启动程序的时候,要用nohup。否则默认会在退出命令行的时候,自动关掉

nohup xxxx > nohup.out & echo $! > pid

我们一般会加上后面的echo语句,这样会将启动的进程号写入到pid文件上。

nohup xxxx > nohup.out & echo $$! > pid

在Makefile里面要写$\(!,而不是\)!,因为Makefile里面会将$开头的看成是一个变量

4 ssh

4.1 RSA登录

4.1.1 客户端生成密匙

RSA就是大名鼎鼎的非对称加密技术了

ssh-keygen -t rsa

生成密匙

在用户目录的.ssh的文件夹下,就能找到.pub结尾的公有钥匙

4.1.2 服务器注册密匙

然后我们在服务器的.ssh文件夹里面,将客户端的公有钥匙复制到authorized_keys文件夹就可以了。

ssh-copy-id -i ~/.ssh/id_rsa.pub user@abc.com

你也可以用ssh-copy-id来远程复制公有钥匙

4.1.3 简要

非对称加密的原理是,加密与解密用的是不同钥匙,从私匙可以推算出公匙,但是从公匙难以推算出私匙。因此,公匙可以确定通过算法来检查对方是否真的有私匙,同时又不需要知道对方的私匙到底是什么。就像,我们知道一个文件的Hash值,就能校验出这个文件是否有改动过,但又不需要真的知道这个文件的内容是什么。

我们将公匙放在服务器,服务器就会在客户端登录的时候,可以用现有的公匙来验证对方是否真的有私匙,从而来检查登录。同时,公匙的难以推算出私匙的性质,可以安全地将公匙在网络上传播,而保证私匙不会被泄漏。

4.2 执行命令

ssh fish@idc.fishedee.com "mkdir $(DIRECTORY)/$(TARGET)_new"

我们可以用ssh命令,直接在远程机器执行命令

ssh -t fish@idc.fishedee.com "sudo supervisorctl stop xx"

当远程的ssh命令需要sudo需要密码时,我们可以用加入-t参数,这样ssh执行sudo命令时就会提示我们输入密码

5 scp

scp xxx.tar.gz efg@abc.com:xxx.tar.gz

你可以将scp看成是一个cp命令,只不过它可以复制到远程的文件夹上,相当方便

6 ps

ps aux | grep `cat pid`

pid是存放着进程pid号的文件,我们可以用ps命令来查看进程的状态

7 kill

kill -9 `cat pid`

强行关掉进程工具,kill

8 cp

cp source target

从源文件复制到目标文件

cp -r source target

如果是源文件是文件夹的话,你还需要加上-r参数

cp -n source target

cp命令的默认策略是,遇到同名文件或者文件夹就直接覆盖。我们可以指定-n参数来修改这种策略,遇到同名文件或者文件夹就跳过,而不是覆盖。

9 tar

tar -zcvf xx.tar.gz target/*

压缩的命令,tar -zcvf固定参数,target/*是指定的文件,注意打包好的压缩包不含有target顶层目录。

tar -zcvf xx.tar.gz target

如果你希望顶层是一个target目录,那么就要上面这样的写法。

tar -zxvf xxxx.tar.gz -C target_folder

解压的命令,将压缩的内容,指定解压到target_folder目录

10 cut

cut 命令就是对行用指定的分隔符切开,然后取第几列的意思

cut  -f2  -d ";"

例如,-d是指定分割符,-f是指定第2列的意思,注意分隔符不会将多个分隔符合并的。

cut -f2,3 test.txt 

你可以选择第2和第3列

11 tr

tr是转换命令,将每一行的特定字符A转换为特定字符B

tr a f

将字符a全部转换为字符f

tr a-z A-Z 

将小写字符,转换为大写字符

tr -s ' '

tr有一个-s参数,将指定字符合并为一个。我们常用来将多个空格合并一个空格

12 sudo

sudo -H -u {username} command

然后我们指定某个用户来启动该应用,以加强安全性。注意,这个命令会产生两个进程,首先是sudo进程,它可能会在启动后自动关闭,然后是新的command进程,以指定username启动的

sudo -u nginx stat /var/www/abc

我们也可以用sudo命令来测试某个用户是否有某个文件的stat权限

# 无密码转sudoers
ab  ALL=(ALL:ALL) NOPASSWD:NOPASSWD:ALL

# 需要密码转sudoers
cd  ALL=(ALL:ALL) ALL

要使某个用户用sudo,需要注册在/etc/sudoers文件中配置了先。

13 权限

Linux的权限是个复杂的议题

一个文件夹的权限是drwxrwxr-x,意思是:

  • d,该文件是一个目录
  • rwx,左边数起的第2,3,4个字母,表示该文件的拥有者的权限为rwx。
  • rwx,左边数起的第5,6,7个字母,表示该文件的群组其他用户的权限为rwx。
  • r-x,左边数起的第8,9,10个字母,表示其他用户的权限为r-x。

最后第一个fish是用户,第二个fish是群组。

13.1 文件权限

文件有四种权限,r,w,x和s

  • r的权限,是可读,可以对当前文件读
  • w的权限,是可写,可以对当前文件写
  • x的权限,是可执行,可以对当前文件执行
  • s的权限比较特别,任何用户都可以执行该文件,而且执行的时候都是以root用户身份执行,实际的权限限制由本执行文件自己来决定。可以看这里

13.2 目录权限

目录有四种权限,r,w,x和t

  • r的权限,是可读,可以获取目录的文件列表,例如ls
  • w的权限,是可写,可以在目录里面新增和删除文件,例如mkdir和rm
  • x的权限,是可执行,可以在目录执行cd命令,x权限是目录的基本权限,只有r权限的目录是无法执行ls的
  • t的权限比较特别,要删除目录的任意文件,只需要w权限就可以了。但是,有时候,我们需要特别的权限控制,目录的任意文件只能被文件拥有者自身或者root用户来删除,其他用户不能删除。这个就需要对目录加入t权限了。

13.3 命令

chmod 777 abc

以数字的方式同时赋予文件的,所有权限

# 对于当前文件赋予当前拥有者的x权限
chmod u+x abc

# 对于当前文件去除当前拥有者的x权限
chmod u-x abc

# 对于当前文件赋予当前用户组的x权限
chmod g+x abc

# 对于当前文件去除当前用户组的x权限
chmod g-x abc

使用形象化的命令来改变每个部分的命令

# 对于当前文件赋予当前拥有者的s权限
chmod u+s abc

# 对于当前文件去除当前拥有者的s权限
chmod u-s abc

# 对于当前文件赋予当前用户组的s权限
chmod g+s abc

# 对于当前文件赋予当前用户组的s权限
chmod g-s abc

# 对于当前目录赋予t权限
chmod o+t abc

# 对于当前目录赋予t权限
chmod o-t abc

特殊权限的赋予与去除方式

13.4 实验

13.4.1 目录的w权限

当前在fish用户下,我们使用chmod g-w uu,去除对uu目录的w权限

nginx用户是属于fish用户组的,我们尝试以nginx用户身份在uu目录下创建文件是失败的。

13.4.2 目录的x权限

当前在fish用户下,我们使用chmod g-x uu,去除对uu目录的x权限

nginx用户是属于fish用户组的,我们尝试以nginx用户身份在cd进去uu目录是失败的,而且创建文件更是失败的,即使这个nginx用户有w权限。因为目录的x权限是基础,没有x权限的目录是什么事都做不了,即使有r和w权限。

13.4.3 文件的s权限

在/usr/bin的目录下,有一个可执行文件passwd是s权限,注意不是x权限。这个命令是用来修改用户密码的,用户密码是存放在/etc/passwd文件(这个文件是root用户)的。

如果用普通的x权限我们就会产生矛盾,用户可以修改自己的密码,但是密码文件是root用户拥有的,这注定不能实现用户修改自己密码的能力。于是,对/usr/bin/passwd可执行文件赋予s权限,使得任何人都可以执行这个文件,并且是以临时的root身份执行它。真正的可以修改//etc/passwd哪一行的权限是由/usr/bin/passwd可执行文件自己来决定的。

13.4.4 目录的t权限

fish用户创建了一个folder文件夹,并且用fish用户也创建了一个folder下的file文件。

显然,由于folder文件夹的权限是rwxrwxr-x,所以属于fish用户组的nginx用户,也能删除这个folder下的file文件

然后fish用户将folder目录赋予了t权限,然后也用fish用户创建了folder下的file文件。

这个时候,nginx用户就不能再删除folder下的file文件了。folder下的文件,只能是文件拥有者,或者目录拥有者fish,或者root用户才能删除。这就是t权限的意义。

t权限的一个例子是用在/tmp目录下,你可不想你创建的一个临时文件a,被其他用户无意中删除了。即使大家都能在/tmp目录下创建文件,但是删除文件只能是文件拥有者自身才可以行驶。

14 grep

cat a.txt | grep "md"

打开a.txt文件,并且搜索含有md字符的行

grep "md" -A 5 可以显示匹配内容以及后面的5行内容
grep "md" -B 5 可以显示匹配内容以及前面的5行内容
grep "md" -C 5 可以显示匹配内容以及前后面的5行内容

打开a.txt文件,并且搜索含有md字符的行

15 ab

ab -n 1000 -c 10 -k "http://localhost:9191/api/concurrentUser/incAge2?data=%7B%22id%22%3A10001%7D"
  • -n,参数是总的数量
  • -c,参数是并发量
  • -k,参数是打开长连接,避免一个连接用完就丢,并且产生大量TIME_WAIT状态的TCP。这样既不符合实际情况,也会影响真实的性能表现

测试的时候,要注意不要打开https来测试,这样无法测试到真正的性能瓶颈。

16 wrk

wrk -t8 -c100 -d10s "http://localhost:9191/api/concurrentUser/incAge2?data=%7B%22id%22%3A10001%7D"
  • -t,参数是线程数量,一般为核数的2倍就可以了。
  • -c,参数是并发的连接数量
  • -d,参数是持续时间

wrk是多线程+多路复用的模型,所以压测的并发数能做得比ab测试要更好,一般情况下,并发量能达到ab测试的2倍。另外要注意,wrk测试的总连接数量是不准确的,不要依赖这个数据做正确性测试

17 curl

这里

curl http://localhost:9191/api/concurrentUser/incAge\?data\=%7B%22id%22%3A10001%7D

curl一直都是简单的连接测试工具了,也没啥好说的。

  • -X,参数是请求方法,可以为GET,POST,DEL,PUT
  • -d或者–data,参数是POST请求体的数据,-d ‘{“phoneId”:“124nd”,“data”:“data”}’
  • -F或者–form,参数是请求体附带文件,-F “image=@./1.png”
  • -H,指定Header信息,-H “Content-type: application/json”
  • -I,只拿到,请求返回的头部信息
  • -i,请求返回的头部和主体信息

18 lsof

lsof -i tcp:7878

lsof 查看倾听端口为7878的进程。

19 Makefile

a:go
    echo ${boy} ${girl}
b:go2
    echo ${boy} ${girl}
go:
    $(eval boy:=1)
    $(eval girl:=2)
go2:
    $(eval boy:=11)
    $(eval girl:=22)

运行时定义变量,用eval

相关文章