Linux 入门基础
一、Linux 系统安装
- 安装方法网上很多,请自行百度
二、Linux 基本操作
2.1、GNOME图形界面基本操作
-
操作类似于Windows系统操作
-
打开每一个文件夹都会打开一个新的窗口,这可以修改
- 打开文件夹-Edit-Preference-Behavior,勾选上 Always open in browser windows ,关闭该文件夹后重新打开文件夹,文件夹的操作就跟Windows一样了
2.2、Bash基本操作
2.2.1 SHELL 的概念
- Shell 叫做 壳 ,Linux操作系统底层是有一个内核(Kernel),内核用来去实现一些上层服务、上层命令、上层应用所需要的基本功能,比如说底层磁盘的读写,网络的连接,网络的通信,键盘驱动、鼠标驱动、进程调度、内存管理、图形页面等等都是由操作系统的 Kernel 去完成的。Kernel 我们是没有办法直接去对它进行控制的,因为一些安全问题,一些权限问题,用户是不允许直接去操控 Kernel 的,这个时候就需要一个 Shell 程序。Shell 的功能就是把我们用户的一些指令去传递给 Kernel ,翻译成 Kernel 可以理解的信息。
所以我们所有当前的操作都是由一个 Shell 传递给 Kernel 的。 - Shell分为 CLI 与 GUI 两种
- CLI: Command Line Interface 命令行界面Shell
- BASH
- GUI: Graphical User Interface 图形界面Shell
- GNOME - 在 Linux 系统里面,命令行操作是 Linux 主要管理方式,图形界面能完成的命令行基本都难完成,命令行能完成的图形界面不一定能完成。
2.2.2 BASH 命令行操作
-
提示符
-
# : 代表当前是以根用户也就是 root 用户身份登录
- 表示拥有最高的管理员权限,也就是当前是操作都很危险,可以破坏系统
-
$ : 代表当前是普通用户身份登录
- 输入:“ su - ” 后提示输入密码,输入密码后就是 root 用户身份登录了
-
-
命令一般由三部分组成
- 命令
- 选项
- 参数
-
基本命令
-
hostname : 查看当前主机名
-
ls : list 的缩写,列出当前目录下的所有文件
-
uname: 显示当前系统的基本信息(底层内核的信息)
这是不带任何参数的命令,但是几乎所有的命令都可以带参数。
-
uname -r : 不带参数的命令返回信息有点少,加上 -r 参数后返回信息变成了内核版本号
-
uname -a : 显示所有信息
命令后接一个 - 和一个字母,这是单字符参数,也可以写成两个 - 和一个单词,如:
uname --all ,这个命令和上面的 uname -a 功能是一样的。
一般都使用单字符参数。
-
firefox : 表示打开火狐浏览器,输入程序的命令就是打开该程序
火狐浏览器打开后再返回命令行界面时没有返回提示符,按 Ctrl + C 可以终止当前命令,退出到提示符下,可以在输入命令时在后面加入参数让程序在后台运行
-
firefox & :任何命令后加 & 表示将该命令放到后台运行,不会干扰当前命令行。(命令行是多进程多任务终端)
-
clear : 清除屏幕
-
-
使用 Tab 键来简化命令输入
- 自动补全命令
- 自动补全文件名
- 无法自动补全参数
Linux 命令或者文件名有很多前几个字母是相同的,输入的字母只要能和其他命令或文件名区分开,按 Tab 键就能自动补全,不能区分开时按两下 Tab 键就会显示所有以输入的字母开头的命令或文件名。
不输入命令直接按两下 Tab 键会提示是否列出所有的命令
例如:
$unam<tab>
$uname
$ls Dow<tab>
$ls Downloads
-
历史记录
- Bash 会保存你输入命令的历史记录,可以通过键盘的上下按键查看上一条或下一条命令,也可以使用 history 命令来查看操作过的所有命令
-
通过历史记录简化操作
- !! : 重复前一个命令
- !字符 : 重复前一个以“ 字符 ”开头的命令
- !num : 按照历史记录的序号执行命令
- !?abc : 重复之前包含 abc 的命令
- !-n : 重复 n 个命令之前的那个命令
-
搜索命令历史记录
-
可以通过 Ctrl + r 来在历史记录中搜索命令
(reverse-i-search) '':
-
重新调用前一个命令中的参数
esc键 + . : 输入命令后按 esc 键,然后按 .
-
-
命令行通配符
-
Bash Shell 支持以下通配符:
* : 匹配零个或多个
? : 匹配任意一个字符
[0-9] : 匹配一个数字范围
[abc] : 匹配列表里任何字符
[^abc] : 匹配列表以外字符
-
-
切换用户
- 在 CLI 中,通过 su 命令切换用户
- su - : 切换到 root 用户并使用一个新的运行环境,输入 exit 退出
- su 后加 - 和不加 - 的区别就是是否创建一个新的环境,一般使用都加 -
- sudo : 使用管理员用户身份运行命令(非 root 用户)
- sudo 命令
- su - : 切换到 root 用户并使用一个新的运行环境,输入 exit 退出
- 显示当前用户信息
- id
- 修改当前用户密码
- passwd
- 在 CLI 中,通过 su 命令切换用户
-
BASH 作业管理
- 在后台运行进程
- 在命令后添加一个 &
- 暂停某个程序
- 通过 Ctrl + z 或者发送信号 17
- 管理后台作业
- jobs : 查看后台运行的进程是否在运行
- bg : 后面加进程编号,控制一个进程继续在后台运行
- fg : 后面加进程编号,将后台运行的进程拉回到前台来运行
- 在后台运行进程
2.3、Linux 文件系统结构
- Linux 文件系统为一个倒转的单根树状结构
- 文件系统的根为 " / "
- 文件系统严格区分大小写
- 路径使用 " / " 分隔,(Windows 中使用 " ")
2.3.1 当前工作目录
- 每一个 shell 或系统进程都有一个当前工作目录
- 使用 pwd 命令可以显示当前的工作目录
2.3.2 文件名称
- 文件的名称大小写敏感
- 名称最多可以为 255 个字符
- 除了 " " 外,都是有效字符(文件的命名最好体现文件的功能,尽量不要使用特殊字符)
- 通过 touch 命令可以创建一个空白文件或者更新已有文件的时间
- 以 " . " 开头的文件为隐藏文件,ls -a 命令中会显示很多以 . 开头的文件,隐藏文件大多数都是配置文件,轻易不要去动。
2.3.3 列出目录内容
" ls " 命令用来列出目录内容
- 相关参数
- ls -a : 显示所有文件(包括隐藏文件)
- ls -l : 显示详细信息
- ls -R : 递归显示子目录结构
- ls -ld : 显示目录和链接信息
2.3.4 查看文件类型
通过 file 命令可以查看文件的类型
2.3.5 绝对路径与相对路径
- 绝对路径:以 " / " 开头,递归每级目录直到目标的路径。不受当前所在工作目录限制
-
- 相对路径:以当前目录为起点,到的目标的路径。受当前所在目录限制
- cd 命令可以用来切换目录
- 上一级目录:" .. "
- 当前目录:" . "
- 用户家目录:" ~ " ,在任何目录下输入 cd 直接按 Enter 也是回到家目录
- 上一个工作目录:" - "
- cd 命令可以用来切换目录
-
图中当前目录是 linuxcast ,目标目录是 sa ,从 linuxcast 目录到 sa 目录分别使用绝对路径和相对路径如下:
- 绝对路径:/var/log/sa
- 相对路径:../../var/log/sa
以后写程序或写脚本的时候一般使用绝对路径!
2.4、Linux 文件基本操作
2.4.1 创建和删除文件
- 通过 touch 命令可以创建一个空文件或更新文件时间
- 通过 rm 命令可以删除文件或目录,常用参数:
- -i : 交互式
- -r : 递归的删除包括目录中的所有内容
- -f :强制删除,没有警告提示(使用时需十分谨慎)
2.4.2 创建和删除目录
- 通过 mkdir 命令创建一个目录
- 通过 rmdir 命令删除一个空目录
- 通过 rm -f (-f) 命令删除一个非空目录
2.4.3 复制文件、目录
- 使用 cp 命令复制文件或目录
- cp 源文件(文件夹) 目标文件(文件夹)
touch linuxcast
cp linuxcast linuxcast2 复制到当前文件夹并重命名为 linuxcast2
cp linuxcast linuxcast.net 复制到别的文件夹下,文件名还是 linuxcast
-
常用参数:
-
-r : 递归复制整个目录树
不加参数的 cp 命令只能复制文件,如果要复制一个文件夹需要加 -r 的参数
-
-v : 显示详细信息
-
2.4.4 移动、重命名文件或目录
-
通过命令 mv 命令移动或者重命名文件或目录
- mv 文件 目标目录
- 如果指定文件名,则可以重命名文件
mv linuxcast2 linuxcast.net/cast 将文件 linuxcast2 移动到 linuxcast.net 文件夹下并重命名为cast touch abc 新建文件abc mv abc hello 在当前目录下将文件 abc 重命名为 hello
2.5、Linux 系统常用命令
2.5.1 日期时间
- 命令 date 用以查看、设置当前系统时间:
- date -u : 查看 UTC 时间
- 格式化显示时间:+%Y--%m--%d
- date -s "20:20:20" : 修改当前时间为 20:20:20
- 命令 hwclock (clock) 用以显示硬件时钟时间
- 命令 cal 用以查看日历
- 命令 uptime 用以查看系统运行时间,有几个用户登录,及系统平均负载
2.5.2 输出和查看命令
- 命令 echo 用以显示输入的内容
echo 'hello word'
- 命令 cat 用以显示文件内容
- 如果文件中内容很长,前面的内容会略过,直接显示最后几行,不太方便
- 命令 head 用以显示文件的头几行(默认10行)
- -n 指定显示的行数
- 命令 tail 用以显示文件的末尾几行(默认10行)
- -n 指定显示的行数
- -f 追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示加入的内容)
- 命令 more 用于翻页显示文件内容(只能向下翻页)
- 命令 less 用于翻页显示文件内容(带上下翻页)
2.5.3 查看硬件信息
- 命令 lspci 用以查看 PCI 设备
- -v : 查看详细信息
- 命令 lsusb 用以查看 USB 设备
- -v : 查看详细信息
- 命令 lsmod 用以查看加载的模块(驱动)
2.5.4 关机、重启
- 命令 shutdown 用以关闭、重启计算机
- shutdown [ 关机、重启] 时间
- -h 关闭计算机
- -r 重新启动
- 如:
- 立即关机: shutdown -h now
- 10分钟后关机: shutdown -h +10
- 23:30分关机: shotdown -h 23:30
- 立即重启: shotdown -r now
- 命令 poweroff 用以立即关闭计算机
- 命令 reboot 用以立即重启计算机
2.5.5 归档、压缩
- 命令 zip 用以压缩文件
- zip linuxcast.zip myfile
- 命令 unzip 用以解压缩 zip 文件
- unzip linuxcast.zip
- 命令 gzip 用以压缩文件
- gzip linuxcast.net
- 命令 tar 用以归档文件 ( tar 是归档命令,不是压缩命令)
- tar -cvf out.tar linuxcast
- tar -xvf linuxcast.tar 打开或释放归档(打开在当前目录下)
- tar -cvzf backup.tar.gz /etc 归档并压缩,最常用的归档压缩命令
- -z 参数将归档后的归档文件进行 gzip 压缩以减少大小
2.5.6 查找
- 命令 locate 用以快速查找文件、文件夹
- locate keyword
- 此命令需要预先建立数据库,数据库默认每天更新一次,所以优点查找非常快,缺点是新加进来的数据,数据库没有更新的话会找不到文件,可用 updatedb 命令手工建立、更新数据库
touch aabbcc 新建文件aabbcc
locate aabbcc 找不到文件
updatedb 手工更新数据库,相当于扫描整个操作系统
locate aabbcc 此时就能找到文件
-
命令 find 用以高级查找文件、文件夹
-
find 查找位置 查找参数
-
如:
-
find . -name *linuxcast* 在当前目录下查找文件名包含 linuxcast 的所有文件
-
find / -name *.conf 在根目录下(也可以说整个操作系统或硬盘)查找所有以 .conf 结尾的文件
-
find / -perm 777 在硬盘中查找所有权限是 777 的文件
-
find / type d 在硬盘中查找所有文件类型是目录的文件
-
find . -name "a*" -exec ls -l {} ; 查找后的结果再执行命令
find . -name "a*" 是查找所有以 a 开头的文件;-exec 是执行的意思;" -exec " 和 " {} ; " 是固定格式,整个的意思就是:把以 a 开头的文件找到后作为参数传递给 " -exec " 和 " {} ; " 之间的命令(这里是 ls -l )
-
-
find 支持很多种的查找条件,常用的如下:
- -name 文件名
- -perm 权限
- -user 查找全部属于某个特定用户的文件
- -group 查找全部属于某个特定组的文件
- -ctime 基于文件修改时间的查找
- -type 文件类型
- -size 基于文件大小的查找
-
2.6、Vi 文本编辑器
2.6.1 VI 和 VIM
- vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发,当时名字叫 ex。
- vi 支持绝大多数操作系统(最早在 BSD 上发布),并且功能已经十分强大。
- 1991 年 Bram Moolenaar 基于 vi 进行了改进,发布了 vim,加入了对 GUI 的支持、
- vim 已经不仅仅是普通意义上的文本编辑器(如 Windows 上的记事本),而是被广泛的作为在文本编辑、文本处理、代码开发等等用途。
- Linux 中知名的文本编辑器还有 emacs ,它的功能比 vim 还要强大。
2.6.2 VIM
- 绝大多数 Linux 系统上均安装有 vim ,vim 比 vi 的功能更为强大,所以建议大家使用 vim 而非 vi ,两者使用方法相同。
- 命令 vim 可以启动 vim 编辑器
- 一般通过 vim + 目标文件路径 的形式使用 vim
- 如果目标文件已存在,则 vim 打开该文件
- 如果目标文件不存在,则 vim 新建并打开该文件
2.6.3 VIM 的三种工作模式
- 命令模式(常规模式)
- vim 启动后,默认进入命令模式,任何模式都可以通过按 esc 键回到命令模式(可以多按几次)。
- 命令模式下可以通过键入不同的命令完成定位、选择、复制、翻页、粘贴、删除、撤销等等操作
- 常用命令:
- i 在光标前插入文本
- o 在当前行的下面插入新行
- dd 删除整行
- yy 将当前行的内容放入缓冲区 (复制当前行)
- n+yy 将 n 行的内容放入缓冲区 (复制 n 行)
- p 将缓冲区的文本放入光标后(粘贴)
- u 撤销上一个操作
- r 替换当前字符
- / 查找关键字
- 编辑模式(插入模式)
- 在命令模式中按 " i " 键,即可进入编辑模式,在编辑模式可以输入编辑文本内容,使用 esc 键可以返回到命令模式
- 末行模式(ex 模式)
- 在命令模式中按 " : " 键可以进入末行模式,光标会移动到底部左下角,在这里可以保存修改或退出 vim
- 常用命令如下:
- :w 保存当前修改
- :q 退出
- :wq 保存并退出
- :q! 强制退出,不保存修改
- :x 保存并退出,相当于 :wq
- :set number 显示行号
- :! 系统命令 执行一个系统命令并显示结果 如 :! who
- :sh 切换到命令行,使用 Ctrl + d 切换回 vim
三、磁盘基本概念
3.1、磁盘基本概念
- cylinder - 柱面
- sector - 扇区
- head - 磁头
3.2、磁盘在 Linux 中的表示
- Linux 所有设备都被抽象为一个文件,保存在 /dev 目录下
- 设备名称一般为 hd[a-z] 或 sd[a-z] ( [a-z]为分区号 ),如:hda、hdb、sda、sdb
- IDE 设备的名称为 hd[a-z] ,SATA、SCSI、USB 等设备的名称为 sd[a-z]
3.3、分区概念
- 将一个磁盘逻辑的分为几个区,每个区当做独立磁盘,以方便使用管理
- 不同分区用:设备名称+分区号 方式来表示,如:sda1、sda2
- 主流的分区机制分为 MBR 和 GPT 两种
3.4、MBR
- MBR (Master Boot Record)是传统的分区机制,应用于绝大多数使用 BIOS 的 PC 设备
- MBR 支持 32bit 和 64bit 系统
- MBR 支持分区数量有限
- MBR 只支持不超过 2T 的硬盘,超过 2T 的硬盘将只能使用 2T 空间(有第三方解决方法)
- MBR 分区
- 主分区
- 最多只能创建4个主分区
- 扩展分区
- 一个扩展分区会占用一个主分区位置
- 逻辑分区
- Linux 最多支持63个 IDE 分区和15个 SCSI 分区
- 主分区
3.5、GPT
- GPT (GUID Partition Table)是一个较新的分区机制,解决了 MBR 的很多缺点
- 支持超过 2T 的磁盘
- 向后兼容 MBR
- 必须在支持 UEFI 的硬件上才能使用
- 必须使用64bit 系统
- Mac、Linux 系统都能支持 GPT 分区格式
- Windows7 64bit、WindowsServer2008 64bit 支持 GPT
3.6、FDISK 分区工具
- fdisk 是来自 IBM 的老牌分区工具,支持绝大多数操作系统,几乎所有的 Linux 的发行版本都装有 fdisk ,包括在 Linux 的 rescue 模式下依然能够使用。
- fdisk 是一个基于 MBR 的分区工具,所以如果需要使用 GPT ,则无法使用 fdisk 进行分区
- FDISK 操作
- fdisk 命令只有具有超级用户权限才能够运行
- 使用 fdisk -l 可以列出所有安装的磁盘及其分区信息
- 使用 fdisk /dev/sda 可以对目标磁盘进行分区操作
- 分区之后需要使用 partprobe 命令让内核更新分区信息,否则需要重启才能识别新的分区
- /proc/partitions 文件也可用来查看分区信息
四、Linux 文件系统
4.1、文件系统简介
4.1.1 文件系统简介
- 操作系统通过文件系统管理文件及数据,磁盘或分区需要创建文件系统之后才能够为操作系统使用,创建文件系统的过程又称之为格式化。
- 没有文件系统的设备又称之为裸(raw)设备
- 常见的文件系统有:fat32 、NTFS、ext2 、ext3、ext4、ext6、HFS 等
- 文件系统之间的区别:日志、支持的分区大小、支持的单个文件大小、性能等
- Windows 下的主流文件系统是:NTFS , Linux 下的主流文件系统是:Ext3、Ext4
- Linux 支持的文件系统
- ext2
- ext3
- ext4
- fat ( msdos )
- vfat
- nfs
- iso9660
- proc
- gfs
- jfs
4.1.2、MKE2FS 创建文件系统
- 命令 mke2fs 用来创建文件系统
- mke2fs -t ext4 /dev/sda3
- 常用参数
- -t 指定要创建的文件类型
- -b blocksize 指定文件系统块大小
- -c 建立文件系统时检查坏损块
- -L label 指定卷标
- -j 建立文件系统日志
4.1.3、MKFS
- 命令 mkfs 也可用于创建文件系统,相较于 mke2fs 简单,但是支持的参数较少,不能进行精细化的控制
- mkfs.ext3 /dev/sda3
- mkfs.ext4 /dev/sda3
- mkfs.vfat /dev/sda3
4.1.4、DUMPE2FS 查看文件系统
- 命令 dumpe2fs 可以用来查看分区的文件系统信息
- dumpe2fs /dev/sda2
4.1.5、JOURNAL 日志
- 带日志的文件系统(ext3、ext4)拥有较强的稳定性,在出现错误时可以进行恢复。
- 使用带日志的文件系统,文件系统会使用一个叫做 “两阶段提交” 的方式进行磁盘操作,当进行磁盘操作时,文件系统进行以下操作:
- 文件系统将准备执行的事务的具体内容写入日志
- 文件系统进行操作
- 操作成功后,将事务的具体内容从日志中删除
- 这样做的好处是,当事务执行的时候如果出现意外(如断电或磁盘故障),可以通过查询日志进行恢复操作。缺点是会丧失一定的性能(额外的日志读写操作)
4.1.6、E2LABEL 添加标签
- 命令 e2label 可以用来为文件系统添加标签(标签建议大小)
- e2label /dev/sda2 显示 sda2 的系统标签
- e2label /dev/sda2 LINUXCAST 将 sda2 的系统标签设置为 LINUXCAST
4.1.7、FSCK 检查并修复
- 命令 fsck 用来检查并修复损坏的文件系统
- fsck /dev/sda2
- 使用 -y 参数不提示而直接进行修复
- 默认 fsck 会自动判断文件系统类型,如果文件系统损坏较为严重,请使用 -t 参数指定文件系统类型
- 对于识别为文件的损坏数据(文件系统无记录),fsck 会将该文件放入 lost+found 目录
- 系统启动时会对磁盘进行 fsck 操作
4.2、文件系统挂载及使用
4.2.1 挂载操作
- 磁盘或分区创建好文件系统后,需要挂载到一个目录才能够使用
- Windows 或 Mac 系统会进行自动挂载,一旦创建好文件系统后会自动挂载到系统上,Windows 上称之为 C 盘、D 盘等
- Linux 需要手工进行挂载操作或配置系统进行自动挂载
4.2.2 MOUNT 挂载命令
- 在 Linux 中,我们通过 mount 命令将格式化好的磁盘或分区挂载到一个目录上
- mount /dev/sda3(要挂载的分区) /mnt(挂载点)
- 常用参数:
- 不带参数的 mount 命令会显示所有已挂载的文件系统
- -t 指定文件系统的类型
- -o 指定挂载选项 (如:mount -o remount,ro /dev/sdb1 /mnt/)
- ro, rw 以只读或读写形式挂载,默认是 rw
- sync 代表不使用缓存,而是对所有操作直接写入磁盘
- async 代表使用缓存,默认是 async
- noatime 代表每次访问文件时不更新文件的访问时间
- atime 代表每次访问文件时更新文件的访问时间
- remount 重新挂载文件系统
4.2.3 UMOUNT 卸载挂载
- 命令 umount 用来卸载已挂载的文件系统,相当于 Windows 中的弹出
- umount 文件系统/挂载点
- umount /dev/sda3
- umount /mnt
- 如果出现 device is busy 报错,则表示该文件系统正在被使用,无法卸载,可以使用以下命令查看使用文件系统的进程:
- fuser -m/mnt
- 也可使用命令 lsof 查看正在被使用的文件
- lsof /mnt
4.2.4 自动挂载
- 配置文件 /etc/fstab 用来定义需要自动挂载的文件系统,fstab 中每一行代表一个挂载配置,格式如下:
/dev/sda3 | /mnt | ext4 | defaults | 0 0 |
---|---|---|---|---|
需要挂载的设备 | 挂载点 | 文件系统 | 挂载选项 | dump、fsck相关选项 |
- 要挂载的设备也可以使用 LABEL 进行识别,使用 LABEL = LINUXCAST 取代 /dev/sda3
- mount -a 命令会挂载所有 fstab 中定义的自动挂载项