linux的主要特性
- linux是一个基于文件的操作系统(一切皆文件 )
操作系统需要和硬件进行交互, 对应Linux来说这些硬件都是文件,比如: 操作系统会将 硬盘, 鼠标, 键盘, 显示屏等抽象成一个设备文件来进行管理。 - 可以同时登陆多个用户,并且每个用户可以同时运行多个应用程序。
内核
内核空间+用户空间
Linux 的内核主要由 5 个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口(分为网络协议和驱动程序)、进程间通信。
- 内存管理 MMU
内存管理是多个进程间的内存共享策略。在Linux中,内存管理主要说的是虚拟内存。
虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。
每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。 - 虚拟文件系统 VFS
在 Linux 下支持多种文件系统,如 ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、smb、ncp、iso9660、sysv、hpfs、affs 等。
目前 Linux 下最常用的文件格式是 ext2 和 ext3。 - 进程间通信
Linux 操作系统支持多进程,进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux 的进程间通信是从 UNIX 系统继承过来的。Linux 下的进程间的通信方式主要有管道、信号、消息队列、共享内存和套接字等方法。
目录结构(绿色表示可执行)
操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都从“根”开始,用“/”代表,并且延伸到子目录。Linux 则通过“挂接”的方式把所有分区都放置在“根”下各个目录里。
在linux中根目录的子目录结构相对是固定的(名字固定), 不同的目录功能是也是固定的
- bin: binary, 二进制文件目录, 存储了可执行程序, 今天要将的命令对应的可执行程序都在这个目录中
- sbin: super binary, root用户使用的一些二进制可执行程序
- etc: 配置文件目录, 系统的或者用户自己安装的应用程序的配置文件都存储在这个目录中
- lib: library, 存储了一些动态库和静态库,给系统或者安装的软件使用
- media: 挂载目录, 挂载外部设备,比如: 光驱, 扫描仪
- mnt: 临时挂载目录, 比如我们可以将U盘临时挂载到这个目录下
- proc: 内存使用的一个映射目录, 给操作系统使用的
- tmp: 临时目录, 存放临时数据, 重启电脑数据就被自动删除了
- boot: 存储了开机相关的设置
- home: 存储了普通用户的家目录,家目录名和用户名相同
- root: root用户的家目录
- dev: device , 设备目录, Linux中一切皆文件, 所有的硬件会抽象成文件存储起来,比如:键盘, 鼠标
- lost+found: 一般时候是空的, 电脑异常关闭/崩溃时用来存储这些无家可归的文件, 用于用户系统恢复
- opt: 第三方软件的安装目录
- var: 存储了系统使用的一些经常会发生变化的文件, 比如:日志文件
- usr: unix system resource, 系统的资源目录
- /usr/bin: 可执行的二进制应用程序
- /usr/games: 游戏目录
- /usr/include: 包含的标准头文件目录
- /usr/local: 和opt目录作用相同, 安装第三方软件
linux:起始节点为根目录(/root)
命令解析器(命令是否可以被解析)
limin@limin-virtual-machine:/$
- limin 用户名(通过whoami可以查看当前用户名)
- limin-virtual-machine 机器名称
- :间隔符
- / 表示当前所在的工作目录(/home等)(pwd–查看当前工作目录)
- ~ 表示当前用户的家目录(/home)
- $ 表示当前用户是普通用户 # 则是管理员用户,可以通过su命令切换用户
工作原理(查找是否有对应的可执行程序:如何查找?):
命令解析器在Linux操作系统中就是一个进程(运行的应用程序), 它的名字叫做bash,通常我们更习惯将其称之为shell (即: sh)。
- 使用which命令可以查看是否有命令的对应可执行程序。
- 在Linux中有一个叫做PATH的环境变量, 里边存储了一些系统目录 (windows也有, 叫 Path)
# 通过 **echo** 命令可以查看环境变量 PATH 中的值, 在shell中变量名前加 $ 就是取值
[root@VM-8-14-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- 命令解析器需要依次搜索 PATH中的各个目录, 检查这些目录中是否有用户输入的指令
如果找到了, 执行该目录下的可执行程序, 用户输入的命令就被执行完毕了
如果没有找到, 继续搜索其他目录, 最后还是没有找到, 会提示命令找不到(command not found), 因此无法被执行
命令快捷键
- Ctrl+p 显示输入的上一个历史命令 从输入的最后一个命令往前倒, 也可以使用 ↑键
- Ctrl+n 显示输入的下一个历史命令 也可以使用 ↓键
- Ctrl+u 删除光标前的部分字符串
- Ctrl+k 删除光标后的部分字符串
- history 输入的历史指令
由于很定shell命令的开头字母是相同的, 在这种情况下,
按一次Tab是不会自动补齐的,我们可以连续按两次Tab键,在当前终端中就可以显示出所有匹配成功的shell命令