Linux系统上的文件类型:
不是从内容上看,而是从文件系统角度来看文件类型:
以前用file命令来查看文件内容的类型,比如文件内容是本格式,还是二进制格式。这都是说的文件内容的类型。
下面我们说的是基于文件系统的角度来看文件的类型:
-:(在ls -l 命令中,-rw-------第一个字段是文件类型用减号表示普通文件)常规文 件,但是在其他命令中用f表示普通文件。
d: directory,目录文件,是实现路径映射的。
b: block device,块设备文件,以“block”为单位进行随机访问。
c: character device,字符设备文件,支持以“character”为单位,进行线性(有次序)访 问。
l: symbolic link,符号链接文件,相当于windows上的快捷键,是软连接文件
p: pipe,命名管道
s: socket,套接字文件,的确是用来实现套接的,两个进程之间通信时进行套接。用于 实现服务提供的。
下面我们看这样一个问题:
用ls -l 命令来查看一个普通的目录跟查看设备文件目录:
解:我们发现前者显示一个数字,后者显示两个数字。这说明后者这两个数字并不是表示大小,这就是这个特殊的地方,后者两个数字其实是表示设备号的,(这就是人与计算机的区别,人容易识别名字,计算机容易识别数字,)在计算机中,为了对同一类型的设备进行区分,就用了主设备号,和次设备号,
[root@localhost ~]# ls -l
total 3888
-rw-------. 1 root root 1484 Jul 24 21:03 anaconda-ks.cfg
-rw-------. 1 root root 4952064 Jul 2423:04 core.10718
对比:
[root@localhost ~]# ls -l /dev
total 0
crw-rw----. 1 root video 10, 175Sep 19 20:46 agpgart
crw-rw----. 1 root root 10, 54 Sep 19 20:46 autofs
majornumber: 主设备号,逗号左边的是主设备号,用于标识设备类型,进而确 定要加载的驱动程序,同一类型的设备,主设备号相同。
minornumber: 次设备号,逗号右边的是次设备号,用于标识同一类型设备的具 体的某一个设备
基本命令:
命令类型:
外部命令:在linux文件系统中的某个路径下,有一个与命令名相同的文件。
shell内建命令:在linux文件系统中没有对应的文件。(shell自身是外部命令)
思考:为什么会有内建命令?
其实就是他在一个外部命令,这个命令就是bash,只是他功能强大,里边有很多功能,所以有了内建命令,
typeCOMMAND //区分命令是内部命令还是外部命令。
如果是内部命令就显示:isa shell builtin
如果是外部命令就显示命令对应的文件路径:is /bin/awk
注意:命令可以有别名,别名可以与原名相同,此时原名被隐藏。如果此时要运行 原命令,则用\COMMAND
演示:
命令别名:
系统上可以自己定义别名,也可以用命令查看别名列表
查看别名列表:
alias //单独执行时,可以查看系统中的别名列表,注意不同版本,不同环境下看到 的列表是不一样的。
alias命令本是一个内部命令
定义别名:
aliasNAME(自定义名字)='COMMAND' //如果COMMAND中没有空格,则不需要 引号
注意:在命令行中定义的别名,只在当前shell进程中有效,对其他shell无效,或者退 出再登陆后就失效了,要想定义的别名永久生效,需要在配置文件中定义。
在linux中,清屏命令是clear,执行单独的clear,就是清屏。
撤销别名:
unaliasNAME //这个名字是自定义的名字。
任何在进程中定义的东西,随进程的结束而结束。
which命令:
查看man 帮助,
which- shows the full path of (shell) commands.(翻译:显示命令的完整路径)
语法:
which [options] [--] programname [...]
用的不多
--skip-alias: 忽略别名。
演示:
[root@localhost ~]# which which //显示which本身的路径
alias which='alias | /usr/bin/which--tty-only --read-alias --show-dot --show-tilde'
/usr/bin/which which本身就是个别名
[root@localhost ~]# which ls //显示ls命令的路径,如果是别名,则会显示别名信息
alias ls='ls --color=auto'
/bin/ls
[root@localhost ~]# which --skip-alias ls //忽略别名,只显示路径
/bin/ls
[root@localhost ~]# \which ls //执行原命令用反斜线,也会看到which原命令不支持显示 命令别名
/bin/ls
[root@localhost ~]#
whereis命令:
whereis- locate the binary, source, and manual page files for a command(翻译:显示二进制文件,源文件,手册页文件,命令)
语法:
whereis[-bmsu] filename...
常用选项:
-b Search only for binaries.只显示二进制文件
-m Search only formanual sections.只显示man手册页
注意:我们可以应用whereis命令来判断某个命令是否有man手册页。
演示:
[root@localhost ~]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@localhost ~]# 有两个man手册页,前者man1p 中的1p表示可打印格式
二进制文件
who命令:
who - show who is logged on(翻译:登录当前系统的用户相关信息,即谁登陆了)
语法:
who[OPTION]... [ FILE | ARG1 ARG2 ]
选项: -b: --boot ,time of last system boot:显示此次系统启动的时间
-d: --dead, print dead processes 显示死亡的进程 -l: --login, print system login processes显示登录进程
-u: --users, list users logged in 显示登录的用户,比单独执行who多显示了登 录时间
-r: --runlevel, print current runlevel显示当前的运行级别
w命令:
w- Show who is logged on and what they are doing.(翻译:不仅显示谁登陆了, 还显示用户在干什么)可以理解成增强版的who
语法:
w- [husfiV] [user]
bash的基本特性:
命令历史:
shell进程会在其会话中保存此前用户提交执行过的命令
查看此前执行过的命令列表:
history //单独执行
[root@localhost ~]# type history
history is a shell builtin //发现history是内部命令,也就是shell提供的功能,所以说是 bash特性
[root@localhost ~]#
定制history的功能,可通过环境变量实现:
HISTSIZE: shell进程可保留的命令历史的条数,能保存1000条
HISTFILE: 持久保存命令历史的文件;
.bash_history: 每个用户家目录下存放的属于自己的历史命令。
注意:我们用history查看此前执行的命令是包括命令历史文件和shell缓存中的全部命令,但是我们用cat .bash_history查看历史命令时,只能查看历史文件中的命令。
只有当用户退出当前登录的shell时,系统才会将命令从缓存中保存到历史文件中。
HISTFILESIZE: 命令历史文件的大小,可以保存命令为1000
[root@localhost ~]# echo $HISTFILE
/root/.bash_history
[root@localhost ~]# echo $HISTFILESIZE
1000
[root@localhost ~]#
注意:在shell进程的缓存中可以存储1000条命令,在历史文件中也可存放1000条命令,这两者间的命令存放量不冲突。所以有可能用history查看时有时会出现命令编号大于1000的现象。
history命令的用法:
-c:清空命令历史
-doffset [n]:删除指定命令历史,后面的n表示从编号开始一直删除n个记录,(offset: 偏移量,其实就是命令的历史编号。
-r: 从命令历史文件读取命令到缓存中
-w: 把缓存中的命令历史保存到历史文件中。
history#: 显示最近的#条命令(#表示数字)
调用:命令历史列表中的命令
用叹号命令!
!#: 再一次执行历史列表中的第#条命令
!!: 再一次执行上一条命令
!STRING: 再一次执行命令历史列表中最近以用户指定的字符串开头的命令
注意:命令的重复执行有时候需要依赖于幂等性;
调用上一条命令的最后一个参数:
按快捷键:先按一下Esc然后松开再按点号 .
或
在命令行的命令后面输入 !$
控制命令历史记录的方式:
环境变量: HISTCONTROL
取值有三个:
ignoredups: 忽略重复的命令
ignorespace: 忽略以空白字符开头的命令
ignoreboth:以上两者同时生效
修改变量的值:
NAME='VALUE' //变量名=要指定的值,但是这种修改仅在当前shell下有效。