liunx shell基础

执行上一条命令 !!

[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

特殊字符 ;(可以同时执行多条命令), [] (可以代替字符组的任何一个字符) ,&& 前一个执行完在执行后面的 , || 只执行一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值