简介
Linux是一个开源的操作系统,广泛应用于服务器、桌面、嵌入式系统等多个领域。Linux是一种类UNIX的操作系统,由芬兰人Linus Torvalds于1991年首次发布。它是开源的,意味着源代码可以被任何人自由地使用、修改和分发。
Linux系统由Linux系统内核、系统级应用程序两部分组成。
内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO等。
系统级应用程序,可以理解为出厂自带程序,可供用户快速上手操作系统,如:文件管理器、任务管理器、图片查看、音乐播放等。
比如,播放音乐,无论用户使用自带音乐播放器或是自行安装的第三方播放器均是由播放器程序,调用内核提供的相关功能,由内核调度CPU解码、音响发声等。
内核是免费、开源的, 这也就代表了:任何人都可以获得并修改内核,并且自行集成系统级程序。提供了内核+系统级程序的完整封装,称之为Linux发行版。
目录结构
Linux的目录结构是一个树形结构,不同于Windows可以有如C盘、D盘等多个盘符,Linux没有盘符这一概念,只有一个根目录"/",所有的文件都在它之下。
同时Windows使用反斜杠"\"来表示层级关系,例如:C:\Users\chn\Desktop,而在Linux中则为正斜杠"/"来表示层级关系,例如:/Users/chn/Desktop,第一个"/"代表根目录,其他"/"则表示层级关系。

- /: 根目录。一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始;
- /root: 系统管理员root的目录;
- /usr: 系统应用程序存放的目录,一般安装的软件在该目录下;
- /etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件;
- /home: 系统普通用户的目录;
- /var: 放置系统执行过程中经常变化的文件,例如日志文件。
Linux命令
学习Linux, 本质上是学习在命令行下熟练使用Linux的各类命令。
命令行就是Linux终端(Terminal),是一种命令提示符界面。以纯"字符"的形式操作系统,可以使用各种字符化命令对系统发出操作指令。
命令则是Linux程序。一个命令就是一个Linux的程序。命令没有图形化页面, 可以在命令行(终端中)提供字符化的反馈。
Linux命令有其通用的格式:
sql
command [-options][parameter]
命令本体 可选选项 可选参数
- command:命令本身
- -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
- parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等
示例:
java
ls -l /home/itheima
//ls是命令本身,-l是选项,/home/itheima是参数
//意为以列表的形式,显示/home/itheima目录内的内容
------------------------------------------------------------------------------------------------------------------------------------------
cp -r test1 test2
//cp是命令本身,-r是选项,test1和test2是参数
//意为复制文件夹test1成为test2
如果对某个命令不了解,可以使用命令man或者选项--help,其中man为command的简写,后跟你指定的命令,并输出有关该命令详细信息,而--help为选项,需要跟在命令之后,输出内容也相对简洁。
ls:查看内容
先来看ls命令,其作用是列出目录下的内容。
java
ls [-a -l -h] [Linux路径]
- -a -l -h是可选的选项
- Linux路径是此命令可选的参数
当不使用选项和参数,直接使用ls命令本体时,意为以平铺形式,列出当前工作目录下的内容:

上文提到了工作目录,在命令行中,其默认会加载home目录来作为当前的工作目录,所以ls列出的内容就是home目录中的内容。而HOME目录为 每个Linux操作用户在Linux系统的个人账户目录,默认路径为:/home/用户名。
接下来来看添加命令参数,即路径,例如"ls /"意为查看根目录下的所有文件:

然后来看选项[-a -l -h],其分别有不同的含义:
- -a (all):显示所有文件和目录,包括以点(.)开头的隐藏文件。
- -l (long):以列表的形式(竖向)列出文件和目录的详细信息。
- -h (human-readable):以易于阅读的格式显示文件大小(例如,使用KB、MB、GB等)。
这些选项可以组合在一起使用,以获取更详细且易读的输出。例如:ls -a -l、ls -la、ls -al都表示展示当前目录下所有文件和目录(包括隐藏文件)的详细列表。
同时选项和参数也可组合使用,例如la -al /意为显示根目录的详细列表。

cd:切换工作目录
当Linux终端打开时,会默认以用户的home目录为当前的工作目录,我们可以通过cd命令来更改当前所在的工作目录。cd命令来自英文:Change Directory(更改目录)。
语法:cd [Linux 路径]
cd命令无需选项,只有参数,表示要切换到哪个目录下。cd命令直接执行,不写参数,表示回到用户的HOME目录。

pwd:查看当前工作目录
上文我们通过ls来验证当前工作目录的位置,但这并不合适。我们可以通过pwd命令来查看当前所在的工作目录。pwd命令来自:Print Work Directory(打印工作目录)。
语法:pwd
pwd命令很简单,其没有选项和参数,直接输入pwd即可。

相对、绝对、特殊路径符
上文我们介绍了cd命令,如果我们想要通过cd命令,切换工作目录到Desktop文件夹中去,有两种写法:
- cd /home/chen/Desktop
- cd Desktop
上述两种写法,都可以正确的切换目录到指定的Desktop中。第一种为绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头。第二种则为相对路径:以当前目录为起点,描述路径的一种写法,路径无需描述以/开头。

此时工作目录已经处于/home/chen/Desktop下,如果我们想要回到上级目录/home/chen中,不仅可以借助cd命令,还可借助特殊路径符:
- ".":表示当前目录,如cd ./Desktop表示切换到当前目录下的Desktop目录内,和cd Desktop效果一致。
- "..":表示上一级目录,如cd ..即可切换到上一级目录,cd ../..切换到上二级目录,以此类推。
- "~":表示当前用户的家目录,如cd ~即可切换到HOME目录或cd ~/Desktop,切换到HOME内的Desktop目录。
- '-':表示上次访问的目录,如cd-即可切换到上次访问的目录中适用于需要频繁在两不同目录下操作文件的情况。
- '/':根目录

mkdir:创建目录
通过mkdir命令可以创建新的目录(文件夹),mkdir来自:Make Directory。
语法:mkdir [-p] Linux路径
其中参数是必填的,表示要创建的文件夹的路径,相对路径或绝对路径均可,可以有多个。-p选项可选:表示自动创建不存在的父目录,适用于创建连续多层级的目录。

以上都是创建单级目录,如果我们想要创建多级目录系统就会报错:

此时就需要在路径前加上-p,来告诉系统我要创建多级目录:

创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作,涉及到权限问题,HOME外无法成功。
如果感觉FinalShell上内容太多,可使用快捷键ctrl+l或者输入命令clear一键清屏。
文件操作命令
touch:创建文件
可以通过touch命令来创建文件。
语法:touch Linux路径
其无选项,但参数必填。表示要创建的文件路径。

touch用于创建新的空文件或更新已有文件的时间戳,而mkdir则用于创建新的目录(文件夹)。文件夹和文件除了展示的颜色不同,使用ls -l时,文件夹的开头为d,文件的开头为~。
cat:查看文件内容
有了文件后,我们可以通过cat命令查看文件的内容。
不过,现在我们还未学习vi编辑器,无法向文件内编辑内容,所以我们先在图形化中,手动在刚刚创建的test.txt文件内添加内容,以测试cat命令:打开test.txt文件---编辑内容---点击右上角的save。
语法:cat Linux路径
同样没有选项,只有参数必填,参数表示被查看的文件路径。

more:查看文件内容
more命令同样可以查看文件内容,但与cat不同的是,cat会直接将内容全部显示出来,而more则支持翻页,如果文件内容过多,可以一页页的展示。
语法:more Linux路径
没有选项,参数必填,参数表示被查看的文件路径。
因为刚刚创建的文本文件内容较少,无法体现翻页这一功能,所以我们查看Linux系统中内置的一个文件,路径为:/etc/services,可以使用more命令查看:more /etc/services
- 在查看的过程中,通过空格翻页
- 通过q退出查看

less:查看文件内容
用于分屏显示文件内容,每次只显示一页 内容,适合于查看内容较多的文本文件
语法:less [参数] 文件
参数选项:-N | 对输出的所有行编号
使用less的操作键:
- 空格键 | 显示手册页的下一屏
- Enter/上下光标键 | 一次滚动手册页的一行
- b | 回滚一屏
- f | 前滚一屏
- q | 退出
- /word | 搜索word字符串
cp:复制
可通过cp命令来复制文件\文件夹,cp命令来自英文单词:copy。
语法:cp [-r] 参数1 参数2
- -i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认
- -f 覆盖已经存在的目标文件而不提示
- -r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
- -v 显示拷贝进度
- 参数1,Linux路径,表示被复制的文件或文件夹
- 参数2,Linux路径,表示要复制去的地方
即将文件\文件夹1复制至路径2处。

mv:移动
mv命令可以用于移动文件\文件夹;当路径不变,相当于改名。来自英文单词:move
语法:mv 参数1 参数2
- 参数1,Linux路径,表示被移动的文件或文件夹
- 参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在
即将文件\文件夹1复制至路径2处,不存在则改名。

rm:删除
rm命令可用于删除文件、文件夹,rm命令来自英文单词:remove
语法:rm [-r -f] 参数1 参数2 ...... 参数N
- -r选项,可选,用于删除文件夹
- -f选项,可选 ,表示force,强制删除(不会弹出提示确认信息)
- 普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示
- 所以一般普通用户用不到-f选项
- 参数1、参数2、......、参数N表示要删除的文件或文件夹路径,按照空格隔开

通配符*
rm命令支持通配符*,用来做模糊匹配。
- 符号*表示通配符,即匹配任意内容(包含空)
- test*,表示匹配任何以test开头的内容
- *test,表示匹配任何以test结尾的内容
- *test*,表示匹配任何包含test的内容
强制删除,-f选项
普通用户使用-f是没有作用的,我们在强制删除时系统会弹出提示:
"rm: remove directory 'test'? y"来确认是否删除。
我们可以切换至root用户(超级管理员)su - root,输入密码自己设置的密码,临时切换到root用户体验。还可以通过输入exit命令退回到普通用户。

rm是一个危险的命令,特别是在处于root(超级管理员)用户的时候。请谨慎使用。
在root管理员用户下执行:rm -rf / 或者rm **-rf /***效果等同于在Windows上执行C盘格式化。
查找命令
上文我们所介绍的Linux命令,其本体就是一个个的二进制可执行程序,和win系统中的.exe文件一样,输入cd命令,就是执行了cd程序。我们就可以通过which命令查看这些程序的存放位置。
which:查看程序位置
通过which命令可查看所使用的一系列命令的程序文件的存放位置。
语法:which 要查找的命令
find:查找文件
可以通过find命令搜索指定的文件。
语法:find 起始路径 -name "被查找文件名"
与rm删除文件一样,其也可以与通配符搭配使用。

find命令还可以按照文件大小查找文件。
语法:find 起始路径 -size +或-n[kMG]
- +、-表示大于或小于
- n表示大小数字
- kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB
示例:
- 查找小于10KB的文件:find / -size -10k
- 查找大于100MB的文件:find / -size +100M
- 查找大于1GB的文件:find / -size +1G

如果查找的程序太多,可通过快捷键ctrl+c快速停止查找
统计命令
grep:查找关键字
grep命令可以从文件中通过关键字过滤文件。是"Global regular expression print(全局正则表达式打印)的缩写。
语法:grep [-n] 关键字 文件路径
- 选项-n,可选,表示在结果中显示匹配的行的行号。
- 选项-i,可选,表示可忽略大小写。
- 选项-v,可选,表示不包含匹配文本的所有项(相当于求反)
- 参数1必填:关键字,表示过滤的关键字,带有空格或其他特殊符号,建议使用" "将关键字包围起来
- 参数2必填:文件路径,表示要过滤内容的文件路径,可作为内容输入端口

wc:统计数量
wc命令可以统计文件的行数、单词数量等,是"Word Count"的缩写。
语法:wc [-l -w -c -m] 文件路径
- 选项,-l,统计行数
- 选项,-w,统计单词数量
- 选项,-c,统计bytes数量
- 选项,-m,统计字符数量
- 参数,文件路径,被统计的文件,可作为内容输入端口(后文介绍)
加选项的话输出"该选项数量 文件名",不加选项则输出"行数 单词数 字节数 文件名"。

管道符:|
学习了grep命令后,我们再来学习一个新的特殊符号,管道符: "|",其含义为: 将管道符左边命令的结果,作为右边命令的输入。

在该图的例子中,使用管道 (|) 将text.txt的结果作为 grep 命令的内容输入以搜索"nice"字符串。同时相对于上文的grep语句,少了test.txt,这就是将text.txt的结果作为 grep 命令的内容输入了。
在上文我们遇到了搜索到的结果过多的情况,这里我们就可以借助管道符,实现从根目录开始查找所有大小超过1GB的文件的数量。:find / -size +1G | wc -l
输出指令
echo命令
可以使用echo命令在命令行内输出指定内容
语法:echo 输出的内容
无需选项,只有一个参数,类似于print表示要输出的内容,复杂内容可以用""包围。还可搭配反引号`(esc下方的~键),被其包围的内容,会被作为命令执行,而非普通字符。
重定向符:>和>>
- >:将左侧命令的结果,覆盖写入到符号右侧指定的文件中
- >>:将左侧命令的结果,追加写入到符号右侧指定的文件中

tail命令
其可以查看文件尾部内容,跟踪文件的最新更改。
语法:tail [-f -num] Linux路径
- 参数,Linux路径,表示被跟踪的文件路径
- 选项,-f,follow表示持续跟踪文件最新更改,ctrl+c关闭
- 选项,-num,表示,查看尾部num行,不填默认10行
例子:
- tail test.txt:查看 test.txt 的最后10行
- tail -n 5 test.txt:查看 test.txt 的最后5行
- tail -f test.txt:命令实时跟踪 test.txt 文件的更新,ctrl+c关闭追踪
head命令
用于查看一个文件的前X行,不加参数默认为10行
语法:head [-num] 文件名
num为多少即为查看前多少行的内容。
重启与关机
- 关机指令
- shutdown -h now - 立即关机
- poweroff - 立即关机(等同于shutdown -h now)
- 重启指令
- shutdown -r now - 立即重启
- reboot - 立即重启
- 定时操作
- shutdown -h +10 - 10分钟后关机
- shutdown -r 20:30 - 指定时间重启
进程管理
程序运行在操作系统中,是被操作系统所管理的。为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个进程,并为每一个进程都分配一个独有的:进程ID(进程号)。
ps:查看进程
可以通过ps命令查看Linux系统中的进程信息,后参数有两种,一种为-aux,一种为-ef,
- aux显示CPU和内存使用率,适合查看资源占用
- ef显示进程关系(PID/PPID),适合查看进程树
语法:ps [-e -f]
- 选项:-e,显示出全部的进程
- 选项:-f,以完全格式化的形式展示信息(展示全部信息)
一般直接使用固定用法:ps -ef 列出全部进程的全部信息:

从左到右分别是:
- UID:进程所属的用户ID
- PID:进程的进程号ID
- PPID:进程的父ID(启动此进程的其它进程)
- C:此进程的CPU占用率(百分比)
- STIME:进程的启动时间
- TTY:启动此进程的终端序号。如显示?,则表示非终端启动
- TIME:进程占用CPU的时间
- CMD:进程对应的名称或启动路径或启动命令
还可以使用管道符配合grep来进行过滤来查看指定进程,例如:ps -ef | grep tail,即可准确的找到tail命令的信息

过滤不仅仅过滤名称,进程号\用户ID等等,都可以被grep过滤
如:ps -ef | grep 30001,过滤带有30001关键字的进程信息(一般指代过滤30001进程号)
kill:关闭进程
通过kill命令可以关闭Linux系统中的进程。
语法:kill [-9] 进程ID
- 选项-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

