- 管理计算机硬件的是操作系统的kernel,用户通过shell与内核沟通。即user☞shell☞kernel☞hardware。
- 用户可以使用的shell放在 /etc/shells中,登录默认使用的shell放在/etc/passwd中,/sbin/nologin表示无法使用。/bin/bash是Linux默认的shell。
- history记录历史命令。放在~/.bash_history中,记录的是前一次登录使用的命令,这次登录使用的命令还在缓存中,注销后方可保存。系统会主动读取家目录的/.bash_history目录,记录的数据量与HISTFILESIZE设置量有关。 例如:history 3 表示最近的三个命令
history -a 将目前新增的history命令写入histfiles中,若没有histfiles, 则默认写入~/.bash_history。
history -c 将目前shell中的所有history内容清除
history -r 将histfiles的内容读到目前shell中
history -w将目前shell中的history写入histfiles中
!3 表示执行第三条命令
!!表示执行上一条命令(同按向上键回车)
!al表示执行最近的以al开头的命令 - tab:命令,文件补齐
- alias:命令别名,例如alias lm=’ ls -al ’
- unalias:取消命令别名
- type:查询命令是否为bash shell的内置命令。type所找出的是执行文件而不是一般文件名,这一点类似which。
-t
file :外部命令
alias:命令别名
builtin:内置命令
-a 列出所有
-p 若是外部命令则显示完整文件名 - Ctrl+u从光标处向前删除命令串 Ctrl+k向后删除、
Ctrl+a光标移动到最前面 Ctrl+e最后面
Ctrl+c表结束 - 环境变量PATH、HOME区别于自定义变量用大写字符表示。不论是否是环境变量,只要是根shell操作界面有关的变量(系统内定需要的变量)一般都用大写字母。环境变量和自定义变量的区别就在于是否被子进程所继续引用。
- 变量在使用时前面加$。
- echo:变量的使用。例如echo ${variable}
- 1变量的设置规则:=两边不能直接接空格,因为那表示数字运算;2变量的内容若有空格用‘’或“”引起;3一串命令中包含其他命令格式为反引号 命令或(命令),先执行这个内含命令,再将其引入;4扩增变量格式为${变量}
- export:将变量变成环境变量。例如:export HOME。
- unset:取消变量。例如:unset home。
- 子进程就是在目前shell中启用一个新的shell。一般情况下,父进程的自定义变量是不能在子进程中使用的,要使用export变成环境变量才可在子进程中使用。父进程有专门存放环境变量的内存区域,子进程会引入此内存区域。PS1不是环境变量(会影响到bash的界面)。
- locate:列出所有相关文件的文件名。例如:ls -ld $(locate )。
- 环境变量的功能:1根目录的变换;2提示字符的显示;3执行文件查找的路径(PATH)。
- env,export:列出所有的环境变量。HISTSIZE历史命令;SHELL环境使用的shell;PATH执行文件查找的路径,目录与目录之间以:相隔;LANG语系数据;RANDOM随机数(0~32767)。
- PS1:提示字符 。
\d日期格式;
\H完整主机名;
\h第一个小数点之前的名字;
\t时间格式;
\u用户的账号名称;
\w完整的工作目录;
\W最后一个目录名。
#执行的第几个命令(#12第十二次执行的命令),root用户提示字符;
$普通用户提示字符;
$也代表shell的进程号,echo $$表示显示PID号码;
?表示上个执行命令的返回值。echo $? 若值为0则表示命令成功执行。 - locale:语系变量。主要设置LANG(主语言的环境)或LC_ALL(整体语系的环境)这两个变量;系统默认的语系在/etc/locale.conf中,主机包含的语系文件放在/usr/lib/locale/中。例如将中文换成英语(在centos中让LC_ALL变成环境变量才能生效。):
$LANG=en_US.utf8; locale
$export LC_ALL=en_US.utf8; locale - read:读取键盘输入
-p:接提示符
-t :等待的时间
例如:
$read -p "write now: " -t 30 name
$echo ${name} - declare,typeset:声明变量的类型
declare 后面不加变量名,显示所有变量名称和内容。
后面加变量名
declare -a variable:将变量定义为数组(array)类型。
declare -i variable:将变量定义为整数(integer)类型。
declare -x variable:和export一样将变量变成环境变量。+x可以变成自定义变量
declare -r variable:将变量设置为readonly类型,该变量不可更改,也不能unset。
例如求和:
$declare -i sum=100+200
$echo ${sum} - array变量类型
$var[1]=“a”
$var[2]=“b”
$var[3]=“c”
e c h o " echo " echo"{var[1]}, ${var[2]}, ${var[3]}"
读取方式:echo{array} - ulimit
-H:hard limit 严格设置
-S:soft limit 警告设置
-a:后面不接选项或参数,显示所有限制
-f:可以建立的文件最大容量,以kb为单位
例如:建立10MBytes以下容量的文件
$ ulimit -f 10240 - 变量的删除、替换
${变量#关键词} #从头开始删除,最短的;##最长的。
${变量%关键词}%从尾向前删除,最短的;%%最长的
${变量/旧字符串/新字符串}/只替换第一个旧字符串,//替换全部 - 变量的测试与内容替换
例如:
$echo n a m e = name= name={username-root}
若username为空则name为空,若username未设置则name为root。
$echo n a m e = name= name={username:-root}
若username为空或未设置,name都为root(:表示为空和未设置情况一样)
$echo n a m e = name= name={username?错误信息}
若username不存在则输出错误信息
$echo n a m e = name= name={username:?错误信息}
若username为空或不存在则输出错误信息 - 路径与命令查找顺序
type -a ls 可查找ls的执行顺序
先alias再builtin再$PATH - /etc/issue bash的登录信息
/etc/motd bash的欢迎信息(message of the day)(vim /etc/motd) - bash 的环境配置文件
分为全局系统配置文件和个人配置文件;命令别名和自定义变量需要
写入配置文件,不然注销就失效了。
login shell:由tty1~tty6输入密码登录。
/etc/profile:系统整体设置,它可以调用外部配置文件/etc/profile.d/*.sh,这个文件中规范了bash的颜色语系命令别名等。它可以调用/etc/locale.conf,这个文件中包含LANG的设置。即/etc/profile☞~/.bash_profile☞调用bash。
;~/.bash_profile用户个人设置
它会调用~/.bashrc的内容
source或小数点可以将配置文件的内容无需重启立即生效。例如:source ~/.bashrc
non-login shell:由xwindow登录终端或bash子进程。仅会读取~/.bashrc ,它包含PS1等 - stty(setting tty) :可以设置终端输入按键代表的意义。
stty -a:列出所有stty参数
例如:$stty erase ^a 代表以后删除按键为Ctrl+a了。 - set -u 表示变量未设置时会显示错误信息比如echo $a,若a未设置则显示错误,而默认是不显示错误。(set可以设置终端的环境)
- 通配符(wildcard)
(*) :代表零到无穷个任意字符。
?:代表一个任意字符
【】:代表其中的一个字符
【^abc】:指数符号代表反向选择,即不是abc的一个字符
特殊符号
#:注释
:转义
|:管道
;:命令分隔符
~:用户的家目录
$
:使用变量前导符
&:任务管理(job control),将命令变成后台任务。
!:非
/:路径分隔符
‘’:$
变为纯文本
``:两个反引号之间的可以先执行,同$()
():在中间为子shell的起始与结束
{}:在中间为命令区块的组合 - 数据流重定向(redirect)即将本应该显示在屏幕上的东西传输到其他地方。
标准输入(stdin):代码为0,使用<或<<
标准输出(stdout):代码为1,使用>(覆盖)>>(累加)
标准错误输出(stderr):代码为2,使用2>或2>>
例如:$
find /home -name .bashrc >list 2>&1(标准正确错误输出都写入list中,这种写法不会混乱,>list 2>list这样会混乱,2>&1的意思就是将2>变成1>。)
例如:$
cat > catfile < ~/.bashrc(有>,catfile若不存在会主动建立。cat > catfile建立文件,<可以用后面的纯文本文件代替键盘的输入)
<<代表结束的输入字符。例如:$cat > catfile << "eof"代表结束输入时不需按Ctrl+d了。
执行已知的错误信息可以2> /dev/null 。 - 命令执行的判断依据
一次执行多个命令有两种方法1是使用脚本2是使用;,&&,||。$?为命令返回值。
例如1:cmd1||cmd2,cmd1正确则cmd2不执行。
例如2:我不清楚/tmp/abc/是否存在,但就是要建立/tmp/abc/hehe文件
$ls /tmp/abc/ || mkdir /tmp/abc/ && touch /tmp/abc/hehe - 管道命令|:管道命令仅会处理标准输出,错误输出会忽略。
- 选取命令
cut:将信息的某一段给切出来,以行为单位。
例如:以:为分隔符列出第三行第五行
$echo ${ PATH} | cut -d ':' -f 3,5
cut -c 12-表示取得12个字符以后的字符。
grep:若一行中有我们所有需要信息,就拿出来。
grep -i 忽略大小写
grep -n顺便输出行号
grep -v反向选择
grep --color=auto 找到的关键字会用特殊颜色 - 排序命令
sort -f 忽略大小写
sort -b 忽略空格
sort -r 反向排序
uniq:排序完成后,将重复的数据仅列出一个显示。
uniq -i 忽略大小写
uniq -c 进行计数
wc 统计
wc -l 仅列出行
wc -w 仅列出多少字
wc -m 多少字符 - tee :双向重定向,将数据流分送到文件和屏幕(输出到屏幕的是stdout)。
tee -a tee默认覆盖,加a表累加。 - 字符转换命令
tr -d 删除字符
tr -s替换重复的字符
col -x 将tab键替换成空格键
join -t (空格) -i(忽略大小写)file1 file2 处理两个文件的数据,两个文件中,有相同数据的那一行合在一起。
paste -d 分隔符 file1 file2直接将两行贴在一起,默认以tab隔开。
expand -t后面接数字 file 将tab按键转成几个空格键。 - 划分命令
split -b file 以文件大小划分
split -l file以行数来划分 - 参数代换
xargs产生某个命令的参数,将stdin的数据分隔成为参数。 - stdin和stdout可以用-来替代。
鸟哥Linux第十章-认识与学习bash笔记
最新推荐文章于 2024-10-18 13:51:57 发布