Linux 命令

Posted by danner on January 3, 2020

grep

grep 命令肯定经常使用,可以去模糊查询字符串。但还有个功能就是输出当前字符串的前后几行,对于在日志中查error 时效果很好

cat nohup.out | grep -A 10 error	 # 后10行
cat nohup.out | grep -B 10 error	 # 前10行
cat nohup.out |grep -C 5 error 		 # 前后各5行

history

history 命令列出命令的历史记录

[danner@iZbp110y4xddxaifhzq3qiZ ~]$ history
    1  yum install expect -y
    2  su
    3  su
    4  source .bashrc 
    5  you-get 
    6  you-get --debug 
    7  ll
    8  cd software/
    ...

若你想重复执行某条命令,使用 !index 即可

# 去执行 ll 命令
[danner@iZbp110y4xddxaifhzq3qiZ ~]$ !7	
ll
total 432288
drwxrwxr-x 3 danner danner      4096 Nov 24 12:40 app
drwxr-xr-x 2 danner danner      4096 Jun 26  2019 data
-rw-r--r-- 1 root   root    13545762 Jun 26  2019 data 123.mp4
-rw-r--r-- 1 danner danner 255809806 Aug 15 12:35 hadoop-2.6.0-cdh5.15.1.tar.gz1
-rw-r--r-- 1 danner danner 173271626 Aug 15 17:48 jdk-8u45-linux-x64.gz
-rw------- 1 danner danner      1512 Jul 30 07:39 nohup.out
drwxr-xr-x 2 danner danner      4096 Jun 26  2019 package
drwxrwxr-x 3 danner danner      4096 Jun 19  2019 project
drwxr-xr-x 8 danner danner      4096 Nov 24 12:39 software

这些历史命令其实就保存在 home 目录下的 .bash_history 文件中。那如何去清除这些命令历史呢

[danner@iZbp110y4xddxaifhzq3qiZ ~]$ history -c

# 执行命令后,使用 history 查不到历史命令了,
# 但 .bash_history 文件中还有,保险一点是文件中也删除

[danner@iZbp110y4xddxaifhzq3qiZ ~]$ cat /dev/null > .bash_history 

alias

alias 是取别名命令,可能平常用的不多。你可以将常用的复杂命令取个简单的别名,这样在敲命令就简单

# 取别名 gg
[danner@iZbp110y4xddxaifhzq3qiZ ~]$ alias gg='cat /home/danner/nohup.out | grep -A 10 error'
[danner@iZbp110y4xddxaifhzq3qiZ ~]$ gg
    raise socket.error(msg)
OSError: No socket could be created -- (('0.0.0.0', 8080): [Errno 98] Address already in use)
http://0.0.0.0:8080/
...

是不是简单很多,再也不用敲那些复杂的命令了。但这种方式只在当前 Session (窗口) 生效,若要全局需要写在配置文件(bash …)里。

sudo

sudo 命令允许用户暂时使用 root 权限 去执行,前提是先配置。

[danner@iZbp110y4xddxaifhzq3qiZ ~]$ sudo ls
[sudo] password for danner: 
danner is not in the sudoers file.  This incident will be reported

命令输出提示当前用户无法执行 sudo,我们需要在先使用 root 账号在 /etc/sudoers 配置。

[root@iZbp110y4xddxaifhzq3qiZ danner]# chmod 640 /etc/sudoers
[root@iZbp110y4xddxaifhzq3qiZ danner]# vi /etc/sudoers

# 文件末尾添加并保存
danner   ALL=(root)      NOPASSWD:ALL

# 现在可以使用 sudo
[danner@iZbp110y4xddxaifhzq3qiZ ~]$ sudo ls
app  data  data 123.mp4  hadoop-2.6.0-cdh5.15.1.tar.gz1  

top

top 实时输出当前机器的 cpu内存的使用情况

[danner@iZbp110y4xddxaifhzq3qiZ ~]$ top
top - 21:18:21 up 51 days, 10:31,  3 users,  load average: 0.01, 0.02, 0.00
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2054196k total,   811720k used,  1242476k free,   151524k buffers
Swap:        0k total,        0k used,        0k free,   493668k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                 1124 root      10 -10  124m  12m 9420 S  0.3  0.6 406:36.00 AliYunDun                                                                                                              6423 danner    20   0  134m 7408 1172 S  0.3  0.4  77:04.68 redis-serve
  

重要的参数是 load average 负载

load average: 0.01, 0.02, 0.00
# 展示的是 1、5、15 分钟的 cpu 负载,对于物理机小于10都是可以忍受的,但对于云主机可能要小于3

vi

vi 是 Linux 上的一个命令行文本编辑器,通过配置可以化身为强大的 IDE。这里不介绍如何配置,只列举一些常用的快捷键

# 设置行号
:set nu
# 取消行号
:set nonu

# 删除命令
dd		# 删除当前行
dG		# 删除当前行以及后面的所有行
ndd		# 删除n行包含当前行以及后面的行

# 跳转命令
gg		# 跳转到文本的第一个字母
G		# 跳转到尾行的第一个字母

gg+dG	# 删除整个文件