欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux入门基础之 上

程序员文章站 2022-04-29 14:00:23
Linux 入门基础 一、Linux 系统安装 安装方法网上很多,请自行百度 二、Linux 基本操作 2.1、GNOME图形界面基本操作 操作类似于Windows系统操作 打开每一个文件夹都会打开一个新的窗口,这可以修改 打开文件夹 Edit Preference Behavior,勾选上 Alw ......

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 命令
    • 显示当前用户信息
      • id
    • 修改当前用户密码
      • passwd
  • bash 作业管理

    • 在后台运行进程
      • 在命令后添加一个 &
    • 暂停某个程序
      • 通过 ctrl + z 或者发送信号 17
    • 管理后台作业
      • jobs : 查看后台运行的进程是否在运行
      • bg : 后面加进程编号,控制一个进程继续在后台运行
      • fg : 后面加进程编号,将后台运行的进程拉回到前台来运行

2.3、linux 文件系统结构

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 也是回到家目录
      • 上一个工作目录:" - "

Linux入门基础之 上

  • 图中当前目录是 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 中定义的自动挂载项