Linux自由学习(三)

《鸟哥》

Shell and Shell scripts(BASH)

命令别名和历史命令

alias,unalias
举个栗子:一页一页查看很长的文档
原来是要输这样的命令才行ls -al | more,现在只需要alias lm='ls -al | more';
再来个栗子:rm可能误删文档,可以设置成-i选项询问你是否删除
alias rm='rm -i'
想看一下自己设置了哪些别名,alias一下就好啦:
在这里插入图片描述
对了,之前的vivim还是不一样的额,那就把它设置成一样的吧:alias vi='vim';
如果不想要了,那就取消掉unalias lm

history

history太长了,利用前面的重命名操作简化一下吧:
在这里插入图片描述
列出所有history&& 最近3条
在这里插入图片描述
把当前历史记录写到histfile里面
在这里插入图片描述
his的几个实际作用–运行历史命令
在这里插入图片描述

BASH操作环境

运行一下/bin/lsls会发现不一样的地方:
在这里插入图片描述
因为 /bin/ls 是直接取用该命令来下达,而 ls 会因为『alias ls='ls --color=tty' 』这个命令别名而先使用。
通过type命令也可以查到命令的运行顺序啦:
在这里插入图片描述
观察一下echo的运行顺序:
在这里插入图片描述
可以看到,别名是优先级最高的,内建次之,最后才是$PATH

BASH的进站欢迎界面配置

/etc/issue, /etc/motd
在这里插入图片描述
可以看到里面有\n \l这种字符,肯定有猫腻,他们是啥意思,查表:

					issue 内的各代码意义
\d 本地端时间的日期;
\l 显示第几个终端机接口;
\m 显示硬件的等级 (i386/i486/i586/i686...);
\n 显示主机的网络名称;
\o 显示 domain name;
\r 操作系统的版本 (相当于 uname -r)
\t 显示本地端时间的时间;
\s 操作系统的名称;
\v 操作系统的版本。

做个栗提拔:通过配置得到以下的进站画面

Ubuntu release 16.04.6 
Date: 2009-02-05 17:29:19
Kernel 2.6.18-128.el5 on an i686
Welcome!

heihei写个名字玩玩吧:
在这里插入图片描述
/etc/motd这个玩意就是给telnet远程得时候用的,登录的时候就不会显示上面那个了,会显示这个文件里的内容哦
编辑一下随便写写吧:
在这里插入图片描述

BASH的环境配置

我们常用到的环境变量就在环境配置文件中,bash启动的时候会读取,所以我们就能使用环境变量啦!
注意,前面我们自定义的别名啥的,重启就没有了哦,除非你把它配置在环境配置文件里

login和non-login SHELL
在这里插入图片描述
这俩有啥区别呢:login吧需要完整的登录过程,而non-login就是不需要登录了,在已经登录的基础上开个新的,没有登录过程,如上图,在已经登录的界面再启动终端去bash就是运行的子程序了,所在环境也就是non-login shell的环境

/etc/profile
每个登录都会读取的配置文件,配置整体的环境(不要轻易修改
该配置的主要变量有:

  • PATH
  • MAIL
  • USER
  • HOSTNAME
  • HISTSIZE
    它还会呼叫外部的配置数据,比如:
  • etc/inputrc:热键、声音等等
  • etc/profile.d/*.sh:颜色、别名等
  • etc/sysconfig/i18n:语系的重要文件LANG
    bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile

源自鸟哥的图:
在这里插入图片描述
整个login shell的读取过程,

实线的的方向是主线流程,虚线的方向则是被呼叫的配置文件!从上面我们也可以清楚的知道,在 CentOS 的 login shell 环境下,最终被读取的配置文件是『 ~/.bashrc 』这个文件喔!所以,你当然可以将自己的偏好配置写入该文件即可。

source:读入环境配置文件
可以读取配置文件 但是不注销登录source + 文件名

bashrc(non-login shell 会读)

其他的相关配置:

  • /etc/man.config:man的时候去哪里看路径配置
  • ~/.bash_history:读历史命令
  • ~/.bash_logout:登出的时候系统要做些什么
终端环境配置

stty列出环境中的按键列表:
在这里插入图片描述
这个上面的^Ctrl的意思。有几个比较重要的:

eof   : End of file 的意思,代表『结束输入』。
erase : 向后删除字符,
intr  : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;
kill  : 删除在目前命令列上的所有文字;
quit  : 送出一个 quit 的讯号给目前正在 run 的程序;
start : 在某个程序停止后,重新启动他的 output
stop  : 停止目前屏幕的输出;
susp  : 送出一个 terminal stop 的讯号给正在 run 的程序

set配置命令输入输出环境
在这里插入图片描述
一些bash默认的组合键汇总

Ctrl + C 终止目前的命令
Ctrl + D 输入结束 (EOF),例如邮件结束的时候;
Ctrl + M 就是 Enter 啦!
Ctrl + S 暂停屏幕的输出
Ctrl + Q 恢复屏幕的输出
Ctrl + U 在提示字符下,将整列命令删除
Ctrl + Z 『暂停』目前的命令

利用通配符来玩一下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
bash环境中的特殊符号:

# 批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
\ 跳脱符号:将『特殊字符或通配符』还原成一般字符
| 管线 (pipe):分隔两个管线命令的界定(后两节介绍);
; 连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
~ 用户的家目录
$ 取用变量前导符:亦即是变量之前需要加的变量取代值
& 工作控制 (job control):将命令变成背景下工作
! 逻辑运算意义上的『非』 not 的意思!
/ 目录符号:路径分隔的符号
>, >> 数据流重导向:输出导向,分别是『取代』与『累加』
<, << 数据流重导向:输入导向 (这两个留待下节介绍)
'' 单引号,不具有变量置换的功能
"" 具有变量置换的功能!
两个『 ` 』中间为可以先运行的命令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的组合!

数据流重导向

根据我自己浅薄的理解,大概就是文件被读取以后,作为标准输入传到了命令,如果执行错误的话,就返回标准错误;若执行成功,就返回标准输出到文件(一般就是显示在屏幕上)在这里插入图片描述
输入输出传送的字符是这样的:

标准输入  (stdin) :代码为 0 ,使用 < 或 << ;
标准输出  (stdout):代码为 1 ,使用 > 或 >> ;
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

所以,

  • 1>:覆盖【正确数据】输出
  • 1>>:添加【正确数据】输出
  • 2>:覆盖【错误数据】输出
  • 2>>添加【错误数据】输出

一般用户运行find / -name testing
在这里插入图片描述
这个意思是:在/home下寻找名字叫做bashrc的文件,找到了就输出到list_right,找不到就继续输出到了list_error,这个更改的输出了,所以就没有输出到list_error了。
在这里插入图片描述
/dev/null 黑洞装置
可以把错误丢到黑洞里去(PS:人生也能有黑洞该多好,做的错事都可以扔进去)

find /home -name .bashrc 2> /dev/null

要把命令数据都写到List里面的话,

find /home -name .bashrc > list 2> list  <==错误,次序错乱
find /home -name .bashrc > list 2>&1     <==正确
find /home -name .bashrc &> list         <==正确

标准输入:<与<<
在这里插入图片描述
这样的话,98bashrc的内容原原本本的写入到了catfile里面:
在这里插入图片描述
<< eof
在这里插入图片描述
命令行的判断依据:;, &, ||

  • command ; command
    举个栗子:在关机的时候我希望可以先运行两次 sync 同步化写入磁盘后才 shutdown 计算机
sync; sync; shutdown -h now

在这里插入图片描述
看个梨子。首先呢看/tmp/abc存在不,好像不存在哦 。那就创建一个abc的目录,然后查看里面的内容(现在肯定是空的)接着建立一个叫hehe的文件,完了以后呢,再看abc里面有没有东西,hei果然有个hehe了。
在这里插入图片描述
如果想直接如果不存在就建一个的话,就用||符号:
在这里插入图片描述
梨子:不知道abc存不存在,但是要在abc下面新建hehe,存在的话就直接建,不存在就创建一个:
在这里插入图片描述
上面粒子的思路图大概如此:
在这里插入图片描述

做个提姆吧:
以 ls 测试 /tmp/vbirding 是否存在,若存在则显示 “exist” ,若不存在,则显示 “not exist”!
在这里插入图片描述
假设判断式的公式:
command1 && command2 || command3

管道命令

利用less命令前后翻页查看比较方便:
在这里插入图片描述
管道意思很好理解,就像一根根的管子接起来,第一根流出去的就是第二根流进去的,以此类推,管道这个名字取得真是妙不可言!

提取命令:cut/grep
cut:
-d后面接分隔字符,-f后面接取出第几段
在这里插入图片描述
cut -c 12-取每行第12个字符以后的:
原来的:
在这里插入图片描述
处理过后的:
在这里插入图片描述
要是想要12-20的字符当然也可以:cut -c 12-20
来个梨子:
近期用户登录的记录是这样的,
在这里插入图片描述
但是,我只想知道用户名就可以了,用空格来分割,
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值