Linux基础知识总结2 | vim与bash
1.Vim的使用
- 一般指令模式:vim进去模式的模式
- 编辑模式:在一般模式下按 “i, I, o, O, a, A, r, R” 可以进入编辑模式
- 命令行命令模式:在一般模式下输入 “: / ?” 任意一个,可以将光标移动到最下面那一列
vim fileName
可以新建一个文件,编辑完后按ESC输入:wq
即可完成编辑且退出,若文件权限不对无法写入,可以加一个!表示强制写入,即 :wq!
,但这是在“你的权限可以改变”的情况下才能成立的
在一般指令模式下:按u可以撤销编辑模式下的修改、30 j
向下移动30行光标、30 k
向上移动30行光标
2.BASH
2.1 认识bash与shell
通过“ Shell ”将输入的指 令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
history:历史查询功能
Tab按键:自动补全
alias:命令别名设置功能,如:alias lm='ls -al'
,lm
和ls -al
功能是一样的,要取消别名的设置unalias lm
[root@VM-20-9-centos /]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
Wildcard:万用字符:比如查看 /usr/bin文件夹下面以x开头的文件或文件夹
[root@VM-20-9-centos /]# ls -l /usr/bin/x*
lrwxrwxrwx 1 root root 7 4月 24 2020 /usr/bin/x86_64 -> setarch
-rwxr-xr-x 4 root root 1257912 10月 12 2020 /usr/bin/x86_64-redhat-linux-c++
-rwxr-xr-x 4 root root 1257912 10月 12 2020 /usr/bin/x86_64-redhat-linux-g++
-rwxr-xr-x 3 root root 1253912 10月 12 2020 /usr/bin/x86_64-redhat-linux-gcc
-rwxr-xr-x 3 root root 1253912 10月 12 2020 /usr/bin/x86_64-redhat-linux-gcc-8
-rwxr-xr-x. 1 root root 424 5月 11 2019 /usr/bin/x86_64-redhat-linux-gnu-pkg-config
-rwxr-xr-x 1 root root 32832 10月 22 2020 /usr/bin/x86_energy_perf_policy
-rwxr-xr-x. 1 root root 90312 5月 11 2019 /usr/bin/xargs
-rwxr-xr-x 1 root root 340216 11月 9 2019 /usr/bin/xgettext
-rwxr-xr-x 1 root root 20656 4月 7 2020 /usr/bin/xmlcatalog
-rwxr-xr-x 1 root root 75096 4月 7 2020 /usr/bin/xmllint
-rwxr-xr-x. 1 root root 35680 5月 11 2019 /usr/bin/xmlwf
-rwxr-xr-x 1 root root 29248 10月 15 2020 /usr/bin/xsltproc
-rwxr-xr-x 1 root root 23440 11月 12 2019 /usr/bin/xxd
-rwxr-xr-x. 1 root root 91432 5月 11 2019 /usr/bin/xz
lrwxrwxrwx. 1 root root 2 5月 11 2019 /usr/bin/xzcat -> xz
lrwxrwxrwx. 1 root root 6 5月 11 2019 /usr/bin/xzcmp -> xzdiff
-rwxr-xr-x. 1 root root 18376 5月 11 2019 /usr/bin/xzdec
-rwxr-xr-x. 1 root root 6632 5月 11 2019 /usr/bin/xzdiff
lrwxrwxrwx. 1 root root 6 5月 11 2019 /usr/bin/xzegrep -> xzgrep
lrwxrwxrwx. 1 root root 6 5月 11 2019 /usr/bin/xzfgrep -> xzgrep
-rwxr-xr-x. 1 root root 5628 5月 11 2019 /usr/bin/xzgrep
-rwxr-xr-x. 1 root root 1802 5月 11 2019 /usr/bin/xzless
-rwxr-xr-x. 1 root root 2161 5月 11 2019 /usr/bin/xzmore
type:查看指令是否为内置指令, 因此 type 也可以用来作为类似 which 指令的用途
[root@VM-20-9-centos /]# type man
man 是 /usr/bin/man
[root@VM-20-9-centos /]# type ls
ls 是 `ls --color=auto` 的别名
[root@VM-20-9-centos /]# type history
history 是 shell 内建
[root@VM-20-9-centos /]# type cd
cd 是 shell 内
\ + [Enter]键:换行输入
[root@VM-20-9-centos /]# ls \
> -al
总用量 80
dr-xr-xr-x. 19 root root 4096 3月 1 10:46 .
dr-xr-xr-x. 19 root root 4096 3月 1 10:46 ..
-rw-r--r-- 1 root root 0 11月 26 2019 .autorelabel
lrwxrwxrwx. 1 root root 7 5月 11 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 4月 13 2021 boot
drwxr-xr-x 2 root root 4096 12月 10 2019 data
drwxr-xr-x 19 root root 2960 11月 7 01:31 dev
drwxr-xr-x. 100 root root 12288 2月 18 14:25 etc
drwxr-xr-x. 6 root root 4096 2月 18 14:25 home
lrwxrwxrwx. 1 root root 7 5月 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 5月 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 11月 26 2019 lost+found
drwxr-xr-x. 2 root root 4096 5月 11 2019 media
drwxr-xr-x. 2 root root 4096 5月 11 2019 mnt
drwxr-xr-x. 3 root root 4096 11月 6 10:59 opt
dr-xr-xr-x 100 root root 0 11月 7 01:31 proc
dr-xr-x---. 6 root root 4096 2月 28 14:22 root
drwxr-xr-x 31 root root 1020 2月 23 11:34 run
lrwxrwxrwx. 1 root root 8 5月 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 5月 11 2019 srv
dr-xr-xr-x 13 root root 0 11月 7 01:31 sys
drwxrwxrwt. 4 root root 4096 3月 1 10:27 tmp
drwxr-xr-x. 12 root root 4096 11月 26 2019 usr
drwxr-xr-x. 20 root root 4096 11月 26 2019 var
2.2 变量
定义:变量就是让某一个特定字串代表不固定的内容
如系统变量 一般是大写 PATH、HOME、SHELL、MAIL
变量的取用:echo
,一般会在变量前面加上$
oot@VM-20-9-centos /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@VM-20-9-centos /]# echo $HOME
/root
[root@VM-20-9-centos /]# echo $MAIL
/var/spool/mail/root
[root@VM-20-9-centos /]# echo $SHELL
/bin/bash
变量的设置:=
,变量开头不能是数字,等号两边不能接空格
[root@VM-20-9-centos /]# echo ${myname}
[root@VM-20-9-centos /]# myname=试一下设置变量
[root@VM-20-9-centos /]# echo ${myname}
试一下设置变
取消变量的设置:unset
[root@VM-20-9-centos /]# echo ${myname}
试一下设置变量
[root@VM-20-9-centos /]# unset myname
[root@VM-20-9-centos /]# echo ${myname}
环境变量
env:列出来所有的环境变量
[root@VM-20-9-centos /]# env
LS_COLORS=rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=01;05;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;40:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.zst=38;5;9:*.tzst=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.wim=38;5;9:*.swm=38;5;9:*.dwm=38;5;9:*.esd=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.mjpg=38;5;13:*.mjpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.m4a=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.oga=38;5;45:*.opus=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
SSH_CONNECTION=58.251.76.253 52032 10.0.20.9 22
LANG=zh_CN.UTF-8
HISTTIMEFORMAT=%F %T
HOSTNAME=VM-20-9-centos
OLDPWD=/root
XDG_SESSION_ID=66213
USER=root
PWD=/
HOME=/root
SSH_CLIENT=58.251.76.253 52032 22
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
HISTSIZE=3000
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
set:列出所有变量(包括 环境变量、自定义变量、与 bash 操作接口有关的变量)
[root@VM-20-9-centos /]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="7")
BASH_LINENO=()
BASH_REMATCH=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.4.19(1)-release'
COLUMNS=179
COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
...
export:后面不接变量则和env的作用一样,显示所有环境变量,若接了变量 export 变量
,则可以把当前变量添加到环境变量中,用unset 变量
可以把该变量从环境变量中取消
[root@VM-20-9-centos /]# myname=测试一下环境变量
[root@VM-20-9-centos /]# export myname
[root@VM-20-9-centos /]# export
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus"
declare -x HISTSIZE="3000"
declare -x HISTTIMEFORMAT="%F %T "
declare -x HOME="/root"
declare -x HOSTNAME="VM-20-9-centos"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=01;05;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;40:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.zst=38;5;9:*.tzst=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.wim=38;5;9:*.swm=38;5;9:*.dwm=38;5;9:*.esd=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.mjpg=38;5;13:*.mjpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.m4a=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.oga=38;5;45:*.opus=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/root"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PROMPT_COMMAND="history -a; history -a; printf \"\\033]0;%s@%s:%s\\007\" \"\${USER}\" \"\${HOSTNAME%%.*}\" \"\${PWD/#\$HOME/\\~}\""
declare -x PWD="/"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="58.251.76.253 52032 22"
declare -x SSH_CONNECTION="58.251.76.253 52032 10.0.20.9 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm-256color"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="66213"
declare -x myname="测试一下环境变量"
locale:查询语系
[root@VM-20-9-centos /]# locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
...
[root@VM-20-9-centos /]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
[root@VM-20-9-centos /]# cat etc/locale.conf
LANG=en_US.UTF-8
变量键盘读取、阵列与宣告
read:读取来自键盘变量的输入
[root@VM-20-9-centos /]# read test //按下回车后请输入内容
你好
[root@VM-20-9-centos /]# echo $test
你好
declare:宣告变量的类型
array:类似于数组
[root@VM-20-9-centos /]# var[1]=1
[root@VM-20-9-centos /]# var[2]=2
[root@VM-20-9-centos /]# var[3]=3
[root@VM-20-9-centos /]# echo ${var[1]}, ${var[2]}, ${var[3]}
1, 2, 3
命令执行的判断依据
cmd1 ; cmd2
:可以一次执行多个指令,用 ;
隔开
[root@VM-20-9-centos /]# echo aa;echo bb
aa
bb
📄复制
cmd1 && cmd2
、cmd1 || cmd2
[root@VM-20-9-centos /]# echo a && echo b
a
b
[root@VM-20-9-centos /]# echo a || echo b
a
2.3 管线命令(pipe)
如果一群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设置?这就牵涉到管线命令的问题了 (pipe),管线命令使用的是“ | ”这个界定符号! 另外,管线命令与“连续下达命令”是不一样的
在每个管线后面接的第一个数据必定是“指令”!而且这个指令必须要能够接受standard input 的数据才行,这样的指令才可以是为“管线命令”,例如 less, more, head, tail等都是可以接受 standard input 的管线命令啦。至于例如 ls, cp, mv 等就不是管线命令了!因为 ls, cp, mv 并不会接受来自 stdin 的数据
2.3.1 撷取命令 cut、grep
cut
:可以把一段信息的某一段切出来,以行为单位,cut 在处理多空格相连的数据时,可能会比较吃力
[root@VM-20-9-centos /]# last
root pts/1 58.251.76.253 Tue Mar 1 13:44 still logged in
root pts/0 58.251.76.253 Tue Mar 1 10:24 - 14:31 (04:07)
root pts/0 58.251.76.253 Tue Mar 1 10:17 - 10:24 (00:06)
root pts/0 58.251.76.253 Mon Feb 28 09:51 - 14:22 (04:31)
root pts/0 58.251.76.253 Wed Feb 23 16:40 - 17:49 (01:08)
root pts/1 58.251.76.253 Fri Feb 18 14:00 - 20:10 (06:09)
root pts/0 58.251.76.253 Fri Feb 18 11:39 - 14:33 (02:54)
lighthou pts/0 81.69.102.16 Wed Feb 16 00:10 - 00:11 (00:01)
lighthou pts/0 81.69.102.25 Wed Feb 16 00:05 - 00:06 (00:01)
lighthou pts/0 81.69.102.18 Wed Feb 16 00:00 - 00:02 (00:02)
lighthou pts/0 81.69.102.22 Tue Feb 15 23:57 - 23:58 (00:01)
...
[root@VM-20-9-centos /]# last | cut -d ' ' -f 1
root
root
root
root
root
root
root
lighthou
lighthou
lighthou
lighthou
...
grep
:分析一行讯息,若当中有我们需要的信息,则把该行拿出来
[root@VM-20-9-centos /]# last | grep 'root' -n
1:root pts/1 58.251.76.253 Tue Mar 1 13:44 still logged in
2:root pts/0 58.251.76.253 Tue Mar 1 10:24 - 14:31 (04:07)
3:root pts/0 58.251.76.253 Tue Mar 1 10:17 - 10:24 (00:06)
4:root pts/0 58.251.76.253 Mon Feb 28 09:51 - 14:22 (04:31)
5:root pts/0 58.251.76.253 Wed Feb 23 16:40 - 17:49 (01:08)
6:root pts/1 58.251.76.253 Fri Feb 18 14:00 - 20:10 (06:09)
7:root pts/0 58.251.76.253 Fri Feb 18 11:39 - 14:33 (02:54)
2.3.2 排序命令 sort、wc、uniq#
sort
:排序
如下默认以开头的第一个字母排序
[root@VM-20-9-centos /]# cat etc/group
root: x:0:
bin: x:1:
daemon: x:2:
sys: x:3:
adm: x:4:
tty: x:5:
disk: x:6:
[root@VM-20-9-centos /]# cat etc/group | sort
adm: x:4:
audio: x:63:
bin: x:1:
cdrom: x:11:
cgred: x:983:
chrony: x:987:
uniq
:重复的数据仅显示一行
[root@VM-20-9-centos /]# last
root pts/1 58.251.76.253 Tue Mar 1 13:44 still logged in
root pts/0 58.251.76.253 Tue Mar 1 10:24 - 14:31 (04:07)
root pts/0 58.251.76.253 Tue Mar 1 10:17 - 10:24 (00:06)
root pts/0 58.251.76.253 Mon Feb 28 09:51 - 14:22 (04:31)
root pts/0 58.251.76.253 Wed Feb 23 16:40 - 17:49 (01:08)
root pts/1 58.251.76.253 Fri Feb 18 14:00 - 20:10 (06:09)
root pts/0 58.251.76.253 Fri Feb 18 11:39 - 14:33 (02:54)
lighthou pts/0 81.69.102.16 Wed Feb 16 00:10 - 00:11 (00:01)
lighthou pts/0 81.69.102.25 Wed Feb 16 00:05 - 00:06 (00:01)
lighthou pts/0 81.69.102.18 Wed Feb 16 00:00 - 00:02 (00:02)
lighthou pts/0 81.69.102.22 Tue Feb 15 23:57 - 23:58 (00:01)
...
[root@VM-20-9-centos /]# last | cut -d ' ' -f 1 | sort | uniq -c
1
67 lighthou
3 reboot
28 root
1 wtmp
wc
:显示某个文件里面有多少字、多少行、多少字符
[root@VM-20-9-centos /]# cat etc/passwd | wc
33 70 1719
输出的三个数字中,分别代表: “行、字数、字符数”
2.3.3 双向重导向 tee
可以将数据流的处理过程中某段讯息存下来,同时输出到屏幕供下个指令继续处理
[root@VM-20-9-centos ~]# ls
[root@VM-20-9-centos ~]# last | tee last.list
root pts/1 58.251.76.253 Tue Mar 1 13:44 still logged in
root pts/0 58.251.76.253 Tue Mar 1 10:24 - 14:31 (04:07)
root pts/0 58.251.76.253 Tue Mar 1 10:17 - 10:24 (00:06)
root pts/0 58.251.76.253 Mon Feb 28 09:51 - 14:22 (04:31)
root pts/0 58.251.76.253 Wed Feb 23 16:40 - 17:49 (01:08)
root pts/1 58.251.76.253 Fri Feb 18 14:00 - 20:10 (06:09)
root pts/0 58.251.76.253 Fri Feb 18 11:39 - 14:33 (02:54)
lighthou pts/0 81.69.102.16 Wed Feb 16 00:10 - 00:11 (00:01)
lighthou pts/0 81.69.102.25 Wed Feb 16 00:05 - 00:06 (00:01)
lighthou pts/0 81.69.102.18 Wed Feb 16 00:00 - 00:02 (00:02)
lighthou pts/0 81.69.102.22 Tue Feb 15 23:57 - 23:58 (00:01)
...
[root@VM-20-9-centos ~]# ls
last.list
[root@VM-20-9-centos ~]# cat last.list
root pts/1 58.251.76.253 Tue Mar 1 13:44 still logged in
root pts/0 58.251.76.253 Tue Mar 1 10:24 - 14:31 (04:07)
root pts/0 58.251.76.253 Tue Mar 1 10:17 - 10:24 (00:06)
root pts/0 58.251.76.253 Mon Feb 28 09:51 - 14:22 (04:31)
root pts/0 58.251.76.253 Wed Feb 23 16:40 - 17:49 (01:08)
root pts/1 58.251.76.253 Fri Feb 18 14:00 - 20:10 (06:09)
root pts/0 58.251.76.253 Fri Feb 18 11:39 - 14:33 (02:54)
lighthou pts/0 81.69.102.16 Wed Feb 16 00:10 - 00:11 (00:01)
lighthou pts/0 81.69.102.25 Wed Feb 16 00:05 - 00:06 (00:01)
lighthou pts/0 81.69.102.18 Wed Feb 16 00:00 - 00:02 (00:02)
lighthou pts/0 81.69.102.22 Tue Feb 15 23:57 - 23:58 (00:01)
...
2.3.4 字符转换命令 tr、join、paste
tr
:可以用来删除一段信息中的文字,或者是进行文字信息的替换,不改变原文件里的数据,只是改变展示出来的数据
[root@VM-20-9-centos ~]# cat fileTest
Line 105: Expected '!==' and instead saw '!=' eqeqeq
Line 115: Expected '!==' and instead saw '!=' eqeqeq
Line 149: Expected '===' and instead saw '==' eqeqeq
Line 154: Expected '===' and instead saw '==' eqeqeq
Line 155: Expected '!==' and instead saw '!=' eqeqeq
Line 166: Expected '===' and instead saw '==' eqeqeq
Line 194: Expected '===' and instead saw '==' eqeqeq
Line 216: Expected '===' and instead saw '==' eqeqeq
Line 262: Expected '!==' and instead saw '!='
[root@VM-20-9-centos ~]# cat fileTest | tr -d '!'
Line 105: Expected '==' and instead saw '=' eqeqeq
Line 115: Expected '==' and instead saw '=' eqeqeq
Line 149: Expected '===' and instead saw '==' eqeqeq
Line 154: Expected '===' and instead saw '==' eqeqeq
Line 155: Expected '==' and instead saw '=' eqeqeq
Line 166: Expected '===' and instead saw '==' eqeqeq
Line 194: Expected '===' and instead saw '==' eqeqeq
Line 216: Expected '===' and instead saw '==' eqeqeq
Line 262: Expected '==' and instead saw '='
[root@VM-20-9-centos ~]# cat fileTest
Line 105: Expected '!==' and instead saw '!=' eqeqeq
Line 115: Expected '!==' and instead saw '!=' eqeqeq
Line 149: Expected '===' and instead saw '==' eqeqeq
Line 154: Expected '===' and instead saw '==' eqeqeq
Line 155: Expected '!==' and instead saw '!=' eqeqeq
Line 166: Expected '===' and instead saw '==' eqeqeq
Line 194: Expected '===' and instead saw '==' eqeqeq
Line 216: Expected '===' and instead saw '==' eqeqeq
Line 262: Expected '!==' and instead saw '!='
join
:两个文件当中,有 "相同数据" 的那一行加在一起,如下两个文件分别是4行和9行,且都有相同的数据,所用join后总共有36行
[root@VM-20-9-centos ~]# cat fileTemp | nl
1 Line 9: Expected a default case default-case
2 Line 20: Expected a 'break' statement before 'case' no-fallthrough
3 Line 30: Expected a 'break' statement before 'case' no-fallthrough
4 Line 48: Expected a default case default-case
[root@VM-20-9-centos ~]# cat fileTest | nl
1 Line 105: Expected '!==' and instead saw '!=' eqeqeq
2 Line 115: Expected '!==' and instead saw '!=' eqeqeq
3 Line 149: Expected '===' and instead saw '==' eqeqeq
4 Line 154: Expected '===' and instead saw '==' eqeqeq
5 Line 155: Expected '!==' and instead saw '!=' eqeqeq
6 Line 166: Expected '===' and instead saw '==' eqeqeq
7 Line 194: Expected '===' and instead saw '==' eqeqeq
8 Line 216: Expected '===' and instead saw '==' eqeqeq
9 Line 262: Expected '!==' and instead saw '!='
[root@VM-20-9-centos ~]# join fileTemp fileTest | nl
1 Line 9: Expected a default case default-case 105: Expected '!==' and instead saw '!=' eqeqeq
2 Line 9: Expected a default case default-case 115: Expected '!==' and instead saw '!=' eqeqeq
3 Line 9: Expected a default case default-case 149: Expected '===' and instead saw '==' eqeqeq
4 Line 9: Expected a default case default-case 154: Expected '===' and instead saw '==' eqeqeq
5 Line 9: Expected a default case default-case 155: Expected '!==' and instead saw '!=' eqeqeq
6 Line 9: Expected a default case default-case 166: Expected '===' and instead saw '==' eqeqeq
7 Line 9: Expected a default case default-case 194: Expected '===' and instead saw '==' eqeqeq
8 Line 9: Expected a default case default-case 216: Expected '===' and instead saw '==' eqeqeq
9 Line 9: Expected a default case default-case 262: Expected '!==' and instead saw '!='
10 Line 20: Expected a 'break' statement before 'case' no-fallthrough 105: Expected '!==' and instead saw '!=' eqeqeq
11 Line 20: Expected a 'break' statement before 'case' no-fallthrough 115: Expected '!==' and instead saw '!=' eqeqeq
12 Line 20: Expected a 'break' statement before 'case' no-fallthrough 149: Expected '===' and instead saw '==' eqeqeq
13 Line 20: Expected a 'break' statement before 'case' no-fallthrough 154: Expected '===' and instead saw '==' eqeqeq
14 Line 20: Expected a 'break' statement before 'case' no-fallthrough 155: Expected '!==' and instead saw '!=' eqeqeq
15 Line 20: Expected a 'break' statement before 'case' no-fallthrough 166: Expected '===' and instead saw '==' eqeqeq
16 Line 20: Expected a 'break' statement before 'case' no-fallthrough 194: Expected '===' and instead saw '==' eqeqeq
17 Line 20: Expected a 'break' statement before 'case' no-fallthrough 216: Expected '===' and instead saw '==' eqeqeq
18 Line 20: Expected a 'break' statement before 'case' no-fallthrough 262: Expected '!==' and instead saw '!='
19 Line 30: Expected a 'break' statement before 'case' no-fallthrough 105: Expected '!==' and instead saw '!=' eqeqeq
20 Line 30: Expected a 'break' statement before 'case' no-fallthrough 115: Expected '!==' and instead saw '!=' eqeqeq
21 Line 30: Expected a 'break' statement before 'case' no-fallthrough 149: Expected '===' and instead saw '==' eqeqeq
22 Line 30: Expected a 'break' statement before 'case' no-fallthrough 154: Expected '===' and instead saw '==' eqeqeq
23 Line 30: Expected a 'break' statement before 'case' no-fallthrough 155: Expected '!==' and instead saw '!=' eqeqeq
24 Line 30: Expected a 'break' statement before 'case' no-fallthrough 166: Expected '===' and instead saw '==' eqeqeq
25 Line 30: Expected a 'break' statement before 'case' no-fallthrough 194: Expected '===' and instead saw '==' eqeqeq
26 Line 30: Expected a 'break' statement before 'case' no-fallthrough 216: Expected '===' and instead saw '==' eqeqeq
27 Line 30: Expected a 'break' statement before 'case' no-fallthrough 262: Expected '!==' and instead saw '!='
28 Line 48: Expected a default case default-case 105: Expected '!==' and instead saw '!=' eqeqeq
29 Line 48: Expected a default case default-case 115: Expected '!==' and instead saw '!=' eqeqeq
30 Line 48: Expected a default case default-case 149: Expected '===' and instead saw '==' eqeqeq
31 Line 48: Expected a default case default-case 154: Expected '===' and instead saw '==' eqeqeq
32 Line 48: Expected a default case default-case 155: Expected '!==' and instead saw '!=' eqeqeq
33 Line 48: Expected a default case default-case 166: Expected '===' and instead saw '==' eqeqeq
34 Line 48: Expected a default case default-case 194: Expected '===' and instead saw '==' eqeqeq
35 Line 48: Expected a default case default-case 216: Expected '===' and instead saw '==' eqeqeq
36 Line 48: Expected a default case default-case 262: Expected '!==' and instead saw '!='
paste
:paste 就要比 join 简单多了,相对于 join 必须要比对两个文件的数据相关 性, paste 就直接“将两行贴在一起,且中间以 [tab] 键隔开”
[root@VM-20-9-centos ~]# paste fileTemp fileTest | nl
1 Line 9: Expected a default case default-case Line 105: Expected '!==' and instead saw '!=' eqeqeq
2 Line 20: Expected a 'break' statement before 'case' no-fallthrough Line 115: Expected '!==' and instead saw '!=' eqeqeq
3 Line 30: Expected a 'break' statement before 'case' no-fallthrough Line 149: Expected '===' and instead saw '==' eqeqeq
4 Line 48: Expected a default case default-case Line 154: Expected '===' and instead saw '==' eqeqeq
5 Line 155: Expected '!==' and instead saw '!=' eqeqeq
6 Line 166: Expected '===' and instead saw '==' eqeqeq
7 Line 194: Expected '===' and instead saw '==' eqeqeq
8 Line 216: Expected '===' and instead saw '==' eqeqeq
9 Line 262: Expected '!==' and instead saw '!='
2.3.5 分区命令 split
split
:可以将一个大文件按文件大小或行数来分区为小文件
如下将fileTest按每2行分成几个小文件,总共有9行,可以分为5个文件,fileSplitaa、fileSplitab、fileSplitac、fileSplitad、fileSplitae
[root@VM-20-9-centos ~]# cat fileTest
Line 105: Expected '!==' and instead saw '!=' eqeqeq
Line 115: Expected '!==' and instead saw '!=' eqeqeq
Line 149: Expected '===' and instead saw '==' eqeqeq
Line 154: Expected '===' and instead saw '==' eqeqeq
Line 155: Expected '!==' and instead saw '!=' eqeqeq
Line 166: Expected '===' and instead saw '==' eqeqeq
Line 194: Expected '===' and instead saw '==' eqeqeq
Line 216: Expected '===' and instead saw '==' eqeqeq
Line 262: Expected '!==' and instead saw '!='
[root@VM-20-9-centos ~]# split -l 2 fileTest fileSplit
[root@VM-20-9-centos ~]# ls
fileSplitaa fileSplitab fileSplitac fileSplitad fileSplitae fileTemp fileTest last.list
[root@VM-20-9-centos ~]# cat fileSplita*
Line 105: Expected '!==' and instead saw '!=' eqeqeq
Line 115: Expected '!==' and instead saw '!=' eqeqeq
Line 149: Expected '===' and instead saw '==' eqeqeq
Line 154: Expected '===' and instead saw '==' eqeqeq
Line 155: Expected '!==' and instead saw '!=' eqeqeq
Line 166: Expected '===' and instead saw '==' eqeqeq
Line 194: Expected '===' and instead saw '==' eqeqeq
Line 216: Expected '===' and instead saw '==' eqeqeq
Line 262: Expected '!==' and instead saw '!='
2.3.6 减号 - 的用途
- 点赞
- 收藏
- 关注作者
评论(0)