Linux shell介绍

shell是文字接口

第一个流行的shell 是由StevenBourne 发展出来的,为了纪念他所以就称为Bourne shell ,或直接简称为sh !
Bourne Again SHell (简称bash) ,这个 Shell 是Bourne Shell 的增强版本,也是基准于GNU 的架构下发展!

环境

指令

执行:相对路径(./ls),绝对路径(/bin/ls)
别名:alias ll='ls -l',unalias ll,alias 查看
内建指令:shell提供的指令,builtin cd 执行shell的cd,而不是外部cd; type -a cd
搜索过程:不是绝对路径,不是相对路径,不是别名,不是内建命令,通过环境变量$PATH来查找命令,没有返回not found

登录的提示信息

cat /etc/issue #终端机接口 (tty1 ~ tty6) 登入的时候
cat /etc/issue.net #elnet 这个远程登录程序登入的时候
cat /etc/motd #您想要让大家都知道的讯息, 那么可以将讯息加入/etc/motd 里面去!

配置文件

login shell

启动 login shell 读取的顺序
	/etc/profile  这是系统整体的设定,最好不要修改这个文件
	~/.bash_profile  颜色、语系、ls 指令别名等等,后三个可以个人设定
	~/.bash_login 
	~/.profile

non-login shell

已经登录后启动的 shell,仅会读取~/.bashrc
~/.bashrc 会呼叫/etc/bashrc 及`/etc/profile.d/*.sh`

source

配置文件重新写入当前环境
source ~/.bashrc #这两个指令是一样的!
. ~/.bashrc #神奇

常见文件

/etc/man_db.conf  规定了下达man 的时候,该去哪里查看数据的路径设定!
~/.bash_history 历史命令就记录在这里
~/.bash_logout  注销bash 后,系统再帮我做完什么动作后才离开

符号

通配符

* :任意多个字符
? :『一定有一个』任意字符
[ ][abcd] 代表『可能是 a, b,c, d 任何一个』
[-][0-9] 代表 09 之间的所有数字
[^][^abc]有一个字符,但非 a, b, c

特殊字符

#  批注符号:在后的数据均不执行
\  转义字符
|  管线 (pipe):两个命令的界定;
;  连续指令下达分隔符:连续性命令的界定 
~  用户的家目录
$  变量
&  指令变成后台工作
!  『非』 not 的意思!
/  目录符号
>, >>  数据输出导向,分别是『取代』与『累加』
<, `<<` 数据输入导向 
' '   单引号,纯文本)
" "  具有变量置换的功能
\  \  中间为可以先执行的指令,亦可使用 $( )
( ) 子shell环境,其中执行的命令不会影响当前shell
{ } 组合成一个命令块

指令

#基本
cat /etc/shells    #系统的包含的shell
cat /etc/passwd    #登录默认的shell
cat ~/.bash_history #历史指令,『上下键』查找
type -a ls 

#别名
alias lm='ls -al' #单引号

#通配符
ls -l /usr/bin/X* #多少X开头

#别名
alias #查看别名
alias lm='ls -al | more' #别名
unalias lm #删除别名

#历史命令
history #历史指令
history 3 #最近3条指令
history -w #会将历史纪录写入 ~/.bash_history 当中!
!66 #执行第 66 笔指令
!! #执行上一个指令,本例中亦即 !66
!al #执行最近以 al 为开头的指令(上头列出的第 67 个)

#standard output 与standard error output
1. 标准输入 (stdin) :代码为 0 ,使用 <`<<`2. 标准输出 (stdout):代码为 1 ,使用 >>>3. 标准错误输出(stderr):代码为 2 ,使用 2>2>>find /home -name .bashrc > list_right 2> list_error #将 stdout 与 stderr 分存到不同的文件去
find /home -name .bashrc 2> /dev/null #,将错误的数据丢弃,屏幕上显示正确的数据
cat > catfile #:利用 cat 指令来建立一个文件,键盘输入文件
cat > catfile < ~/.bashrc #复制bashrc
cat > catfile `<<` "eof" #输入这关键词,立刻就结束而不需要输入 [ctrl]+d


# ; , &&, ||
sync; sync; shutdown -h now #同行指令用分号(;) 来隔开
cmd1 && cmd2 
	#1. 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。
	#1. 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
cmd1 || cmd2
	#1. 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。
	#2. 若 cmd1 执行完毕且为错误 ($?≠0),则开始执行 cmd2。
ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe #/tmp/abc 是否存在,但就是要建立 /tmp/abc/hehe 文件

#管线
前面一个指令产生的信息,交给后面的指令处理。
echo ${PATH} | cut -d ':' -f 5 #是以『 : 』作为分隔,第5个的信息
last | grep 'root' #有出现 root 的那一行就取出来;
last | grep -v 'root' #没有 root 的就取出


#排序
cat /etc/passwd | sort #以第一个字母进行排序
cat /etc/passwd | sort -t ':' -k 3 #以第三栏来排序

#去除重复
last | cut -d ' ' -f1 | sort | uniq #last 将账号列出,仅取出账号栏,进行排序后仅取出一位
last | cut -d ' ' -f1 | sort | uniq -c #统计每个人的登入总次数

#统计字数行列
cat /etc/man_db.conf | wc #『行、字数、字符数』

#分流
last | tee last.list | cut -d " " -f1 #last 的输出存一份到 last.list 文件中
ls -l / | tee -a ~/homefile | more #tee 后接的文件会被覆盖,若加上 -a 这个选项则能将讯息累加。

#字符转换命令
#tr
last | tr '[a-z]' '[A-Z]'#所有的小写变成大写字符:
cat /etc/passwd | tr -d ':' #将冒号 (:) 删除
#col
cat /etc/man_db.conf | col -x | cat -A | more #[tab] 按键会被取代成为空格键,
#join
head -n 3 /etc/passwd /etc/shadow #两个文件前后排在一起
join -t ':' /etc/passwd /etc/shadow | head -n 3 #第一字段相同者整合成一列,不同部分排在相同行
#paste
paste /etc/passwd /etc/shadow #将 /etc/passwd 与 /etc/shadow 同一行贴在一起
expand [tab] 按键转成空格键啦
cat -A #显示特殊字符

#文件切分
cd /tmp; split -b 300k /etc/services services #六百多K的文件,若想要分成 300K 一个文件,以xxxaa, xxxab, xxxac 等方式来建立小文件的
cat services* >> servicesback #将上面的三个小文件合成一个文件,档名为 servicesback


变量

echo $PATH #查看,$后为变量 
echo ${PATH}
myname=VBird  #自定义变量
PATH="$PATH":/home/bin 或 PATH=${PATH}:/home/bin #增加变量
export  xxx   #临时设置环境变量
unset myname #取消变量
规则:
	『=』紧贴
	不能数字开头
	『""』一定是字符串
	『''』内引用变量可输出
	通常大写
	()内先执行

#环境变量
env #所有环境变量
l
set #观察所有变量(含环境变量与自定义变量)
PS1='[\u@\h \w \A #\#]\$ ' # 修改显示的内容 [root@VM-8-4-centos ~ 20:14 #52]
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' #默认
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' #全路径

#键盘读入
read -p "Please keyin your name: " -t 30 named #提示使用者 30 秒内输入自己的大名,将该输入字符串作为名为 named 的变量内容

#变量类型
declare -i sum=100+300+50 #让变量 sum 进行 100+300+50 的加总结果
declare -x sum #将 sum 变成环境变量
declare -r sum #让 sum 变成只读属性,不可更动!

#数组
var[1]="small min"
var[2]="big min"
var[3]="nice min"
echo "${var[1]}, ${var[2]}, ${var[3]}"

#限制资源
ulimit

#删除
path=${PATH}
echo ${path#/*local/bin:} #代表要被删除的部分,由于 # 代表由前面开始删除,所以这里便由开始的 / 写起。
  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值