Linux之旅--Bash

来源:互联网 发布:python concat函数 编辑:程序博客网 时间:2024/06/06 08:46


前言


Shell 是操作系统内置的,用于和内核(Kernal)通信,管理硬件的命令行。

内核,是真正在控制硬件工作的,有CPU进程、内存管理、硬盘输入输出等工作,内核是受到保护的,我们只能通过操作系统提供的API来与内核通信。

Shell,KDE,Application等提供了,通过操作系统API于内核通信的能力。

Linux 默认的 Shell 是 Bash,这是在 Sh 这个 Shell 的基础上发展来的。我们可以通过 /etc/shells 查看 操作系统支持的 Shell 。

用户默认登录取得的 Shell 写在 /etc/passwd 的最后一个字段。



为什么学习 Bash


命令行界面的 Shell 在各大 Distribution 都一样;

远程管理时命令行界面速度较快;

Shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 Shell 编写的。


变量


echo、unset、set、declare、env、export、source、read、$?、变量内容、alias、unalias、\、'、"、ulimit

echo:打印变量,例如 echo $HOME

unset:取消变量赋值

set/declare:显示环境变量和用户自定义变量,declare 可以定义变量类型,默认是字符串;declare -x 是定义环境变量,和export 功能一样

env/export:显示环境变量,不显示用户自定义变量;export 可以把自定义变量 变成环境变量

source:读取并执行文件中的命令,常用来加载环境变量;如果以 Shell 命令的方式执行 加载环境变量,则只会影响 子Shell,不能影响当前 Shell ,所以用source

read:读取键盘输入

$?:显示上一个命令的执行接过,0代表成功,其他数字代表失败

alias:命令别名,比如 ll 就是别名,type ll 可以看到,ll is aliased to `ls -l --color=auto' 

\:转义,比如 \r 回车 \n 换行,在 Shell 输入命令时,可以输入 \回车,就把回车转义了,可以分多行输入命令

'和'':单引号和双引号,变量赋值时,可以用,单引号里面只是纯粹的字符,双引号里面可以保护变量

ulimit:这里有个实战,http://blog.csdn.net/puma_dong/article/details/45001517

变量内容的删除、替换:是一些需要记忆的符号操作,比如,${变量#关键字},更多符号:#、##、%、%%、/、//等


变量设定方式:



操作环境


路径与命令查找顺序




环境配置文件


默认系统会有一些环境配置文件的存在,让 bash 在启动时直接读取这些配置文件,以规划好 bash 的工作环境。这些配置文件可以分为全体系统的配置文件以及用户个人偏好配置文件。

全体系统的配置文件:/etc/profile,/etc/profile.d/*.sh 会在这个文件的末尾执行

用户个人偏好配置文件:



数据流重定向



2>&1:标准输出和错误输出,都以覆盖的方式进行定位,例如,/bin/bash xx.sh > /dev/null 2>&1


管道命令


在每个管道后面接的第一个数据必定是“命令”,而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是“管道命令”,例如less,more,grep,tail,而ls cp mv就不是管道命令,也就是说:


cut、grep、sort、wc、uniq、tee、tr、col、join、paste、expand、split、UNIX2

cut:针对行分析,例如 echo $PATH | cut -d ':' -f 3,5  把$PATH 的值,以:为分隔符,取出第3和5列

grep:针对行分析,过滤字符串,常用于文件过大时,不适合用 vim 打开

sort:排序,cat /etc/passwd | sort -t ':' -k 3,用第三列排序

wc:统计,就像SQL中的group

uniq:去重

tee:双向重定向,例如,last | tee last.list | cut -d ':' -f 1

tr:字符转换命令,例如,last | tr '[a-z]' '[A-Z]' 小写换成大写; cat /etc/passwd | tr -d '\r' 将输出信息中的回车去掉

col:经常被用于将 man page 转存为纯文本文件以方便查阅,例如,man grep | col -b > grep.man

join/paste:文件联合操作

expand:就是将tab转成空格键,比较一下有没有expand的异同即可 grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 6 - | cat -A

split:文件切割命令

-:一般来说,如果需要 stdout/stdin,但偏偏又没有文件,有的只是一个-,那么这个-就会被当成 stdin 或 stdout

0 0
原创粉丝点击