Linux学习笔记

2023-12-10 21:12:16 Linux

[TOC]

看前须知

本笔记内容可结合视频配套使用:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等

本笔记基于黑马Linux课程原笔记基础上进行内容的增加,但是!

本笔记内容只是浅显的介绍了Linux的一些基本操作,更深层次的应用请自行查阅手册或网络查询有关内容!

  • 某个命令手册帮助:XX --help

Linux基础命令

Linux的目录结构

image-20221027214128453

  • /,根目录是最顶级的目录了
  • Linux只有一个顶级目录:/
  • 路径描述的层次关系同样适用/来表示
  • /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt

Linux命令格式基础

1712565022238

ls命令:查看目录文件

功能:列出文件夹信息,当不使用选项和参数时,即只使用 ls 本体就会以平铺形式显示当前工作目录的所有内容

语法:ls [-l -h -a] [参数]

  • 参数:被查看的文件夹,不提供参数,表示查看当前工作目录
    1712565246715
  • -l,以列表形式展示内容并查看更多信息
    1712566169372
  • -h,配合-l,以更加人性化的方式显示文件大小
    1712566408770

  • -a,显示隐藏文件
    1712566228273

当然,这些命令可以组合使用,比如以下三个命令(这三个命令作用是一样的):

  • ls -a -l
  • ls -al
  • ls la

1712566133133

隐藏文件、文件夹:

在Linux中以.开头的,均是隐藏的。

默认不显示出来,需要-a选项才可查看到。

1712566460464

pwd命令:查看当前文件路径

全称:==P==rint ==W==ork ==D==irectory

功能:展示当前工作目录

语法:pwd

1712566629115

  • 第一条命令式展示根目录下所有文件,包括隐藏文件
  • 第二条命令展示当前工作目录

cd命令:切换目录

全称: ==C==hange ==D==irectory

功能:切换工作目录

语法:cd [目标目录]

参数:目标目录,要切换去的地方,不提供参数时,默认切换到当前登录用户HOME目录/home/user

1712566736767

  • 需要注意的是,虚拟机开机的时候,默认的工作目录是/home/user,通过 pwd 命令显示当前工作目录,如果需要我们就可以通过 cd 命令切换到其他工作目录

HOME目录

每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。

  • 普通用户的HOME目录,默认在:/home/用户名

  • root用户的HOME目录,在:/root

登陆终端后,默认的工作目录就是用户的HOME目录

相对路径、绝对路径

  • 相对路径,==非==/开头的称之为相对路径

    相对路径表示以当前目录作为起点,去描述路径,如test/a.txt,表示当前工作目录内的test文件夹内的a.txt文件

  • 绝对路径,==以==/开头的称之为绝对路径

    绝对路径从开始描述路径

特殊路径符

  • .,表示当前,比如./test1,表示当前文件夹内的test1文件
    • 回到Home展示当前目录,然后展示进入、退出 /home/user/test/test1 目录
      1712567683201
  • ..,表示上级目录,比如../表示上级目录,../../表示上级的上级目录
    1712567535159
  • ~,表示用户的HOME目录,比如cd ~,即可切回用户HOME目录

需要注意的是,特属路径符不仅仅可以是使用在 cd 命令之中

mkdir命令:创建文件夹

全称:==M==a==k==e ==Dir==ectory`

功能:创建文件夹

语法:mkdir [-p] 参数

  • 参数:被创建文件夹的路径,这里不能省略奥
  • 选项:-p,可选,表示创建前置路径,就是自动创建不存在的父目录,适用于创建连续的多层级的目录

案例:/home/user 创建多层级文件夹路径 /home/user/test/test3/test3_1

1712574838213

注意:

  • 如果要创建多层文件夹,就要加上 -p 修饰,并且这会自动生成不存在的文件夹
  • 其中 ~ 特殊路径符表示用户的 /home/user 目录,所以我们才能不返回 /home/user 目录就能创建文件夹,如果我们不加 ~ 的话,就需要从根目录开始写出完整的路径了,如下所示:
    1712575279631

touch命令:创建文件

功能:创建文件

语法:touch 参数

  • 参数:被创建的文件路径

注意:

  • 参数必须填,并且参数表示的就是 XX路径下的XX文件,相对、绝对、特殊路径符均可使用
  • 创建前记得先查看一下当前目录是否已经存在同名文件了!
  • 创建时如果你不加文件后缀,那么这个文件就不能正常打开!

案例:

  • test1_1 文件夹下创建一个 test1.txt 文件:touch test1.txt
    1712578875456

cat命令:一次性查看所有文件内容

功能:查看文件内容

语法:cat 参数

  • 参数:被查看的文件路径

案例:查看 /home/user/test/test1/test1_1/test.txt 文件内容

  • 第一种方式是已经在目标文件夹下查看文件内容:cat test1.txt
  • 第二种就是通过路径制定查看某个路径下的文件内容:cat /路径/.../test1.txt
    1712579538017

more命令:分页查看所有文件内容

功能:查看文件,可以支持翻页查看

语法:more 参数

  • 参数:被查看的文件路径
  • 在查看过程中:
    • 空格键翻页(此外还有B、上下方向键也可)
    • q退出查看

cp命令:复制文件、文件夹

功能:复制文件、文件夹

语法:cp [-r] 参数1 参数2

  • 参数1,被复制的
  • 参数2,要复制去的地方
  • 选项:-r,可选,复制文件夹使用,表示递归
    • 文件管理系统就是二叉树,递归就会向下遍历所有子文件目录和文件内容,所以 -r 会覆盖文件夹内重复的所有内容,未重复的就是新增内容

示例:

  • cp a.txt b.txt,复制当前目录下a.txt为b.txt
  • cp a.txt test/,复制当前目录a.txt到test文件夹内
  • cp -r test test2,复制文件夹test到当前文件夹内为test2存在

案例:

  • /home/user/test/test1/test1_1 文件夹里的 /test.txt 文件复制到 /home/user/test/test1 目录下
    1712580806256

mv命令:移动文件、文件夹

功能:移动文件、文件夹

语法:mv 参数1 参数2

  • 参数1:被移动的目标
  • 参数2:要移动去的地方,参数2如果不存在,则会进行改名(重命名)

注意:

  • 移动文件的时候最好是加上 /,比如:mv /xx路径/.../dir1/ /xx路径/.../dir2/ 这样当夹的的时候,可以防止因为路径不存在导致文件夹被重命名
  • 如果你不加 / ,就表示重命名了

案例:

  • 重命名文件
    1712585387567
  • 移动文件至上级目录
    1712585471808
  • 重命名 test3 文件夹后移动至 test1 文件夹下
    1712586230611

rm命令:删除文件、文件夹

全称:==r==e==m==ove

功能:删除文件、文件夹

语法:rm [-r -f] 参数1 ... 参数n ...

  • 参数:表示要删除的文件或文件夹路径, 支持多个,每一个表示被删除的文件或文件夹,空格进行分隔
  • 选项:-r,删除文件夹使用
  • 选项:-f,强制删除,不会给出确认提示,一般root用户会用到

注意:

  • 删除时建议要同类型,要么全是文件夹,要么全是文件,如果你要同时删除文件夹和文件,就必须要加上 -f 进行强制删除!
    • 即:rm -rf 文件 文件夹 ...
  • 当然,虽然会给你提示错误信息,但是吧,该删除的还是会删除的

案例:

  • 删除文件
    1712586646749
  • 删除文件夹
    1712586759797
  • 同时删除指定文件、文件夹(其实这里在执行 rm test1_1 test2.txt 时,虽然报错了,但事实上 test2.txt 已被删除了,同理加上 -r 命令后也已经把文件夹删除了
    1712587074933

    rm命令很危险,一定要注意,特别是切换到root用户的时候

如以下命令,请千万不要在root管理员用户下执行!

  • rm -rf /
  • rm -rf /*
    这效果等同于在Windows上执行盘符格式化操作!

rm拓展:* 通配符模糊匹配

这里只是做一下浅显的内容介绍

rm命令支持通配符 *,用来做模糊匹配

符号 * 表示通配符,即匹配任意内容(包含空),示例:

  • test*,表示匹配任何以 test 开头的内容
  • *test,表示匹配任何以 test 结尾的内容
    • *test*,表示匹配任何包含 test 的内容

案例:

  • 删除所有包含 test 的文件和文件夹
    1712588470590

which命令:查看命令的程序本体文件路径

我们前面学习的 Linux 命令,其实他们得本体就是一个个的二进制可执行程序,和 Windows 中的 .exe 文件相似

功能:查看命令的程序本体文件路径

语法:which 参数

  • 参数:被查看的命令

案例:

1712589558696

find命令:查找文件

功能:搜索文件

详细用法:find --help
1712591078591

功能一:按文件名搜索

语法:find 起始路径 -name "参数"(也就是被查文件名)

  • 路径,搜索的起始路径
  • 参数,搜索的关键字,支持通配符, 比如:``test表示搜索任意以test结尾的文件

注意:

  • 如果你要在整个系统中完成搜索,那你就需要切换到 root 用户获取管理员权限
    • 执行命令:su -root
    • 输入密码:123456(和你的user密码一样)

案例:

  • 查看 /home/user/ 文件下所有包含 test 字符串的文件和文件夹
    1712590155667

功能二:按文件大小查找

语法:find 起始路径 -size + | -n[kMG]

  • +、- 表示大于和小于
  • n 表示大小数字
  • kMG 表示大小单位,k(小写字母)表示kb,M(表示MB),G(表示GB)

案例:

  • 查找 /home/user/ 目录下小于10kb的文件:find ~/ -size -10k
  • 查找 /home/user/ 目录下大于100MB的文件:find ~/ -size +100M
  • 查找 /home/user/ 目录下大于1G的文件:find ~/ -size +1G

grep命令:过滤关键字

功能:从文件中他通过关键字过滤文件行

语法:grep [-n] "关键字" 文件路径

  • 选项 -n,可选,表示在结果中显示匹配的行的行号。
  • 关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来
  • 文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口

案例:

  • /home/user 目录下查看内容后,通过关键字过滤文件内容
    1712592027733

  • /home/user/test/test2 目录下查看后,通过关键字过滤文件内容
    1712591949891

参数文件路径,可以作为管道符的输入

wc命令:统计功能

功能:统计文件的行数、单词数量等

语法:wc [-c -m -l -w] 文件路径

  • 选项,-c,统计bytes数量
  • 选项,-m,统计字符数量
  • 选项,-l,统计行数
  • 选项,-w,统计单词数量
  • 参数,文件路径,被统计的文件,可作为内容输入端口

参数文件路径,可作为管道符的输入

案例:
1712592308754

管道符 |:将左边的结果作为右边的输入

写法:xx | xx

功能:将符号左边的结果,作为符号右边的输入

案例:

  • cat -n test/test1/test2.txt | grep 阿米诺斯,将 cat xx.txt 的结果,作为 grep 命令的输入,用来过滤 阿米诺斯 关键字
    1712593209125
  • cat -n test/test1/test2.txt | grep 阿米诺斯 | wc -wm,嵌套使用,将 test2.txt 文本里的所有内容,通过 grep 进行过滤筛选出所有的 阿米诺斯 关键字,然后再通过 wc -wm 统计字符数量和单词数量
    1712593414467

最常用的就是用来查进程了:ps -ef | grep 你要查的进程名
1712593764994

echo命令:输出指定内容

功能:在命令行中输出指定内容,如果输出内容比较浮渣,请用双引号 "" 将内容包围

语法:echo 参数

  • 参数:被输出的内容

案例:

  • 输出 阿米诺斯
    1712643505744
  • 输出带有空格或\等特殊符号
    1712643652452

反引号:` 实现命令输出

功能:被两个反引号包围的内容,会作为命令执行

案例:

  • echo `pwd`,会输出当前工作目录
    1712644621300

重定向符:覆盖和追加

功能:将符号左边的结果,输出到右边指定的文件中去

  • >,表示覆盖输出 + 追加 阿米诺斯4test2.txt

  • >>,表示追加输出

案例:

  • 时代少年团 覆盖 test1.txt 内容
    1712645006938

    • 追加 阿米诺斯4test2.txt
      1712644853383
  • 通过管道符 | 追加内容:
    1712645841422

  • 通过 echo 实现多行增加
    1712646091389

  • 将一个文件内容覆盖到另一个文件中
    1712646379772

tail命令:查看文件尾部内容

功能:查看文件尾部内容,跟踪文件的最新更改

语法:tail [-f -num] 参数

  • 参数:被查看的文件,表示被跟踪的文件路径
  • 选项:-f,持续跟踪文件修改,此时命令不会终止,并且文件内容如果末尾有新增,则会输出新增内容,只能通过 ctrl + c 终止 tail -f ... 命令
  • 选项:-num,表示查看尾部多少行,不填默认 10 行

案例:

  • 演示查看倒数五行内容
    1712646906765
    • 演示查看倒数五行内容的前提下,持续跟踪,并且新增 阿米诺斯6 tes
      1712646962178
      1712647060188
      1712647082282

head命令:查看文件头部内容

功能:查看文件头部内容

语法:head [-n] 参数

  • 参数:被查看的文件
  • 选项:-n,查看的前n行数

VI、VIM编辑器

vi\vim 编辑器介绍

vi\vim 是 visual interface 的简称 , 是 Linux 中最经典的文本编辑器

同图形化界面中的 文本编辑器一样, vi 是命令行下对文本文件进行编辑的绝佳选择。

vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜

色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。

vi\vim 编辑器的三种工作模式

命令模式( Command mode )

  • 命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。
  • 此模型下,不能自由进行文本编辑。

输入模式( Insert mode )

  • 也就是所谓的编辑模式、插入模式。
  • 此模式下,可以对文件内容进行自由编辑。

底线命令模式( Last line mode )

  • 以:开始,通常用于文件的保存、退出。

1712648018745

通过 vi/vim 命令编辑文件,会打开一个新的窗口,此时这个窗口就是:命令模式窗口
命令模式是 vi 编辑器的入口和出口,如右图
• 进入 vi 编辑器会进入命令模式
• 通过命令模式输入键盘指令,可以进入输入模式
• 输入模式需要退回到命令模式,然后通过命令可以进入底线命令模式

快速体验

  1. 使用: vim hello.txt ,编辑一个新文件,执行后进入的是命令模式
  2. 在命令模式内,按键盘 i ,进入输入模式
  3. 在输入模式内输入:时代少年团 阿米诺斯.
  4. 输入完成后,按 esc 回退会命令模式
  5. 在命令模式内,按键盘 : ,进入底线命令模式
  6. 在底线命令内输入:wq ,保存文件并退出 vi 编辑器

案例:
通过 vim /home/user/test/test1/test1.txt 进入 test1.txt 文本,并新增内容 “时代少年团” 后保存退出

  • 进入文本,在键盘上点击 i 键后进入插入模式,在下面新增 “时代少年团” 文本
    1712649770574
    1712649983458

  • esc 键退出插入模式,并且按 : 键进入底层命令模式 (需要注意的是,输入法记得切换为英文,否则输出 英文的 : 键就会变为输出中文的 键!)
    1712650081822
    1712650200953
    1712650242563

其余操作就自己去试试吧

命令模式及快捷键

如果需要通过 vi/vim 编辑器编辑文件,请通过如下命令:

  • vi 文件路径
  • vim 文件路径

vim 兼容全部的 vi 功能,后续全部使用 vim 命令

  • 如果文件路径表示的文件不存在,那么此命令会用于编辑新文件
  • 如果文件路径表示的文件存在,那么此命令用于编辑已有文件

image-20221027215841573

image-20221027215846581

image-20221027215849668

底线命令快捷键

image-20221027215858967

补充:关于命令的选项的说明

我们学习的一系列Linux命令,它们所拥有的选项都是非常多的。

比如,简单的ls命令就有:-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项,可以发现选项是极其多的。

课程中, 并不会将全部的选项都进行讲解,否则,一个ls命令就可能讲解2小时之久。

课程中,会对常见的选项进行讲解, 足够满足绝大多数的学习、工作场景。

查看命令的帮助

可以通过:命令 --help查看命令的帮助手册

1712650373523

查看命令的详细手册

可以通过:man 命令查看某命令的详细手册

1712650430571