LINUX当中必须知道的概念和小技巧

终端

终端是一种物理设备,与程序无关。是用户与主机交互,必然用到的设备。

终端分为四种:

  1. 物理终端:直接接入本机的显示器和键盘设备console
  2. 虚拟终端:附加在物理终端之上的以软件的方式实现的终端,centos6默认启动6个虚拟终端
  3. 图形终端:附加在物理终端之上的以软件的方式实现的终端,属于虚拟终端
  4. 模拟终端:图形界面打开的命令行窗口,基本ssh或telnet远程打开的界面

NOTE:现次强调,终端与程序无关。

既然终端与程序无关,那么为什么我们可以在终端下输入命令呢?其实我们在输入的命令的地方是一种交互式接口程序,当终端运行起来之后会自动在终端之后运行这样一种程序方便人们与主机进行交互。这样的程序有很多种,最常用的就是shell和图形化的程序。

切换虚拟终端:ctrl+alt+fn(fn=f1-f6)

查看当前的终端使用:tty命令

查看当前使用的shell:echo $SHSHL

查看当前系统自带了多少shell:cat /etc/shells

[root@zhanghe ~]# tty
/dev/pts/0
[root@zhanghe ~]# echo $SHELL
/bin/bash
[root@zhanghe ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

命令行的操作

光标快速移动

ctrl+a到命令的第一个字符

ctrl+e到命令的最后一个字符

删除光标前后内容

crtl+w直接删除光标前一个单词

ctrl+k 删除光标后所有字符

ctrl+u删除光标前所有字符

ctrl+y粘贴删除的命令

ctrl+c不执行当前命令

清屏快捷键:ctrl+l,windows下的清屏是cls

命令行的种类

内部命令就是shell自带的命令。

外部命令是某个路径下的执行程序。

外部命令的执行依赖于PATH变量,这个变量是用户一登陆系统就准备好的,用户的执行的命令都去这个里面寻找。(windows系统中也是有环境变量的)

查看PATH变量:echo $PATH

[root@zhanghe ~]# echo $PATH
3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:

查看命令是内部命令还是外部命令用:type 命令,如果显示某个路径表示是这个外部命令,如果显示“cd is a shell builtin”表示这是个内部命令。

[root@zhanghe ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
[root@zhanghe ~]# type -a cd
cd is a shell builtin一

一级子目录

/boot:存放系统启动相关的文件

/dev:存放设备文件

/etc:存入配置文件

/home:用户的家目录

/root:管理员的家目录

/lib:库文件

/media和/mnt:挂载点目录

/opt:可选目录,第三方程序的安装目录

/proc:伪文件系统,内核的映射文件

/sys:伪文件系统,跟硬件设备相关的属性映射文件

/var:可变化的文件

/bin:可执行文件,用户的命令

/sbin:管理命令

/usr:一个单独的“小世界”。既然根下已经有了/bin,/sbin,/lib等目录,那么为什么在这个目录下面还有呢?因为根下的/bin,/sbin,/lib,都是系统启动的程序相关,而/usr下的的/bin,/sbin,/lib等等都是为了系统的能够启动的基本功能。

/usr/local:又是一个单独的“小世界“,这是第三方软件真正的安装位置,这一个小世界对系统的启动和功能都没有影响,即使没有也不会影响系统的启动和运行。

文件类型

f:普通文件

d:目录文件

l:符号链接文件

s:套接字文件

b:块设备文件

c:字符设备文件

p:管道文件

man章节

1 用户命令

2 系统调用

3 c库调用

4 设备文件及特殊字符

5 配置文件格式

6 游戏

7 杂项

8 管理命令

时间戳

任何文件都由元数据和数据组成,使用stat查看文件的时间戳
三个时间戳:
access time :访问时间,简写atime,读取文件内容
modify time:修改时间,mtime,改变文件内容(数据)
chage time:改变时间,ctime,元数据发生改变(对数据的描述)
touch的主要作用是更改时间戳
用来修改除了改变时间外的另外两个时间,改变时间也会随之改变。
[root@zhanghe tmp]# stat zhang
Access: 2017-06-28 03:59:18.000000000 +0800
Modify: 2017-06-28 03:58:50.000000000 +0800
Change: 2017-06-28 03:58:50.000000000 +0800
[root@zhanghe tmp]# touch -a zhang    #只修改访问时间,改变时间不受控制
[root@zhanghe tmp]# stat zhang
Access: 2017-06-28 04:02:34.000000000 +0800
Modify: 2017-06-28 03:58:50.000000000 +0800
Change: 2017-06-28 04:02:34.000000000 +0800
[root@zhanghe tmp]# touch -m zhang    #只更新修改时间,同样的改变时间不受控制
[root@zhanghe tmp]# stat zhang
Access: 2017-06-28 04:02:34.000000000 +0800
Modify: 2017-06-28 04:05:08.000000000 +0800
Change: 2017-06-28 04:05:08.000000000 +0800
[root@zhanghe tmp]# touch -m -t 202008080808 zhang
#只把修改时间更新为2020年8月8日8时8分
[root@zhanghe tmp]# stat zhang
Access: 2017-06-28 04:02:34.000000000 +0800
Modify: 2020-08-08 08:08:00.000000000 +0800
Change: 2017-06-28 04:07:47.000000000 +0800
[root@zhanghe tmp]# touch -a -t 202008080802 zhang
#只把访问时间更新为2020年8月8日8时2分
[root@zhanghe tmp]# stat zhang
Access: 2020-08-08 08:02:00.000000000 +0800
Modify: 2020-08-08 08:08:00.000000000 +0800
Change: 2017-06-28 04:11:21.000000000 +0800

hash

hash缓存的作用是:Remember or display program locations. 记住并显示程序的位置。

当我们从shell当中输入一个命令的完,shell会从PATH变量当中的路径去查找没有有相对应的二进制文件,如果没有找到就说输出命令没有找到,如果命令找了之后把这次查找中吸取经验把这个命令从哪里找到的会记到hash当中方便下使用,下次再命令时直接从目的找就可以了就不用去PATH当中挨个查找了,这样提高了工作的效率,忽然发觉,人真的应该向电脑学习。

[root@zhanghe ~]# hash     #查看hash表
[root@zhanghe ~]# hash -d cat   #删除hash表当中的cat记录
[root@zhanghe ~]# hash –r     #清空hash表  	

history

—a 追加命令历史到历史文件

append history lines from this session to the history file

—c清除历史列表的删除所有条目

clear the history list by deleting all of the entries

—d 6 删除缓存历史中的第六条记录

[root@zhanghe ~]# !!  #执行上一个命令
[root@zhanghe ~]# ! 6 #执行命令历史中第6个命令
[root@zhanghe ~]# !man   #执行历史命令中以最近一次man开头的命令

还有一个就是当前的命令想使用上一个命令的最后一个参数,比如你mkdir zhanghe ,又想rm –rf 了,可以输入完rm –rf 之后按ESC键后再按一个英文的点。

输入回车命令意味着什么?

当我们在交互式接口中输入命令回车,意味着告诉交互式接口把我输入的命令所对应的执行程序代码找到,并由其分析后提交给内核并运行起来,运行起来的程序表现为一个或多个进程。

当我们第一次使用某个命令的时候,会从$PATH变量中查找路径,查找到之后变缓存到hash里面,以后再使用这个命令的时候就不会从$PATH变量里面再找了,直接去hash里面查找路径。

当我们第一次使用某个命令的时候,终端会去查找$PATH里面的路径,查找到了之后会缓冲到hash里面,hash可以理解成内存中的一段空间。

hash的优先级是比PATH变量的优先级要高的,如果在hash中的有记录,但是记录错误,真正使用的时候也会报错的,出现这种情况就要清空缓存,help hash,hash –r清除全部缓存。

猜你喜欢

转载自www.cnblogs.com/yizhangheka/p/11107938.html