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

演示:

bash的基础特性_特性

命令别名:

         系统上可以自己定义别名,也可以用命令查看别名列表

         查看别名列表:

         alias          //单独执行时,可以查看系统中的别名列表,注意不同版本,不同环境下看到                    的列表是不一样的。

alias命令本是一个内部命令

bash的基础特性_特性_02

定义别名:

         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多显示了登                                                                                       录时间

 

                            演示bash的基础特性_特性_03

 

                   -r:     --runlevel, print current runlevel显示当前的运行级别

                            bash的基础特性_基础_04

                   w命令:

                            w- Show who is logged on and what they are doing.(翻译:不仅显示谁登陆了,                 还显示用户在干什么)可以理解成增强版的who

                            语法:

                                     w- [husfiV] [user]

bash的基础特性_基础_05

 

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下有效。