(一)Linux系统上的文件类型
使用ls命令的结果中,最左边一位表示文件类型:
- -:常规文件,在其它程序中用f表示,可以继续使用file命令查看常规文件的类型
- d:目录文件/directory
- b:块设备文件/block device,支持以“block”为单位进行随机访问
- c:字符设备文件/character device,支持以“character”为单位进行线性访问
- ls命令查询设备文件时,结果中显示到的不是大小,而是两个数字,称为主号和次号,一般用8位二进制表示,逗号分隔
- 主号:major number/主设备号,用于标识设备类型,进而确定要加载的驱动程序
- 次号:minor number/次设备号,用于标识同一种类型下的不同的具体设备
- l:符号链接文件/symbolic link
- p:命名管道/pipe
- s:套接字文件/socket
(二)基本命令
- 命令类型
- 外部命令:每个命令都有一个对应的文件,命令名就是文件名
- 内部命令:Bash等shell命令自带很多命令,所以内部命令是指shell的内部命令,而shell本身是一个外部命令
- 查看命令类型的方法是:type COMMAND。结果中,外部命令显示文件路径(但是未必总是如此,因为有些命令有别名),内部命令显示builtin。
- 注:命令可以有别名,别名可以与原名相同,此时原名被隐藏,可以加反斜线使用原命令,比如ls其实是ls --color=auto,此时原来的ls被隐藏了,可以用ls调用原来的ls
- 使用alias命令可以查看命令别名列表
- 定义别名的方法是:alias 别名='命令';如果命令中间没有空格,可以不加引号,这种方式只对当前shell有效,登出之后就失效了(具有时间限制和范围限制)。如果想永久有效,需要添加到配置文件中。
- 撤销别名的方法是:unalias 别名;
- Which命令
- 显示命令的完整路径
- Whereis命令
- 显示命令的二进制文件,源码文件,手册页的位置
- -b:仅搜索二进制文件路径
- -m:仅搜索手册页路径
- who命令
- 显示登陆系统的用户信息,例如下面表示有两个用户通过伪终端登陆,一个通过虚拟终端登陆。显示格式为:用户名,终端,时间,远程登陆主机的ip(本机登陆不显示ip)
root pts/0 2015-12-10 09:25(172.16.100.100)
root pts/1 2015-12-10 09:25(172.16.100.100)
root tty1 2015-12-10 09:25
-
- who -b:显示系统此次启动的时间
- who -r:显示系统运行级别
- w命令
- 增强版的who,不光能显示登陆系统的用户信息,还能显示他们当前正在干什么
(三)bash的基础特性
- 命令历史:shell进程会在其会话中保存此前用户提交执行过的命令
- 使用history命令即可查看命令历史
- 定制history的功能,可以通过环境变量实现
- HISTSIZE:shell进程可以保留的命令历史的条数
- HISTFILE:持久保存命令历史的文件。每个用户的家目录里都有一个隐藏文件.bash_history,在每次用户登出时,都会将内存中的命令历史写进该文件。history命令显示的内容包括两部分,文件中的和当前内存中的。
- HISTFILESIZE:文件所能保存的历史条数
- history n:显示最近n条命令历史
- -c:清空内存中的命令历史
- -d offset n:清除指定命令历史
- -r:从文件读取命令历史到内存中
- -w:把内存中的命令追加到历史文件中
- 调用命令历史列表中的命令:
- !#:再一次执行历史列表中的第#条命令
- !!:再一次执行上一条命令
- !String:再一次执行历史列表中最近一次以string开头的命令
- 调用上一条命令的最后一个参数:
- 先按“esc”键,再按“.”号键
- 或者在参数的位置输入“!$”
- 控制命令历史记录的方式:
- 环境变量:HISTCONTROL
- 可以有三种取值:
- 默认ignoredups:忽略重复,只有相邻一样才被认为是重复
- ignorespace:忽略以空白字符开头的命令,所以我们可以在某个命令前面加空格从而让它不被记录
- ignoreboth:以上两者同时生效
- 改变HISTCONTROL值的方式:HISTCONTROL=ignorespace,因为值里没有空格,所以不需要加引号。只对当前shell会话有效。