Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第11章 认识与学习 bash

env 输出环境变量
export 输出环境变量,如有参数则将参数导入到环境变量
set 输出环境变量和自定义变量


echo 显示某个变量
unset 取消变量


bash 新建子进程
exit 退出进程


locale 输出语系


read [-pt] 变量名 等待用户输入变量名
declare/typeset [-aixr] 变量名="xxxx" 定义变量 (如果没有参数和set一样)


ulimit 限制文件系统参数


${path#/*:} 从前面往后删除掉最短的符合#后格式的内容
${path##/*:} 从前面往后删除掉最长的符合##后格式的内容


${path%:*bin} 从后面往前删除掉最短的符合%后格式的内容
${path%%:*bin} 从后面往前删除掉最长的符合%%后格式的内容


${path/oldStr/newStr} 如果变量中包含oldStr的话,替换第一个oldStr为newStr
${path//oldStr/newStr} 如果变量中包含oldStr的话,替换所有oldStr为newStr


new_var=${old_var-content} 如果old_var未设置,就将content赋予new_var
new_var=${old_var:-content} 如果old_var为空字符串或未设置,都将content赋予new_var


alias 别名='命令 参数' 设置命令别名
unalias 别名 取消命令别名


clear 清除屏幕内容


history 历史命令
-n 列出最近的n条执行过的命令
-c 清除所有history中的命令
-a histfiles 将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入 ~/.bash_history
-r histfiles 将histfiles的内容独到目前这个shell的history记忆中
-w histfiles 将目前的history记忆内容写入histfiles中,若没有加histfiles,则默认写入 ~/.bash_history


!number 执行历史命令中第 number 条命令
!command 由后向前搜寻并执行历史命令中以 command 开头的命令
!! 执行上一个命令(相当于 ↑ [Enter])


type -a command 查找所有command的类型


命令别名、自定义的变量在注销bash后就会失效,所以如果想要保留设置,就得要将这些设置写入配置文件才行。


stty [-a] 查阅、设置终端机的输入按键代表意义
set [-uvCHhmBx] 设置命令输入输出环境


1> 或者 > 标准输出覆盖
1>> 或者 >> 标准输出追加
2> 或者 > 错误输出覆盖
2>> 或者 >> 错误输出追加


find /home -name .bashrc > list_right 2> list_error
find /home -name .bashrc 2> /dev/null 垃圾黑洞设备


find /home -name .bashrc > list 2> list
find /home -name .bashrc > list 2>&1
find /home -name .bashrc &> list 将正确和错误数据通通写入同一个文件去


< 利用cat创建文件:
cat > catfile 
testing
cat file test
# ^d 离开


cat > catfile < ~/.bashrc
ll catfile ~/.bashrc


<< 代表以右边字符串结束输入
 cat > catfile << "eof"
> This is a test.
> OK now stop
> eof 


 cat catfile


cmd1; cmd2 连续执行命令
cmd1 && cmd2 cmd1执行成功的话继续执行cmd2,cmd1执行不成功的话不继续执行cmd2
cmd1 || cmd2 cmd1执行成功的话不继续执行cmd2,cmd1执行不成功的话继续执行cmd2


ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe


cmd1 && cmd2 || cmd3 假设判断式


| 管道命令:只能处理上个命令 standard outinput 的信息,对于standard error并没有处理能力,管道命令必须要能够接收 standard input 的数据才行


ls -al /etc | less


last 查询最近一个月登录系统的日志信息
[tab]按键可以被 cat -A 显示成为 ^I
id 将账号的标识符显示出来
finger 将账号的特殊参数显示出来
source filename 无需注销的情况下,载入配置文件


----------------------------------------------------管道命令-----------------------------------------------------------------
选取命令:
cut:将一段信息的某一段“切”出来
-d '分隔字符' -f index(从1开始)
-c 行号-行号

echo $PATH | cut -d ':' -f 3,5


grep:将包含查找字符串的信息拿出来
-i 忽略大小写
-n 输出行号
-v 反向选择
--color=auto 将找到的关键字部分加上颜色显示


last | grep 'root'
last | grep -v 'root'
last | grep 'root' | cut -d ' ' -f 1
grep --color=auto 'MANPATH' /etc/manpath.config


排序命令:
sort:可以根据不同的数据类型来排序(在排序之前用LANG=C来让语系统一)
-f 忽略大小写
-b 忽略最前面的空格符
-M 一月份的名字来排序,列如 JAN, DEC 等的排序方法
-n 使用“纯数字”进行排序(默认是以文字类型来排序的)
-r 反向排序
-u 就是 uniq ,相同的数据中,仅出现一行代表
-t 分隔符,默认使用 [Tab] 键来分隔
-k 以区间 (field) 来进行排序


cat /etc/passwd | sort
cat /etc/passwd | sort -t ':' -k 3 -n
last | cut -d ' ' -f 1 | sort

uniq:可以将重复的数据仅列出一个显示
-i 忽略大小写
-c 进行计数

last | cut -d ' ' -f 1 | sort | uniq
last | cut -d ' ' -f 1 | sort | uniq -c

wc:计算输出信息的整体数据
-l 仅列出行
-w 仅列出多少字
-m 多少字符

cat /etc/manpath.config | wc
last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l


双向重定向:
tee:会同时将数据流送与文件与屏幕;而输出到屏幕的,其实就是stdout,可以让下个命令继续处理
-a tee后接的文件会被覆盖,诺加上 -a 这个参数则能将信息累加

last | tee last.list | cut -d ' ' -f 1
ls -l /home | tee ~/homdfile | more
ls -l / | tee -a ~/homefile | more


字符转换命令:
tr:用来删除一段信息当中的文字,或者是进行文字信息的替换
-d 删除信息当中的 SET1 这个字符串
-s 替换掉重复的字符


last | tr '[a-z]' '[A-Z]'
cat /etc/passwd | tr -d ':'

cp /etc/passwd /root/passwd && UNIX2dos /root/passwd
file /etc/passwd /root/passwd
cat /root/passwd | tr -d '\r' > /root/passwd.linux
ll /etc/passwd /root/passwd*

col:经常用来将 man page 转存为纯文本文件以方便查查阅
-x 将tab键转换为对等的空格键
-b 在文字内有 / 时,仅保留反斜杠最后接的那个字符

cat -A /etc/manpath.config 
cat /etc/manpath.config | col -x | cat -A | more

man col > /root/col.man
vim /root/col.man


man col | col -b > /root/col.man

join:将两个文件当中有相同数据的那一行加在一起(注意,操作之前先将文件排序,否则会丢失数据)
-t join 默认以空格符分隔数据,并且对比“第一个字段”的数据,
  如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个
-i 忽略大小写的差异
-1 这个是数字的 1 ,代表第一个文件要用哪个字段来分析的意思
-2 代表第二个文件要用哪个字段来分析的意思


head -n 3 /etc/passwd /etc/shadow
join -t ':' /etc/passwd /etc/shadow


head -n 3 /etc/passwd /etc/group
join -t ':' -1 4 /etc/passwd -2 3 /etc/group


paste:将两行贴在一起,且中间以[tab]键隔开
-d 后面可以接分隔字符,默认是以 [tab] 来分隔的
-  如果 file 部分写成 - ,表示来自 standard input 的数据的意思

paste /etc/passwd /etc/shadow

cat /etc/group | paste /etc/passwd /etc/shadow - | head -n 3


expand:将[tab]按键转成空格键
-t 后面可以接数字。一般来说,一个[tab]按键可以用 8 个空格键替换。
  我们也可以自行定义一个[tab]按键代表多少个字符。

grep '^MANPATH' /etc/manpath.config | head -n 3
grep '^MANPATH' /etc/manpath.config | head -n 3 | cat -A
grep '^MANPATH' /etc/manpath.config | head -n 3 | expand -t 6 - | cat -A


(unexpand将空格键转成[tab])

切割命令:
split:将一个大文件依据文件大小或行数来切割成小文件
-b 后面接欲切割成的文件大小,可加单位,例如 b, k, m 等
-l 以行数来进行切割
PERFIX 代表前导符,可作为切割文件的前导文字


cd /tmp; split -b 300k /etc/termcap termcap(前导符)
ll -k termcap*
xxxx termcapaa
xxxx termcapab
xxxx termcapac

cat termcap* >> termcapback (合并)


ls -al / | split -l 10 - lsroot(前导符)
wc -l lsroot*

参数代换:
xargs:产生某个命令,可以读入stdin的数据,并且以空格符或断行字符进行分辨,将stdin的数据分割成为arguments
-O 如果输入的 stdin 含有特殊字符,例如 `, \, 空格键等字符时,这个参数可以将它还原成一般字符。这个参数可以用于特殊状态。
-e 这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,就会停止继续工作
-p 在执行每个命令的参数时,都会询问用户
-n 后面接次数,每次 command 命令执行时,要使用几个参数的意思


cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger

cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -p finger


cut -d ':" -f 1 /etc/passwd | xargs -p -n 5 finger

cut -d ':' -f 1 /etc/passwd | xargs -p -e'lp' finger


find /sbin -perm +7000 | ls -l (结果列出了所有 root 下的文件)

find /sbin -perm +7000 | xargs ls -l (很多命令其实并不支持管道命令,因此我们可以通过xargs来提供该命令引用 standard input 之用。)

关于减号的用途:
tar -cvf - /home | tar -xvf -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值