bash的功能
- 历史命令
- 命令补全与文件补全 一个字母后是命令补全 2 个字母是文件补全
- 别名
- shell脚本、
- 通配符
使用命令 type 查询 命令是是否为bash 的内置命令
[root@ds ~]# type cd
cd is a shell builtin
[root@ds ~]# type locate
locate is hashed (/bin/locate)
内置命令 有 cp cd ls
变量
unset 命令取消设置的命令
tips: 父进程设置的变量子进程是不存在的无法使用的
父进程的环境变量子进程是可以使用的
特殊符号
“ “ 双引号中的特殊符号可以保留 例如 PATH=”$PATH”:/root` 反引号中可以填入命令 例如 PATH="$PATH":
ls -l <br />tips:我们一般都是用 $( ls -l ) 不使用
ls-l`
env 命令查询所有的环境变量
set 查询所有的变量 包括环境变量
几个特殊的变量
- PATH环境变量 echo $PATH
- PSI 变量 echo $PS!
- 语系变量 locale 命令
系统默认的语系 放在 /etc/locale.conf
linux 终端是无法显示中文这样复杂的编码文字的 设置了中文也没用
想要中文的话需要安装一些中文界面的软件
位置变量 $? $1 $2 $3
echo $?
export 将自定义变量 转化为 环境变量
①export + 变量ID
myname=ds
export myname
② export 后边不跟 显示所有的环境变量
read 命令 人机交互输入命令
read -p “pelase input word “ -t 30 name
-p 提示 信息 -t 等待30s
输入的内容 就是变量name 的内容
declare 命令 声明变量类型
declare 啥不跟 跟set命令 一样
declare -x myname
把myname 设置为环境变量
declare -i sum=100+200+300
默认输出 sum=100+200+300 结果还是100+200+300
因为 linux 默认变量内容为字符串
声明为整数之后 就会显示出 600 linxu 默认的数值运算之能到整数
所以 1/3=0 !!
还有数组 类型 以及别的 你可以
declare —help
ulimit 限制用户资源的 比如开启的文件数 cpu的使用时间
ulimit —help 查看
命令别名
alias unalias 设置、取消
history 历史命令
bash操作环境
1.命令查找顺序
绝对/相对路径 —> alias —> bash内置命令 —> PATH
例子 ls 有颜色 /bin/ls 没有颜色
因为 默认的 ls 加了别名
2.bash的登陆与欢迎信息
/etc/issue /etc/motd
本地终端 | 远程登录
直接去看配置文件
3.bash 加载过程
我们的Bash加载过程 分为 login shell 和 non-login shell
这两个 加载的配置文件是不一样的
/etc/profile 这个文件是 login shell 文件会读取的
然后会调用一系列的文件 和脚本 来定义 你的字符 别名变量等内容
然后回去读取
~/bash.profile
~/.bash_login
~/.profile
.bashrc 这个文件 是 non-login shell 会读取的
只会读取这个文件 这个文件 会调用 /etc/bashrc文件
这个文件定义了命令提示符 如果你的命令提示符无法正常显示
就是你把这个文件给删除了
特殊的文件
~/.bash_logout 这个是注销bash之后系统帮我做完什么之后在离开
数据流 重定向
标准输入 代码0 表示 < << 覆盖|追加
标准输出 代码1 表示 > >> 同理
标准错误输入 代码2 使用 2> 2>>
使用范例
find /home -name .bashrc > list_right 2> list_error
#将正确和错误信息 分开
例2
find /home -name .bashrc 2> /dev/null
#把错误的信息 丢掉只显示正确输出的信息到屏幕上
要求: 将正确和错误数据都写入一个文件中
1)find /home -name .bashrc > list 2> list
2)find /home -name .bashrc 2>&1 list
3) find /home -name .bashrc >& list
第一种写法 是错误的 因为他会让正确的和错误的交叉写入配置文件中
不是原来格式的输出信息 会造成次序的错乱
第2和3中 是正确的 我们一般使用 2>&1 的形式
#这个可以这么理解 吧错误信息转为正确信息
同理 也有把正确信息 转为错误信息 1>&2
例子:
[root@ds ~]# echo dsdsds 1>&2
dsdsds
[root@ds ~]# echo dsdsds 2> /dev/null 1>&2
[root@ds ~]# echo dsdsds 2> /dev/null
命令执行判断的依据
; && ||
例子:
ls /root/ds || mkdir /root/ds && touch /root/ds/ss
管道命令
1.管道符只会 处理标准正确输出的命令 不会处理错误输出的命令
我们可以使用上边的 2>&1 来吧错误命令转化为 标准正确输出命令 就可以识别
2.选取命令
cut grep
cut
例子:
[root@ds ~]# echo ${PATH} | cut -d ':' -f 5
/usr/sbin
以: 为分隔符 取出第5段的内容
# -d 指定分隔符
#-f 取出第几段 和 -d 配合使用
export | cut -c 12-
#取得12个字符之后的内容
export | cut -c 12-20
#取得12-20个字符的内容
grep
选项 -n -i -v 输出行号|忽略大小写|取反
3.排序命令
sort wc uniq
sort
-n -k -t 按数字 | 哪个区间 | 分隔符
[root@ds ~]# cat /etc/passwd | sort -t ':' -k 3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
吧第三段按照数字的大小排序 这个文件下
wc
默认显示 行 字数 字符数
对应 选项 -l -w -m
双向从定向 tee
选项 -a
不加-a 就是 > 加了就是 >>
例子:
cat /etc/passwd | grep root | tee -a ./testhome | more
#保存一份在使用more
4.字符转换命令
tr col join paste ecpand
有需要自己查看 不在详解
5.划分命令 split
6.参数代欢 xargs
cat /etc/passwd | cut -d ‘:’ -f 1 | head -n 3 | xargs id
#id命令只能一次接受一次参数 我们需要吧参数分隔开 一个给id一个参数
这就是这个命令作用
find /usr/sbin -perm /7000 | xargs ls -l
或者 ls -l $( find /usr/sbin -perm /7000 )
ls -l 一次也只能接受一个参数
鸟哥 重点回顾
- 由于核心在内存中是受保护的区块,因此我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
- 学习 shell 的原因主要有:命令行的 shell 在各大 distribution 都一样;远端管理时命令行 速度较快; shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell 撰写的。
- 系统合法的 shell 均写在 /etc/shells 文件中;
- 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段;
- bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设置功能;工作控 制、前景背景控制;程序化脚本;万用字符
- type 可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能;
- 变量就是以一组文字或符号等,来取代一些设置或者是一串保留的数据
- 变量主要有环境变量与自订变量,或称为全域变量与区域变量
- 使用 env 与 export 可观察环境变量,其中 export 可以将自订变量转成环境变量;
- set 可以观察目前 bash 环境下的所有变量;
- $? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功;
- locale 可用于观察语系数据;
- 可用 read 让使用者由键盘输入变量的值
- ulimit 可用以限制使用者使用系统的资源情况
- bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile
与 ~/.bash_profile, non-login shell 则仅读取 ~/.bashrc
- 在使用 vim 时,若不小心按了 [crtl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
- 万用字符主要有: *, ?, [] 等等
- 数据流重导向通过 >, 2>, < 之类的符号将输出的信息转到其他文件或设备去;
- 连续命令的下达可通过 ; && || 等符号来处理
- 管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会 以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理 才行。”
- 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs 等。