现在看到bash,在写这篇博客的时候已经是第二遍看了
type:bash的内置命令
不加任何参数时,会显示是外部命令还是内部命令
-t:列出的字眼的意思
file:外部命令
alias:有别名
builtin:内部命令
-p:后面接的是外部命令,才会显示完整的文件名
-a:将所有含name的命令都列出来,包括别名
命令的执行:
shell的变量功能
例如:username=/var/spool/mail/user ......$username....... 直接输入$username代替
变量:就是以一组文字或符号等,来替代一些设置或是一串保留的数据
变量的显示与设置:echo和unset
设置就是=号 XXX=yyyyy
双引号和单引号:双引号带便原有的特性,单引号仅为一般字符
引号必须要配对,不管单双
`:1旁边的按键,命令行里首先执行`后面的。
例:ll `whereis path` 先执行whereis
环境变量
env
主要注意以下几个:
HOME:代表用户的主文件夹
SHELL:告知目前这个环境使用的shell是哪个程序
HISTORY:记录历史信息的条数
MAIL:读取邮件信箱文件
PATH:执行文件查找的路径
LANG:语系数据
RANDOM:“随机数”的变量
所有变量
set
PS1:提示符的设置
\d:显示日期
\H:完整的主机名
\h:仅取主机名在第一个小数点前的名字
\T:显示时间
\A:显示时间
\u:目前账户名称
\v:BASH的版本信息
\w:完整的工作目录名称
\W:列出工作目录名称
\#:执行的第几个命令
\$:提示符 root为# 其他为$
export
自定义变量转出环境变量
locale
影响显示结果的语系变量
一般记住LANG和LC-ALL就可以了
系统默认的语系定义在/etc/sysconfig/i18n
变量的有效范围
环境变量=全局变量
自定义变量=局部变量
变量键盘读取、数组与声明:
read:
-p:后面接提示符
-t:后面可以接“秒数”
read atest
this is a test
输入了可以显示
read -p 'please keyin your name:' -t 30 named
declare/typeset:
声明变量的类型
-a:将变量定义为数组型
-i:将变量定义为整数数字型
-x:将变量变为环境变量
-r:将变量设置为只读型
-p:单独列出变量的类型
数组变量类型
array
与文件系统及程序的限制关系
ulimit
-H:严格的设置,必定不能操过这个数值
-S:警告设置
-a:列出所有的限制额度
-c:限制内核文件最大容量
-f:可以创建的单个文件最大容量
-d:可以使用的最大断裂内存
....... 一般做ulimit -a就能看到怎么做
变量内容的删除、替代与替换
#代表删除,从变量的最前面开始向右删除,删除最短的那个
##代表删除最长的
echo ${path#/*bin:}
%从最后开始向前删除,删除最短那个
%%删除最长那个
echo ${path%:*bin}
替换功能
echo ${path/bin/BIN} 替换第一个
echo ${path//bin/BIN} 替换所有
变量的测试与内容替换
echo ${username-root} 如果没有username,那就取root
username=${username:-root} 如果用:后变量为空或未设置,都能以后面的内容替换
unset str
var=${str-newer} 得出var=newer str=
str=older
var=${str-newer} 得出var=older str=older
unset str
var=${str=newer} 得出var=newer str=newer
str=older
var=${str=newer} 得出var=older str=older
unset str
var=${str?无此变量}
命令的别名和历史命令
alias、unalias
其实就一条:alias XXX=XXXX
如果要永久设置的话,一般是在~/.bashrc里面
历史命令
history
!!:执行上一个命令
!数字:代表执行地几条
!file:代表找开头是file的命令,执行
type -a 命令查找的顺序
/etc/issue /etc/motd
/etc/issue:tty登陆的时候显示的信息
/etc/motd:telnet登陆的时候显示的信息
bash环境变量配置
login和non-login shell
用户名和密码登陆的是login 不用的是non-login
/etc/profile是系统整体设置
~/.bash_profile ~./bash_login ~/.profile属于个人用户设置
看/etc/profile文件
/etc/inputrc
一般不修改
/etc/profile.d/*.sh
扩展名为sh的文件
/etc /sysconfig/i18n
系统默认语系
这三个文件login shell只会读取其中一个,顺序如下
~/.bash_profile
~/.bash_login
~/.profile
改变/etc/profile和~/.bash_profile需要source来更新生效。
source filename:
etc/bashrc是redhat特有的
如果.bashrc被误删除了,可以复制etc/skel/.bashrc到家目录 再进行修改
stty -a
列出目前环境的所有按键选项
^代表ctrl
eof:end of file 结束
intr:代表中断
kill:代表删除现在命令行上面的所有文字
quit:代表送出个quit信号
start:在某个程序停止后,重新启动他的output
设置的话 stty XXX ^XXX
通配符
*:代表任意字符
?:代表一定有一个任意字符
[]:代表一定有括号里面的一个字符
【-】:在编码顺序内癿所有字符
【^]:代表反向
例:找出 /etc/ 底下以 cron 为开头癿档名
ll -d /etc/cron*
数据流重导向
> >>
>代表正确的数据输出到某个文档内
>>代表累加形式
cat /etc/passwd>ls1 cat /etc/shadow>>ls1 (ls1的内容就会是passwd+shadow)的内容了
< <<
cat > catfile < ~/.bashrc
建立catfile,内容从.bashrc中得到
<<代表输入特定字符结束
cat>test<<end
输入end就会结束
管道命令
cut
-d:后面接分割字符
-f:依据-d
-c:指定的字符长度
cut -d ':' -f 3 /etc/passwd
cut -c 12-20 截取12-20这几个字符
grep
搜寻文档
-a:以text形式找
-c:计算找到的次数
-i:忽略大小写
-n:输出行号
-v:反向选择
--color=auto:自动加亮标记
例:
last |grep 'root'
last | grep 'root' -v -n
sort
排序
-f:忽略大小写
-b:忽略前面的空格
-M:以月份来排序
-n:以数字来排序
-r:反向排序
-u:有重复只列出一个
-t:分隔符
-k:以区间来排序
例:cat /etc/passwd |sort -t ':' -k 3 -n
重复只列出一个
uniq
-i:忽略大小写
-c:计数
cat /etc/passwd | cut -d ':' -f 3| sort -n |uniq -c
wc:
计数
-l:列出行数
-w:列出英文单词数
-m:列出字符数
tee:
双重引导
-a:累加
例:last |tee /testfile
这个命令和>的区别就是会在屏幕上面显示出来而已
字符转换命令
tr:【-ds】
替代或者删除信息
-d:删除信息
-s:去掉重复的字符
cat /passwd |tr '[a-z][A-Z]'
col:把tab键转成空格键
join:
有相同的字符时,可以连接起来