别人的Linux私房菜(11)认识与学习BASH

Linux下使用BASH   Bourne Again Shell        另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell

系统中合法的shell会写入到/etc/shells文件,便于其他用户登录设置。

用户登录后取得的shell记录在/etc/passwd这个文件内

 

命令记录在.bash_history,为上一次登录执行的命令。bash-completion软件可以使用选项参数补齐。【tab】

 

查询命令是否为bash的内置命令: -t 显示命令的意义(外部,别名,shell命令)  -a由path定义的路径

如:type ls    type -t ls ; type -a ls;type cd

 

ctrl +u向前删除命令行ctrl+k向后删除命令行

ctrl+a光标移动到命令行最前   ctrl+e光标移动到命令行最后

 

显示部分环境变量:

变量要求:

 等号赋值,英文字母或者数字,字母开头。使用双引号,内的$后加变量。使用单引号内的变量为字符串常量。

``和$可以用于额外命令执行如  version=$(uname -r)或version='uname -r'

想要知道每个和crontab相关的文件名的权限:ls -ld `locate crontab`

使用转义字符\将回车$\空格‘等转换为一般字符

变量如果需要在其他子程序执行则需要export使变量变为环境变量。 export PATH

取消变量的办法为unset 如:unset myname

 

在PATH中累加路径:PATH="$PATH":/home/        PATH=${PATH}:/home/

 在变量中累加变量:name=“$name”yes    name=${name}yes

 进入字进程bash   退出exit   在子进程中调用父进程的变量使用export

子进程仅继承父进程的环境变量,所以自定义变量需要export将变量放入子进程

 

 在~/.bashrc配置文件中有用户定义的变量别名,可以使用。

列出shell中所有环境变量和内容:env,如主机名,类型,条数,shell,使用者,语系,账号登录名等

用set观察环境变量和自定义变量:set

获得随机数:declare -i number=$RANDOM*10/32768;echo $number

 

PS1提示字符的命令行设置:具体的转义可以man bash

 $本shell的PID(Process ID)echo $$   

?上次执行命令的返回值,正确执行返回0

 

显示支持语系:locale -a

 显示当前编码:locale。设置编码只需要设置LC_ALL和LANG即可。

 系统默认语系的位置:/etc/locale.conf

 

read读取来自键盘的变量。如:read  atest

-p加入提示字符,-t等待输入的秒数。如:read -p “input:” -t 30 named

 

declare和typeset相同,声明变量的类型。如显示变量名:declare

 将后面的变量定义为-a数组,-i整数-r只读。-x变量成为环境变量

如 declare -i sum=100+200等echo $sum

 

 限制用户使用系统单资源:ulimit

-a所有,-f建立最大的文件容量

 如列出所有限制额度:ulimit -a

如限制建立文件的大小:ulimit -f 10240 一般用户身份只能缩小建立的大小,不能增大

 

删除变量中的字段:

#删除变量从头开始符合要求的最小变量段        

##删除变量从头开始的符合要求的最大变量段

如:echo {path#/*:}删除了环境变量中的第一个路径

echo {path#/*:}剩下了环境变量中的最后一个路径(介于斜线和冒号之间)

%删除变量从尾开始符合要求的最小变量段

%%删除变量从尾开始符合要求的最大变量段

/   /将旧字符串的第一个替换为新字符串

//    /将旧字符串全部替换为新字符串

如:echo {$path/sbin/SBIN}和echo {$path//sbin/SBIN}

此外还有:-将不存在的变量替换为新变量,存在则不变:username=${usernae-root}

此外还有:: =不论存在与否都替换。?旧变量不存在告知信息:var=${str?noThis}

 

命令别名设置:alias lm=‘ls -al | more’

取消别名:unalias lm

 

显示所有输入过的命令:history

-c全部清除 -a新增入histfile,若没有则增如入~/.bash_history -w写入文件 -r读取那个文件

记录的数据条数和bash的HISTFILESIZE大小有关

 

 !239执行第239条命令          !!执行上一条命令             !al执行最近的以al开头的命令

 ~/.bash_logout显示退出时间

 

bash执行命令时的路径查找顺序:以相对路径查找,通过alias查找,通过bash内置命令,通过PATH查找第一个

如:type -a echo可以查看echo的顺序

 

bash的欢迎信息在/etc/issue中,/etc/issue.net提供了telnet远程登录的欢迎信息。

而用户登录后的欢迎信息在/etc/motd中。所有一般账户和root登录后显示

 

bash启动时会读取配置文件,包括全局系统配置文件,个人偏好配置文件。

每个用户登录后,系统的整体设置:/etc/profile,主要有BASH、MAIL、USER、HOSTNAME、HISTSIZE、umask等

之后该文件调用其他文件,如/etc/profile.d/*.sh(别名,颜色等)     /etc/locale.conf(语系)    /usr/share/bash-completion/completions/*

 用户个人设置:~/.bash_profile或~/.bash_login或~/.profile之一。按顺序选择读取

(会调用  ~/.bashrc)

source命令或.命令读入配置文件,如:source ~/.bashrc      .  ~/.bashrc

non-login shell(如bash子进程)仅会读取~/.bashrc

以上都会调用/etc/bashrc,定义出在不同UID下的umask,PS1,/etc/profile.d/*.sh的设置等

 

/etc/man_db.conf#man page路径到哪里寻找

~/.bash_history#历史命令文件

~/.bash_logout#注销bash后执行完里面的操作再离开

 

终端的环境设置

stty -a列出所有按键与按键内容(快捷键)

如intr 中断,quit退出,erase向后删除,kill删除命令行,eof结束输入,start重启输出,stop停止输出,等

如stty erase ^h(ctrl h)

一些变量利用set来显示,如显示所有设置的值:echo $-

-u未设置的变量显示错误信息,-x命令显示前会显示++提示等

如:设置:set -u   取消设置:set +u

 

通配符号与特殊符号:

*多字符          ?一字符            []一定有一个在内           [-]顺序内的所有     [^]反向选择

&将任务变成后台任务的命令

 

标准输入,代码0:<    <<

原本由键盘输入的数据改由其它,

如创立文件并写入信息:cat >catfile  [ctrl +d 退出]。

创立文件把文件bashrc写入:cat >files < ~/.bashrc

<<为结束的输出字符设置,如cat >catfile <<"eof"

标准输出,代码1:>    >>

如ll  /  > ~/rootfile 将正确的输出信息存入文件,若使用>>则为新增效果

标准错误输出,代码2:2>    2>>

如:find /home --name .bashrc > list_right 2>list_error,将输出数据分别显示

将错误和正确信息写入一起:find /home --name .bashrc > list 2>&1或find /home --name .bashrc &> list 

垃圾桶设备,/dev/null

如:find /home --name .bashrc 2>/dev/null则只显示正确的数据。

 

连续命令执行的特殊字符

;连续执行的命令

&&前命令执行正确则执行后命令

||前命令执行错误则执行后命令

 

|管道命令

仅处理标准输出     后接能接受标准输入的命令如:less,more,head,tail,而不能是ls cp mv

 

选取命令将数据一行一行分析,cut和grep

cut  -d加入分隔字符  -f根据-d的分隔字符将信息划分数段  -c以字符单位取出固定字符区间  --color=auto颜色特殊显示

如:echo ${PATH} |cut -d ':' -f 3,5#列出第三和第五段数据

如:export | cut -c 12- #取出每行的第12到最后字符

grep -c找到次数  -i忽略大小写  -n输出行号  -v反向选择

如:last 输出信息中,取出没有root的每行  last | gerp -v “root”

 

排序命令:sort

sort  -n使用纯数字排序  -t分隔符号设置(默认tab)    -k排序区间选定等(默认字符排序)

 如:cat /etc/passwd | sort

如:cat /etc/passwd | sort -t ':' -k 3以:作为分隔符用第三列进行排序

uniq  计数命令 -i忽略大小写,-c进行计数

如:last | cut -d ‘  ’ -f1  | sort  | uniq -c 计数每个人的登录总次数

wc计算输出信息的整体数据 ,-l输出行,-w字母数,-m字符数

如:cat /etc/man_db.conf | wc

 

tee双向重定向,转存文件,-a累加方式

ls -l / | tee -a ~/homefile | more #将文件数据显示到屏幕并转存一份到文件

 

tr删除或替换文字        -d加删除字符,-s替换重复的字符

如:last | tr '[a-z]' '[A-Z]'    #小写变大写

如:cat ~/passwd | tr -d '\r' > ~/passwd.Linux#将/r去掉,即dos2unix,并另存

col   -x将tab按键,转换为空格

如:cat /etc/man_db.conf | col -x | cat -A  | more #转换并显示结果,包括特殊按键

join处理两个文件之间的数据,将相同一行加在一起

-t 分隔字符  -i忽略大小写  -1  第一个文件栏位,-2第二个文件栏位

如:join -t ‘:’ /etc/passwd /etc/shadow | head -n 3 相同合并并选前三行显示

如:join -t ‘:’ -1 4 /etc/passwd -2 3 /etc/shadow | head -n 3 自定义合并并显示

合并前应排序

paste将两行贴在一起,tab分隔开 -d选择分隔符  

如:paste /etc/passwd /etc/shadow#合并

expand 将tab转为空格 -t 指定替换为空格的个数

如:grep ‘^MANPATH’ /etc/man_db.conf | head -n 3 | expand -t 8 - |cat -A#其中的file写成了-,为标准输入数据。

 

split划分命令:-b加划分文件大小  -l以行数来划分。

如:cd /tmp; split -b 300k /etc/services newfile#划分后出现newfile[a-z]等

将文件合并:cat newfile* >> newfile.back

又如:ls -al / | split - l 10 - lsboot#以行数划分

 

xargs参数,产生某个命令的参数个数,-n加次数 -p询问 等

如:id root;

cut -d ‘:’ -f 1 /etc/passwd | head -n 3 | xargs -n 1 id #一次给予id一个参数,并完成全部显示

 

-,做标准输入或输出使用,代替文件名

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值