什么是shell?
shell 是一个命令语言解释器(command-language interpreter)。 拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。
不论何时你键入一个命令,它都被Linux shell所解释。一些命令,比如打印当前工作目录命令(pwd), 是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm), 是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心) 一个命令是建立在shell内部还是一个单独的程序。
Shell的分类
- bash:bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,也是很多linux版本默认的shell。
- csh:C shell 使用的是“类C”语法,借鉴了 Bourne shell 的许多特点,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。
- ksh:Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
- zsh:Z shell 是 Korn shell 的一个增强版本,是Linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell
- ash:ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。
- tcsh:TC shell 是 C shell 的一个增强版本,与 C shell 完全兼容。
基本命令:
基本命令格式:
command [options] [arguments]
· command:命令
· options:--单词 或 -单字
· arguments:参数,有时候选项也带参数。
在查看命令帮助时,会出现[],<>,|等符号,它们的含义如下:
· 无任何特殊符号 代表必选参数
· [] 表示是可选的;
· <> 表示可变选项,一般是多选一,而且必须是要选其一。
· x|y|z 多选一,如果加上[],可不选。如果加上{},必选其一。
· -abc 多选,如果加上[],可不选。
echo
在终端上打印字符串到标准输出。
Usage: echo [-neE] [arg ...]
常用参数:
-e: 启用特殊转义字符(\t, \b, \n等)
-n: 行末不添加换行符
用法示例:
$ echo hello world # hello world
$ echo -e '\033[32;49;1mhello world\033[39;49;0m' # 自己试试看这个结果是什么?
ls
ls的作用为显示指定目录的文件。
Usage: ls [OPTION]... [FILE]...
常用参数:
-l: 重要参数,以长列表形式显示
-a: 列出所有文件,包含隐藏文件
-R: 递归目录列出文件
-d: 显示目录本身,而非目录下文件
用法示例
$ ls # 列出当前目录下所有非隐藏文件
$ ls . # 同上
$ ls -a # 列出当前目录下所有文件
$ ls /tmp/ # 列出指定目录下文件
$ ls /var/log/boot.log # 列出指定文件
cd
切换当前的工作目录
Usage: cd [-L|[-P [-e]] [[email protected]]] [dir]
用法示例:
$ cd /path/ # 跳转到指定目录
$ cd # 跳转到家目录
$ cd ~ # As above
$ cd ~USERNAME # 跳转到指定用户的家目录
$ cd - # 跳转到上一次所在目录
cat
打开文件
Usage: cat [OPTION]... [FILE]...
常用参数:
-n: 显示行号
用法示例:
$ cat file1 file2 file3 # 在当前终端下依次打开3哥文件
$ cat -n file1 # 打开单个文件,并显示行号
倒序打开文件可以用命令tac,即cat反向写
pwd
显示当前工作目录
pwd: pwd [-LP]
用法示例:
$ pwd # 打印当前绝对路径
通配符
通配符的作用是用于模糊查询时通配文件名中某些不确定的字符。
Bash中的通配符只有3个: *, ?, []
通配符 |
作用 |
? |
匹配任意单个字符 |
* |
匹配任意长度任意字符 |
** |
匹配任意级别目录(bash 4.0以上版本支持,shopt -s globstar) |
[] |
匹配一个单字符范围,如[a-z],[0-9] |
[]的特殊用例:
[]:匹配范围
[^]:排除匹配范围
[:alnum:]:所有字母和数字
[:alpha:]:所有字母
[:digit:]:所有数字
[:lower:]:所有小写字母
[:upper:]:所有大写字母
[:blank:]:空白字符和TAB制表符
[:space:]:包括空白字符、TAB制表符(\t)、换页(\f)
[:cntrl:]:所有控制字符
[:graph:]:可打印并可看到的字符。空格是可打印的,但是不是可看到的。
[:print:]:所有可打印字符
[:punct:]:所有标点符号,非字母、数字、控制字符和space字符。
[:xdigit:]:十六进制数的字符。
Bash组合键
Bash有一些快捷组合键,灵活使用这些组合键可以让命令行操作事半功倍。
常用的快捷键:
移动光标
· alt+b: 前移一个单词
· alt+f: 后移一个单词
· ctrl+a: 移到行首(a是首字母)
· ctrl+e: 移到行尾(end)
· ctrl+x: 行首到当前光标替换
编辑命令
· alt+.: 粘帖最后一次命令最后的参数(通常用于mkdir long-long-dir后, cd配合着alt+.)
· ESC, .: 同上
· alt+d: 删除当前光标到临近右边单词开始
· ctrl+w: 删除当前光标到临近左边单词结束
· ctrl+u: 删除光标左边所有
· ctrl+k: 删除光标右边所有
· ctrl+l: 清屏(相当于clear命令)
· ctrl+shift+c: 复制(相当于鼠标左键拖拽)
· ctrl+shift+v: 粘贴(相当于鼠标中键)
其它
· shift+PageUp: 向上翻页
· shift+PageDown: 向下翻页
· ctrl+r: 进入历史查找命令记录, 输入关键字。 多次按返回下一个匹配项
· ctrl+c: 发送Interrupt信号,常用于取消未输入完整的命令,或中断当前正在执行的命令
· ctrl+d: 发送EOF信号,常用于登出交互式shell,或结束STDIN
· ctrl+z: 给当前正在运行的命令发送SIGTSTP,将导致被后台挂起
别名
别名用于简化某些常用的命令及参数。
列出当前使用的别名:
alias
定义一个别名:
alias new_alias="command args"
Linux的管道符(|)
管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",
用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,
例如:
ls -l | more
该命令列出当前目录中的任何文档,并把输出送给more命令作为输入,more命令分页显示文件列表。
又如 rpm -aq | less
软链接和硬链接
硬链接(hard link):文件A是文件B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。
软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
硬链接:ln 源文件名 链接名 软链接:ln -s 源文件名 链接名
tr命令
tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。
tr(选项)(参数)
-c或——complerment:取代所有不属于第一字符集的字符; -d或——delete:删除所有属于第一字符集的字符; -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示; -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符
原文地址:http://blog.51cto.com/11798202/2060934