执行上一条命令 !!
[root@elk yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@elk yum.repos.d]# !!
ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
执行历史命令的第几个 !4
[root@elk yum.repos.d]# !4
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c3:08:d0 brd ff:ff:ff:ff:ff:ff
inet 10.30.59.203/25 brd 10.30.59.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::59d4:e731:45bc:4103/64 scope link noprefixroute
valid_lft forever preferred_lft forever
!pw 最近执行历史命令pw 字母开头的命令
[root@elk yum.repos.d]# !pw
pwd
/etc/yum.repos.d
别名 alias 可以通过过这个命令吧常用的,且长的命令领取名使其简单易记。()
unalias命令解除别名功能。
alias 直接执行可以看到目前系统预设的别名。
永久实现别名 ~/.bashrc
[root@elk yum.repos.d]# alias vi='vim'
[root@elk yum.repos.d]# unalias vi
[root@elk yum.repos.d]# 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 | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
通配符 可以用*来匹配零个或多个字符, 用? 匹配一个字符
[root@elk ~]# mv /etc/yum.repos.d/CentOS-*
[root@elk ~]# touch 2.txt 3.txt 123.txt 23.txt
[root@elk ~]# ls -d ?.txt
1.txt 2.txt 3.txt
输入 符号 < 程序从中读取数据 ,和cat类似
[root@elk ~]# wc -l < 1.txt
2
[root@elk ~]# wc -l 1.txt
2 1.txt
[root@elk ~]# cat < 1.txt
131
1231
输出 符号 > 向文件输入文件。相当于编辑 但是会覆盖文件内容
[root@elk ~]# cat < 1.txt
131
1231
[root@elk ~]# echo 'end tobe ' > 1.txt
[root@elk ~]# cat 1.txt
end tobe
错误定向 2> 将报错的 信息输入到文件中
[root@elk ~]# command 2> 2.txt
追加定向 >> 追加程序到文件的下一行
[root@elk ~]# echo '123' >> 1.txt
[root@elk ~]# cat 1.txt
end tobe
123
作业控制
Ctrl + c 终止程序 — fg 恢复程序
Ctrl + z 停止程序 ---- bg 后台运行
(操作详解 : 先进入1.txt 编辑文件然后停止编写文件。 fg : 恢复文件 。 jobs)
[root@elk ~]# vi 1.txt
[1]+ 已停止 vi 1.txt
[root@elk ~]# fg
vi 1.txt
[1]+ 已停止 vi 1.txt
[root@elk ~]# jobs
[1]+ 已停止 vi 1.txt
(由于 vi 不支持后台运行换一个命令,)
[root@elk ~]# vmstat 1 > /tmp/1.log
^Z
[1]- 已停止 vi 1.txt
[2]+ 已停止 vmstat 1 > /tmp/1.log
[root@elk ~]# jobs
[1]- 已停止 vi 1.txt
[2]+ 已停止 vmstat 1 > /tmp/1.log
[root@elk ~]# bg 2
[2]+ vmstat 1 > /tmp/1.log &
[root@elk ~]# jobs
[1]+ 已停止 vi 1.txt
[2]- 运行中 vmstat 1 > /tmp/1.log &
[root@elk ~]# fg vmstat 1 > /tmp/1.log
^C[root@elk ~]# jobs
[1]+ 已停止 vi 1.txt
[root@elk ~]# fg vi 1.txt
vi 1.txt
[root@elk ~]# jobs
变量的 shell的预设变量都是大写的。变量就是用简单打的字符串来替代默写具有特殊意义的设定技术局
[root@elk ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@elk ~]# echo $HOME
/root
[root@elk ~]# echo $pwd
[root@elk ~]# echo $PWD
/root
[root@elk ~]# echo $LOGNAME
root
env 。可列出系统预设的全部系统变量。
[root@elk ~]# env
XDG_SESSION_ID=96
HOSTNAME=elk
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.30.58.105 49964 22
SELINUX_USE_CURRENT_RANGE=
OLDPWD=/root
SSH_TTY=/dev/pts/1
USER=root
set与env 相似可以输出环境变量
[root@elk ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
COLUMNS=117
DIRSTACK=()
EUID=0
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
set 不仅可以显示系统预设,也可以显示用用户自己定义的变量
[root@elk ~]# myname=Jinfu
[root@elk ~]# echo $myname
Jinfu
[root@elk ~]# set |grep myname
myname=Jinfu
虽然可以自定义变量,但是该变量只是能在当前shell中生效 。
echo $myname
Jinfu
[root@elk ~]# bash
[root@elk ~]# echo $myname
[root@elk ~]# exit
exit
[root@elk ~]# echo $myname
Jinfu
允许系统内所有用户,可以使用自己定义的变量
[root@elk ~]# echo 'export myname=Jinfu' >> /etc/profile
[root@elk ~]# source !$
source /etc/profile
[root@elk ~]# bash
[root@elk ~]# echo $myname
Jinfu
[root@elk ~]# exit
exit
(1)变量的 格式 a=b 不允许有空格。
(2)有特殊字符空格也是要加加单引号。变量中存在单,双引号时要外层就要出现另一种引号。
[root@elk ~]# two="I',m your friend"
[root@elk ~]# echo $two
I',m your friend
(3)大写,小写字母,下划线, 数字组成。
变量中需要用到命令也可以用反引号。
[root@elk ~]# one=`pwd`
[root@elk ~]# echo $one
/root
变量内容可以累加其他变量内容用双引号。
[root@elk ~]# one="$LOGNAME"fu
[root@elk ~]# echo $one
rootfu
bash
[root@elk ~]# yum -y install pstrall
[root@elk ~]# pstree |grep bash
|-login---bash
|-sshd---sshd---bash-+-grep
[root@elk ~]# bash
[root@elk ~]# pstree |grep bash
|-login---bash
|-sshd---sshd---bash---bash-+-grep
在bash 中使用变量
[root@elk ~]# one=123
[root@elk ~]# echo $one
123
[root@elk ~]# bash
[root@elk ~]# echo $one
[root@elk ~]# exit
[root@elk ~]# export one
[root@elk ~]# bash
[root@elk ~]# echo $one
123
PS1 可以更改 [root@elk ~]# 修改内容 PS1="[\u@\h \W]\t \$
[root@elk ~]# vi /etc/bashrc
.......
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\t \\$ "
.......
[root@elk ~]00:00:26$ source /etc/bashrc
参数:
\d :代表日期,格式为weekday month date,例如:“Mon Aug 1”
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
# :下达的第几个命令
$ :提示字符,如果是root时,提示符为:# ,普通用户则为 :$
脱义字符 \ (可以取消特殊字符本有的命令)
[root@elk ~]04:49:58 # ls -d test\*
ls: 无法访问test*: 没有那个文件或目录
cut用来截取某一字段的 。
格式: cut -d ‘分隔符’ -c/-f n
解析:
(1)-d 后面加文件内容的分割符 ,分割符要用单引号括起来
(2)-c 第几个字符 c后面的n可以是一个数字 ,一个区间,或者几个数字。
(3)-f 第几哥区域 f后面与数字之间的空格可以不写。
[root@elk ~]00:45:24 # cat /etc/passwd |cut -d ':' -f 1|head -5
root
bin
daemon
adm
lp
排序 sort 格式: sort -t 分隔符 kn1,n2 -n/-r/-u
(1) t 后面加分隔符
(2) kn1,n2 表示一个区间
(3) -n 表示纯数字
(4) -r 反向排序
(5) -u 表示去重复
sort 后面不加参数从首字符按 ASCII 值进行比较,后按照升序排序
[root@elk ~]04:40:51 # head -n3 /etc/passwd |sort
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
wc 用于统计文件的行数( -l ),字符数( -m ),词数 ( -w )。
只输入wc时按行数,字符数,词数的顺序打印出古来
[root@elk ~]16:36:53 # wc /etc/passwd
20 28 873 /etc/passwd
unip 删除重复的行 。 -c常用 表示统计重复的行数,并把行数写在前面。
[root@elk ~]17:29:53 # cat !$
cat /tmp/cdpp
aaaac
yes no true fales
yes no true fales
yes no true fales
one two trees
[root@elk ~]17:30:00 # cat /tmp/cdpp| uniq -c
1 aaaac
3 yes no true fales
1 one two trees
tee 和 重定向一样会覆盖源文件已有的内容。有一点不同就是会吧输出的内容打印出来。
[root@elk ~]18:08:09 # echo 'aaaaaa' |tee /tmp/cdpp
aaaaaa
[root@elk ~]18:08:36 # cat !$
cat /tmp/cdpp
aaaaaa
tr 替换特殊字符,去重,删除,改大小写。
[root@elk ~]19:05:10 # cat /tmp/cdpp |tr '[a-z]' '[A-Z]'
AAAAAA
特殊字符 ;(可以同时执行多条命令), [] (可以代替字符组的任何一个字符) ,&& 前一个执行完在执行后面的 , || 只执行一个