以下所有内容均摘抄自 Linux达人养成计划 I
1. 发展历史
Unix ⋙ Minix ⋙ Linux
Minix 是某个教授为了教授 Unix 操作系统而开发的操作系统,开源并了解操作系统较好的平台。
查看某网点服务器的 OS :www.netcraft.com
2. Linux 与 Windows 不同
- Linux 严格区分大小写
- Linux 中所有内容以文件形式保存,包括硬件
- Linux 不靠扩展名区分文件类型,以文件权限区分文件类型。但 Linux 有一些约定俗成的扩展名,这些扩展名其实只是为了方便人们管理而已,对于 Linux 本身是没有意义的。
3. 分区和挂载(回头好好学习)
磁盘分区是使用分区编辑器再磁盘上划分几个逻辑部分。碟片一旦划分成数个分区,不同类的目录与文件可以存储在不同的分区中
分区类型:
- 主分区:最多只能有 4 个(这是由硬盘结构决定的,不是 OS 决定的)
- 扩展分区:将其中一个主分区当作扩展分区,扩展分区的出现也是为了解决只允许 4 个主分区的限制
- 一块硬盘也最多只能由 1 个扩展分区
- 主分区加扩展分区最多有 4 个分区
- 不能写入数据,只能包含逻辑分区
- 逻辑分区
格式化,又称为逻辑格式化,他是指根据用户选定的文件系统(如 FAT16、FAT32、NTFS、EXT2 等),在磁盘的特定区域写入特定数据,在分区中画出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间。 简单理解,格式化就是重新将分区划分为若干个等大小(大小是由文件系统决定的)的数据块(block),并创建文件分配表、目录表用于文件管理磁盘。显示的效果就是清空了分区的数据然后再重新整理分区
总之,格式化作用就是(重新)指定分区的文件系统类型
硬盘设备文件名: /dev/....
- /dev/hda1 : h 代表是 IDE 硬盘接口,a 代表是第一个硬盘,1 代表是第一个分区
- /dev/sda1 : s 代表是 SCSI 硬盘接口或 SATA 硬盘接口
- 其中编号 1-4 是留给主分区使用,编号 5 以后才指的是逻辑分区
Linux 中目录作为挂载点(见下图),所谓挂载就是把一个目录挂在某一个硬盘分区(如 /dev/sda1)上的过程。官方点的说法,挂载就是给每个分区分配挂载点。挂载更广的定义是为物理设备分配挂载点
物理设备如果不进行挂载,就没法使用。
必须分区:
- /:根分区
- swap 分区:理解成虚拟内存。当你的实际内存小于等于 4G 时,swap 推荐大小是实际内存的 2 倍;而实际内存大于 4G 时,swap 推荐大小等于实际内存大小即可。
推荐分区(即不必需但最好这样):
- /boot:启动分区,存放系统启动所需文件 。为了避免这种情况:不独立出来就会存放在根分区中,当根分区填满了数据时,系统就无法启动。解决方案就是将启动文件从根分区中独立分区。
4. 安装
virtualbox 连网 :https://cizixs.com/2017/03/09/virtualbox-network-mode-explained/
5. 常用命令
5.1 命令基本格式
家目录:对于 root 用户,家目录为 /root ;对于一般用户,家目录为 /home/<username>/
ls 命令
ls -a
可以看到隐藏文件,隐藏文件的文件名是以 . 开头。隐藏文件的意义在于表示该文件是系统文件,一般情况都不需要去操作它,隐藏起来避免误操作。
# ls
# ls -l
# ls -l /etc/
# ls -lh
需要注意的是,ls -l
中会显示文件的权限信息。
上面的解读:该文件的类型是一个文件,其所有者拥有读写权限,其所有者所在的用户组只拥有读权限,其他用户只拥有读权限。
Linux 文件类型有 7 种:文件、目录、软链接文件、块设备文件、字符设备文件、套接字文件和管道文件
ls -i
显示出文件的唯一编号(相当于文件的 id)
6. 常见目录的作用
根目录下的常见目录的作用:
- /bin : 命令保存目录,保存所有用户都能使用的命令
- /sbin : 超级用户使用的命令保存目录。
- /boot : 启动目录,保存系统启动有关的文件
- /dev : 设备文件目录,保存系统设备文件
- /etc : 配置文件目录,保存系统配置文件
- /home : 普通用户的家目录
- /lib : 系统库目录,保存系统库文件
- /mnt : 系统挂载目录,一些外设的挂载点
- /media : 挂载目录,同上,作用相同
- /tmp : 临时文件目录
- /proc : 内存的挂载点
- /sys : 同上
- /var : 系统相关文档文件目录
- /usr : 系统软件资源目录
7. Shell
- shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求一遍运行程序的界面系统级程序,用户可以用 shell 来启动、挂起、停止甚至编写一些程序
- shell 还是一个功能相当强盗的编程语言,也是解释执行的脚本语言,在 shell 中可以直接调用 Linux 系统命令。
举例子,用户想要给内核传递计算机命令,首先会在命令行界面(这也是 shell)输入命令;然后,shell 按照 ASCII 码表把命令翻译成机器语言 (即 01) 后;然后,shell 将翻译好的机器语言传给内核;然后,内核调用硬件处理指令;当硬件处理完返回结果给内核;接着,内核将结果返回给 shell,此时结果还是机器语言;接着,shell 将结果按照 ASCII 码表翻译;最后,将翻译结果返回给用户。
shell 的作用:合起来就是起到一个命令行解释器的作用
- 接收用户输入的命令,即命令行界面。
- 用户与内核中间的翻译官:把命令翻译成机器学习,再传递给内核;内核的结果返回给 shell,shell 进行翻译后返回给用户。
Linux 使用的是 B shell,Unix 使用的是 C shell。使用 echo $SHELL
查看当前使用的 shell 类型
[root@localhost home]# echo $SHELL // 查看当前使用的 shell 类型
/bin/bash
[root@localhost home]# sh // 切换成 sh 类型的 shell
sh-4.1# exit
exit
[root@localhost home]# csh // 切换成 csh 类型的 shell
[root@localhost /home]# exit
exit
7.2 shell 脚本执行
shell 脚本最大的优势:可以调用系统命令
#!/bin/bash
# the first program hello.sh
echo "hello" # 直接调用系统命令
第一行的代码 #!/bin/bash
作用是标记这是一个 shell 脚本。在纯 shell 语言填写的脚本,加不加都能正常运行。但是如果脚本包含其他语言,不加也会无法执行。所以要求加上且写在第一行。
8. 用户和用户组
- /etc/passwd :存放当前系统中所有用户信息。该文件每行数据的含义 用户名:密码占位符:用户名编号:用户组编号:用户注释信息:用户家目录:shell 类型(一般为 /bin/bash)
- /etc/shadow :存放当前系统中所有用户的密码信息。该文件每行数据的含义 用户名:密码
- /etc/group : 存放当前系统中所有用户组信息。该文件每行数据的含义 组名:组密码占位符:组编号:组中用户名列表
- /etc/gshadow : 存放当前系统中用户组的密码信息。该文件每行数据的含义 组名:组密码:组管理者:组中用户名列表
用户可以同时属于多个组,但是只能属于一个主要组,多个附属组。
密码单独存放的原因:用户组/用户普通信息和密码信息的敏感度不同,造成了两者读取权限要求不同。故此,划分为两个文件存放是满足两者读取权限要求
如果需要暂时暂停除了 root 之外,所有普通用户登陆系统(如系统维护时),则创建一个 /etc/nologin 文件即可实现。
创建用户并赋予 sudo 权限
# groupadd developer
# useradd -g developer hhx
# passwd hhx
# visudo
visudo
打开 /etc/sudoers 文件,并增加一行 %developer ALL = (ALL) ALL
让整个组都具有 sudo 权限或者 hhx ALL=(ALL) ALL
仅让该用户有 sudo 权限