Linux Shell编程 、Vim的使用

Linux Shell编程及Vim的使用


(一)常用Linux Bash命令


1.最重要的命令

  • 查看命令手册:man commandName

    也即是俗话说的:有问题,找“男人“

  • 通过tldr(Too Long Didn’t Read)查看命令简单用法:tldr commandName

    首先你需要通过npm install -g tldr安装tldr
    Node.jsnpm安装方法不再赘述,点此查看

  • 获取命令帮助:commandName --help

  • 查找软件的位置:whereis xxx

如果文件名/命令名太长,可以输入前几个字母,然后按TAB键,Linux将会进行自动补全


2.常用命令

  • 查看当前目录:pwd,Print Working Directory

  • 进入某个目录:cd dirPath

  • 返回上一级:cd ..

  • 清屏:clear

  • 在查询结果总匹配某个关键字:grep,常与|搭配使用,如:netstat -anp | grep 8080

  • 切换用户:su userName

    su后不加用户名,默认切换为root
    su userName:切换用户后,不改变原用户的工作目录,及其他环境变量目录
    su - userName:切换用户后,切换用户后,同时切换到新用户的工作环境中

  • 查看当前用户:whoami

  • 修改配置文件后立即生效:source

  • 为命令设置别名:alias 别名="原命令"


3.编辑命令

  • 删除命令或vim中的上一个字符:ctrl+h
  • 删除命令或vim中的上一行:ctrl+u
  • 删除命令或vim中的上一个单词:ctrl+w
  • 回到命令开头ctrl+a
  • 回到命令结尾ctrl+e
  • 前移一个字符ctrl+f
  • 后移一个字符ctrl+b

4.文件/目录操作

  • 显示当前目录下的所有文件或目录:ll,是ls -l的别名

  • 为某个文件或目录设置别名,可以节省长度ln -s longPath shortPath

  • 创建目录:mkdir dirName

  • 创建文件:touch fileName

  • 递归、强制地删除目标目录及其子目录下的所有东西:rm -rf dirName,-r(ecursion)递归,-f(orce)强制

  • 以树形显示目录结构:tree -L n —— L for Level,表示显示的层级;n是一个数字,代表层级

    如果没有安装tree工具,需要先通过sudo yum install tree安装。

  • 为某个用户添加文件夹的读写权限:chown -R user:group /dirPathAndName

    该命令必须由root执行,:group可以省略。


5.文本操作

(1)tail:查看文本末尾

  • tail fileName:默认显示文件最后10文本

  • tail -n N fileName:显示文件最后N文本

  • tail -n +N fileName:显示文件N行之后的文本

    n for number

  • tail -f log-fileName实时查看文件,命令执行后会等待,如果有新行添加到文件末尾,会继续输出新的行,在查看日志时非常有用

    可用通过Ctrl + C终止命令。

  • tail -Nf log-fileName实时查看文件最后N


(2)head:查看文本头部

语法和tail相同。

  • head -n -N fileName:显示文件倒数N行之前的文本

(3)cat/tac:简单查看

cat fileName/tac fileName都是简单查看文件的内容,不用vim进行编辑,不同的是cat是正序,而tac逆序查看。


(4)moreless:分页显示

  1. more fileName类似于cat,不过是分页显示文件内容,通过space向下翻页,b向上翻页,通过:q退出。
  2. less fileNamemore功能更强大,除了more具有的翻页之外,less还可以:通过j/k进行行级别上下查找;通过G到达页面底部;通过?keyword进行查找,通过n查找下一个

(5)grep:文本查找

  • grep "match-pattern" file_1 file_2 ... [--color=auto]:通过正则表达式,在多个文件中查找,并标记匹配颜色。
  • grep -v "match-pattern" fileName:输出除正则表达式之外的所有行。

(6)awk

  1. awk是处理文本文件的应用程序(也是一门语言),它依次读取文件的每一行(row),并读取每一个字段(field),对于日志(.log.data)、.csv这样每行格式相同的文本文件,awk可能是最方便的工具。
  2. 语法:awk (-F '') 'condition {command}' fileName1 (fileName2 ...)

    条件和命令用单引号包裹,其中命令用花括号包裹。
    如:awk '{print $0}' demo.txt —— print是打印命令(如果有多个需要打印的,用逗号隔开,输出时会以空格分隔),$0代表当前行,该命令会把每一行都打印出来。

demo.txt为:

1
2
3
4
5
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

变量
  1. $0:当前行
  2. $nawk会根据空格/制表符,将一行(row)分为若干字段(field),$n表示第n个字段
1
2
$ echo 'Hello World !' | awk '{print $3}'
!
  1. $NF:NF(number field)表示字段数,所以$NF就是最后一个字段的意思
  2. $(NF - n):倒数第n+1个字段
  3. NR:number row,表示当前行
1
2
3
4
5
6
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync

print函数中想要原样输出的字符串要用双引号包裹。


-F '':指定分隔符

指定:作为分隔符:

1
2
3
4
5
6
$ awk -F ':' '{print $1}' demo.txt
root
daemon
bin
sys
sync

内置函数
  • toupper():转大写
1
2
3
4
5
6
$ awk -F ':' '{pirnt toupper($1)}' demo.txt
ROOT
DAEMON
BIN
SYS
SYNC
  • tolower():转小写
  • length():字符串长度
  • substr():子字符串
  • sqrt():平方根
  • rand():随机数

条件、if-else if-else语句

条件可以是表达式,也可以是正则表达式

  • 输出包含/user的行:awk -F ':' '/user {print $1}' demo.txt
  • 输出第3行之后:awk -F ':' 'NR > 3 {print $1}' demo.txt
  • 第一个字段等于特定值的行:awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
  • 如果第一列大于m则输出:awk -F ':' '{if ($1 > "m") print $1}' demo.txt
  • 如果第一列大于m则输出第一列,否则输出fuck:awk -F ':' '{if ($1 > "m") print $1; else print "fuck"}' demo.txt

6.服务器监控

  • 通过SSH登录服务器:ssh ip

  • 查看剩余内存:free -m

  • 查看内核版本:uname -r

  • 查看某个进程是否存在:ps -ef|grep xxx

    如,查看nginx是否已经启动:ps -ef|grep nginx

  • 要注意的是,有一个root xx xx x xx tty2 00:00:00 grep xxx的进程,那是我们的查询进程,是不能kill的*

  • 实时显示各个进程资源占用情况(相当于任务管理器):top

    退出:q

  • 杀死某个进程:kill -9 pid

  • 查看端口占用情况:netstat

    查看8080端口的占用情况,显示IP及占用程序——netstat -anptu | grep 8080

  • 查看连接46.255.86.36这个IP的端口情况*——netstat -anptu | grep 46.255.86.36

-a:a for all,显示所有连接
-n:n for numeric,使用IP而非域名
-p:p for programs,显示正在使用连接的PID和程序名
-t:t for tcp,只显示TCP连接
-u:u for udp,只显示UDP连接

  • 开启某个端口(如8080)的防火墙,允许tcp访问:firewall-cmd --zone=public --add-port=8080/tcp --permanet
  • 重启防火墙:firewall-cmd --reload
  • 查看系统模块:lsmod或者lsmod | grep bbr

7.网络命令

  • 访问网址:curl url,如curl http://localhost:8761

8.yum

  • 更新到最新版本:yum update
  • 安装:yum install xxx

9.MySQL

  • 登录MySQL:mysql -u root -p输入密码后即可登录
  • 退出MySQL命令行返回Linux Shell:exit\q

10.Vim

  • 使用vim打开文件:vi(m) fileName

    详见第(二)节


11.安全

  • 查看用户:cat /etc/passwdvim /etc/passwd
  • 查看用户组:cat /etc/groupcat /etc/group
  • 查看系统启动项:systemctl list-unit-files
  • 删除系统启动项:systemctl disable 启动项名称
  • 添加系统启动项:systemctl enable 启动项名称

12.实用or恶搞指令

(1)日历:cal

(2)循环输出字符串

命令格式:yes 加油,奥里给!

Ctrl + C终止

(3)小火车

  1. 安装:yum install sl

  2. 开火车:sl

  3. 开小火车:sl -l。l for little

  4. 开会飞的火车:sl -F。F for Fly

通过alias ls=sl可以恶搞小伙伴,在不知情的情况下输ls,看到小火车开过,人都懵了o( ̄▽ ̄)o

(4)cowsay

  1. 安装:yum install cowsay
  2. 说话:cowsay "话"
  3. 查看所有可以说话的动物:cowsay -l
  4. 指定说话的动物:cowsay -F animalName "话"

    sodomizedsay

(5)艺术字:figlet

  1. 安装:yum install figlet
  2. 生成艺术字:figlet fuck you !

(6)文件更改时自动执行命令:when-changed

1
2
3
4
#  通过pip安装when-changed
pip install when-changed
# 每当当前目录文件发生更改,执行go run hello.go
when-changed -r -v -1 go run hello.go

13.软链接

Linux下的链接相当于Windows下的快捷方式。

  1. 创建软链接:ln -s 源文件或目录 softLinkName

    ln for link.
    s for soft.
    如:创建test软链接指向/var/www/test文件夹 —— ln -s /var/www/test test

  2. 删除软链接:rm -rf softLinkName

  3. 软链接指向新地址:ln -snf 新的源文件或目录 softLinkName

    如:修改test软链接指向/var/www/fuck文件夹 —— ln -snf /var/www/fuck test


(二)Vim命令

只介绍一些最基本的语法,详细的请参考《vim使用教程》

  • 插入:i
  • 退出修改:esc
  • 保存并退出::wq
  • 退出::q
  • 强制退出::q!
    值得注意的是!的位置在前还是后有很大的不同,推荐感叹号写在命令后

(三)Shell 编程

Shell是一个用C语言编写的程序,是用户使用Linux的桥梁,既是一种命令语言,也是一种程序设计语言。
Shell脚本(Shell Script)是一种为Shell编写的脚本程序。

1.Hello World!

1
2
#!/bin/bash
echo "Hello World !"
  • #Shell中的注释符
  • #!/bin/bash是一个约定的标记,告诉系统这个脚本要用bash执行
  • echo用于向命令行输出文本

2.运行Shell脚本

(1)作为可执行程序

Shell脚本保存为test.sh,cd到对应目录下:

1
2
3
4
5
6
7
chmod +x ./test.sh  # 可执行权限
./test.sh # 执行

# 一定要写成./test.sh而非test.sh
# 因为如果直接写test.sh,Linux会去PATH找有没有test.sh
# 只有/bin, /sbin, /usr/bin,/usr/sbin...在 PATH 里,你的当前目录不在
# 所以要用./test.sh告诉系统说,就在当前目录找。

(2)作为解释器参数

直接运行解释器(如/bin/sh),其参数就是脚本文件名:

1
/bin/sh test.sh

3.变量

(1)命名:=

varName="value"

注意:变量名和“=”之间不能有空格

(2)使用:${}

1
2
$varName
${varName} # 加不加{}都可以,加是为了帮助解释器识别变量边界

(3)设置为只读:readonly

readonly varName

(4)删除:unset

unset varName

不能删除只读变量

-------------本文结束感谢您的阅读-------------

本文标题:Linux Shell编程 、Vim的使用

文章作者:DragonBaby308

发布时间:2019年05月22日 - 19:59

最后更新:2020年05月13日 - 22:33

原始链接:http://www.dragonbaby308.com/Linux-Shell-Vim/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%