shell所处位置
shell广义分类
GUI:包括GNOME KDE XFACE
CLI:sh ksh bash (Linux发行版本中,bash是默认的shell程序)
shell启动:当用户登录完成后,系统会自动启动shell程序
shell是一个程序,进程是应用程序的副本,root用户和普通用户同时登录时,以PID号区分shell进程。
shell又分为父shell和子shell,在系统中,每一个进程只认为自己存在,父shell不知道子shell的存在...
父子shell之间的环境设置互相独立,互不影响
[root@www ~]# bash
[root@www ~]# pstree #查看进程树
init─┬─VBoxService───7*[{VBoxService}]
├─sshd───sshd───bash───bash───pstree
cat /etc/shells 查看当前系统支持的shell环境
每一个shell都有自己的工作环境
[root@www ~]# ksh
# pstree
init─┬─VBoxService───7*[{VBoxService}]
├─sshd───sshd───bash───bash───ksh───pstree
exit:退出当前shell程序
bash的特性:
1、命令历史 Linux会自动记录过去执行的命令,并保存在内存的缓冲区中
#history 查看命令历史 -c 清空命令历史 -d 删除某一条命令历史 history -d 22 history 10 4(删除10-14) -w 将命令历史保存到某个文件中 HISTSIZE:命令历史大小变量,默认1000 [root@www ~]# echo $HISTSIZE 1000 命令历史使用技巧: !n 执行命令历史编号n的命令 !-n 执行命令历史编号倒数n的命令 !word 执行命令历史中最后一次以word开始的命令(word必须能唯一标识想执行的命令) !! 执行上一条命令 !$ 引用一个命令的最后一个参数 [root@www ~]# ls /usr bin games lib libexec sbin src [root@www ~]# ls /tmp vboxguest-Module.symvers yum.log [root@www ~]# ls !$ ls /tmp vboxguest-Module.symvers yum.log ESC键(按完后松开) 再按.键,起到和!$相同的效果
2、管道、IO重定向
计算机体系结构:
控制器:CPU,读取系统指令 运算器:CPU,运算 储存器:RAM(内部存储器:易失性存储器) 输入设备:输入数据 输出设备:显示命令执行结果
计算机总线:
地址总线:负责内存寻址 数据总线:负责传输数据 控制总线:负责控制指令
寄存器:CPU中内部临时存储空间
I/O设备:负责计算机内部存储设备和外部存储设备进行交互的设备
程序:指令+数据
指令:由程序提供,负责加工数据 数据:系统中数据有多种来源,比如来自变量,文件,输入设备 当用户没有为指令指定数据来源时,系统要有默认的数据来源
标准输入输出设备:
标准输入设备:键盘(stdin) , fd=0 标准输出设备: 显示器 fd=1 表述错误输出设备:显示器 fd=2
三种数据流:
标准输入数据流/标准输出数据流/标准输入错误数据流
fd:file description(文件描述符)
当在Linux中打开一个文件时,内核会反复调用,对于文件的标识显得很重要了,
用文件描述符表示文件 ,文件加载完成用数字标识。
I\O重定向:把默认输入输出数据来源,重新定向到其它的文件或设备
输出重定向: > 覆盖输出重定向 echo "hello world" > /dev/tty1 cat /etc > etc.out >> 追加输出重定向 ls /boot >> etc.out 2> 错误覆盖输出重定向 lls /boot 2> err.out 2>> 错误追加输出重定向 &> 混合覆盖输出重定向 ls /tmpp/ &> tmp.out &>> 混合追加输出重定向 输入重定向: < 输入重定向 cat < /etc/passwd
管道: 连接多条命令,把前一条命令的输出结果作为后一条命令的输入条件
tr 实现字符转换或删除字符
[root@www ~]tr 'a-z' 'A-Z' abc ABC [root@www ~]cat /etc/passwd | tr 'a-z' 'A-Z'
tee 传递输出结果
ls /boot/ | tee boot.stdout
3、命令别名 (alias定义的别名只在当前shell生效)
# alias aomm-alias = 'commamd' [root@www ~]# alias //查看已有别名 alias clear='cls' alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@www ~]# alias cdnet='cd /etc/sysconfig/network-scripts/' [root@www ~]# cdnet [root@www network-scripts]# #unclear COMM_ALIAS //取消命令别名
4、命令行编辑
ctrl+a 光标快速跳转到命令行的行首 ctrl+e 光标快速跳转到命令行的行尾 ctrl+u 删除光标到行首的字符 ctrl+k 删除光标到行尾的字符 ctrl+l 清屏(clear)
5、命令行展开 TAB键 提高工作效率
命令补齐:在PATH变量搜索命令并补齐(PATH变量必须正常,输入的字符能够唯一标识命令) [root@www ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 路径和文件补齐:在系统路径中查找,和命令补齐执行方式不同
命令替换:把命令中的子命令替换成子命令执行结果的过程
[root@www network-scripts]# echo "Dictory is $(pwd)." Dictory is /etc/sysconfig/network-scripts. [root@www ~]# echo "Dictory is `pwd`" Dictory is /root ""(双引号):弱引用,可以实现变量名的替换,把变量名替换为变量值 ``(单撇号):命令引用 ''(单引号):强引用(不能完成变量替换)
6、命令行统配:globbing
*: 匹配任意长度的任意字符 ?: 匹配任意单个字符 []: 匹配指定范围内的单个字符 [ab] [a-z] [A-Z] [a-zA-Z] [0-9] [a-zA-Z0-9] [^]:匹配指定范围外的任意字符 [^a-z] [^0-9] [:space:]:表示空格 [:punct:]:表示所有标点符号 [:lower:]:表示所有小写字母 [:upper:]:表示所有大写字母 [:alpha:]:表示所有字母 [:dight:]:表示所有数字 [:alnum:]:表示所有数字和大小写字母 [root@www test]# touch abc abc123 a123 xyz xyz123 x123 [root@www test]# ls a* a123 abc abc123 [root@www test]# touch a [root@www test]# ls a* a a123 abc abc123 [root@www test]# ls a?* a123 abc abc123 [root@www test]# ls a*[0-9] a123 abc123 [root@www test]# touch 'a b' [root@www test]# ls *[[:space:]]* a b
7、变量
8、编程