从0到1快速学会Linux操作系统,这一篇就够了!

发布于:2025-05-01 ⋅ 阅读:(18) ⋅ 点赞:(0)

 一、认识Linux

1.1什么是操作系统? 软件的一种,用户和计算机硬件之间的桥梁。

操作系统是计算机软件的一种,它主要负责: 作为用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作。 而计算机,如果没有操作系统,就是一堆无法使用的垃圾而已。

用户控制操作系统,操作系统安排硬件干活。不管是PC操作系统还是移动操作系统其功能都是:调度硬件进行工作,充当用户和硬件之间的桥梁。

1.2 什么是linux?保护模式下的操作系统

创始人 : 林纳斯 托瓦兹,Linux 诞生于 1991 年,作者上大学期间。因为创始人在上大学期间经常需要浏览新闻和处理邮件,发现现有的操作系统不好用 , 于是他决心自己写一个保护模式下的操作系统,这就是 Linux 的原型, 当时他 21 岁,后来经过全世界网友的支持 , 现在能够兼容多种硬件,成为最为流行的服务器操作系统之一。

1.3 什么是Linux内核?毛坯房

内核是 Linux 操作系统的核心系统级应用程序只是锦上添花。内核提供了 Linux 系统的主要功能,如硬件调度管理的能力。Linux 内核是免费开源的,任何人都可以查看内核的源代码,甚至是贡献源代码。可以通过:Linux内核官网下载地址https://www.kernel.org去下载 Linux 内核 。

内核无法被用户直接使用,需要配合应用程序才能被用户使用。 在内核之上,封装系统级应用程序,组合在一起就称之为Linux发行版。

1.4 什么是Linux 发行版?精装房

内核是免费、开源的,这也就代表了:
•  任何人都可以获得并修改内核,并且自行集成系统级程序。
•  提供了内核 + 系统级程序的完整封装,称之为 Linux 发行版。

任何人都可以封装Linux,目前市面上由非常多的Linux发行版,常用的如图。
任何人都可以封装Linux,目前市面上由非常多的Linux发行版,常用的如图。

1.5 Linux的优势有哪些?稳定+安全+高性能

1.    开源免费:无需购买许可证,节约成本。
2.    稳定可靠:可长期运行,无需频繁重启,适合高可用性需求。
3.    高安全性:强大的权限管理和快速漏洞修复,防御能力更强。
4.    资源占用低:高效利用硬件,适用于老旧设备或性能要求高的环境。
5.    灵活性强:支持多种发行版、脚本语言和工具,可定制化程度高。
6.    社区支持:全球开发者提供丰富文档和技术支持。

二、个人学习Linux的三种方式 

方式1:在虚拟机VMware上安装Linux,再通过第三方软件(例如Xshell、MobaXterm)远程连接到Linux服务器操作系统。

本文主要是记录如何从0学习Linux命令行,相关软件的安装及连接请参考其他博客的安装教程,这里我把所有的相关软件的官网地址都放在下面了,安装过程太过繁琐就不予演示了,谢谢理解。

1.VMware WorkStation官网下载地址:https://www.vmware.com/
1.1虚拟机安装请点击此链接查看这篇博客:https://blog.csdn.net/weixin_45806267/article/details/143982891
2.Ubuntu官网下载地址:https://ubuntu.com/download/desktop
2.1Ubuntu安装请点击该链接查看这篇博客:https://blog.csdn.net/weixin_45806267/article/details/143994126
3.CentOS官网下载地址:https://vault.centos.org/

方式2:在个人电脑上使用WSL获得Ubuntu系统环境

 (1)什么是WSL?

WSL:Windows Subsystem for Linux,是用于Windows系统之上的Linux子系统。
作用很简单,可以在Windows系统中获得Linux系统环境,并完全直连计算机硬件,无需通过虚拟机虚拟硬件。

(2)为什么要用WSL?

WSL作为Windows10系统带来的全新特性,正在逐步颠覆开发人员既有的选择。 传统方式获取Linux操作系统环境,是安装完整的虚拟机,如VMware。

实在是太方便了,简单、好用、轻量化、省内存,使用WSL,可以以非常轻量化的方式,得到Linux系统环境。

(3)怎么得到WSL?

方式3:通过阿里云、腾讯云、华为云等购买Linux云服务器进行学习

三、常见的Linux连接方法 

方法1:直接连接

你要连接的电脑和该服务器处于同一局域网(信息科连接机房内的Linux),此时可以直接连接,可以通过直接通过管理平台或者远程桌面到对应服务器上就行登录。

方法2:通过虚拟机连接

安装了虚拟机,通过虚拟机部署了Linux,此时您就也可以通过虚拟机进入Linux。

方法2:Windows cmd命令行连接

该方法必须确保Linux服务器的SSH服务端口22已经开启。

方法4:通过第三方软件(类似于通过navicat来高效管理数据库)

该方法必须确保Linux服务器的SSH服务端口22已经开启。

(1)既然决定使用命令行去学习Linux操作系统,那么就必须丰富一下工具的使用。 我们使用VMware可以得到Linux虚拟机,但是在VMware中操作Linux的命令行页面不太方便。

主要是: 内容的复制、粘贴跨越VMware不方便文件的上传、下载跨越VMware不方便。因此我们可以通过第三方软件(利用SSH安全外壳协议),远程连接登录控制操作Linux操作系统, 这样各类操作都会十分的方便。

以下是远程连接Linux常用的第三方软件(SSH远程连接工具)官网下载地址:
1.MobaXterm:https://mobaxterm.mobatek.net/
2.FinalShell:https://www.hostbuf.com/
3.Tabby:https://tabby.sh/
4.xshell:https://www.xshell.com/zh/
5.xshell:https://www.xshell.com/zh/free-for-home-school/

(2)如何查看Linux的IP地址并远程连接呢?
① 在Linux操作系统中,桌面空白右键点击:open in terminal
② 输入ifconfig,即可看到IP地址
② 在以上某一软件中配置好IP地址,以及Linux的账号密码后即可连接成功 

知识补充:什么是SSH?常用来作为远程登录Linux的安全协议

secure shell(SSH):安全外壳协议(安全的shell),是一个计算机网络协议(默认端口号为22), 是一种远程加密传输协议。通过SSH协议,可以在客户端安全(提供身份认证、信息加密)的远程连接LInux服务器或其他设备。

个人理解:是一个远程工具。利用SSH机制,可以在我们的办公PC终端和Linux之间建立一条安全的通道,我们通过这个通道可以远程访问连接操作Linux。

四、Linux 的目录结构

Linux 的目录结构是一个树型结构
Windows 系统可以拥有多个盘符 , 如 C 盘、 D 盘、 E 盘。
Linux 没有盘符这个概念 , 只有一个根目录 /,,所有文件都在它下面。

在 Linux 系统中,路径之间的层级关系,使用: / 来表示 

五、Linux 命令通用格式

无论是什么命令,用于什么用途,在 Linux 中,命令有其通用的格式: 命令+选项+参数

command   [-options]   [parameter ]                          语法中的 [],表示可选的意思 。

  • command 命令本体,即命令本身
  • [-options] 可选选项,控制命令的行为细节
  • [parameter ]可选参数,控制命令的指向目标 

六、Linux命令学习(通用格式: 命令+[选项]+[参数]

1 ls命令(list):列出当前目录下的内容

ls命令来自英文:list 列表,列出。

ls [-a -l -h] [Linux路径]

-a -l  -h 是可选的选项

  • Linux 路径是此命令可选的参数
  • 当不使用选项和参数,直接使用 ls 命令本体,表示:以平铺形式,列出当前工作目录下的内容 。
  • 直接输入ls命令,表示列出当前工作目录下的内容,当前工作目录是?

Linux系统的命令行终端,在启动的时候,默认会加载:当前登录用户的HOME目录【home目录是每个用户的个人工作空间】作为当前工作目录,所以ls命令列出的是HOME目录的内容。每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名 如:/home/root

1.1 ls -a 列出当前目录下的全部文件 

 1.2 ls -l 以列表的形式展示当前目录下的内容 

 1.3 ls -l -h 以列表的形式展示当前目录下的内容以及它们的大小

2  cd命令(Change Directory):切换当前工作目录

cd  [linux路径]  切换当前所在的工作目录

 当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录,我们可以通过cd命令,更改当前所在的工作目录。

cd命令来自英文:Change Directory:切换工作目录。

语法:cd  [linux路径]

cd命令无需选项,只有参数,表示要切换到哪个目录下 cd命令直接执行。不写参数,表示回到用户的HOME目录。

 3 pwd命令(Print Work Directory):查看当前工作目录

通过ls来验证当前的工作目录,其实是不恰当的。 我们可以通过pwd命令,来查看当前所在的工作目录。

pwd命令来自:Print Work Directory:打印当前工作目录。

语法: pwd命令,无选项,无参数,直接输入pwd即可。

4 相对路径、绝对路径和特殊路径符

4.1 绝对路径(具体路径):以根目录/为起点

根目录/为起点,描述路径的一种写法,路径描述以/开头。

4.2 相对路径:以当前所在目录为起点【更加简洁】

当前所在目录为起点,描述路径的一种写法,路径描述无需以/开头。

 4.3 特殊路径符

.  一个点表示当前目录,比如cd . 或 cd ./Desktop

..  两给点表示上一级目录,比如:回退到上一级cd ..  或回退到上一级的上一级 cd ../..

~ 一个波浪线表示用户的HOME目录,比如:cd ~ 或 cd ~/Desktop

4.4 练习 

1.当前工作目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对路径。 test/hello.txt

2.在当前工作目录的上级目录有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对路径。

../test/hello.txt

3.在HOME目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的路径,需要使用符号~ 。

~/test/hello.txt

5 mkdir命令(Make Directory):创建新的目录(文件夹)

mkdir来自英文:Make Directory

语法:mkdir [-P] [Linux路径] 

***参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可。

***-p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。 

mkdir -p 选项:如果想要一次性创建多个层级的目录,如下图(不加-p报错如下:)

[root@VM-8-12-centos ~]# mkdir test4/good/nb666
mkdir: cannot create directory ‘test4/good/nb666’: No such file or directory

会报错,因为上级目录test4和good并不存在,所以无法创建nb666目录。

可以通过-p选项,将一整个链条都创建完成。 

[root@VM-8-12-centos ~]# mkdir test4/good/nb666
mkdir: cannot create directory ‘test4/good/nb666’: No such file or directory

[root@VM-8-12-centos ~]# mkdir -p test4/good/nb666  --可以通过-p选项,将一整个链条都创建完成。

[root@VM-8-12-centos ~]# ls
test1  test2  test20250103  test3  test4

[root@VM-8-12-centos ~]# cd test4
[root@VM-8-12-centos test4]# ls
good

[root@VM-8-12-centos test4]# cd good
[root@VM-8-12-centos good]# ls
nb666

注意:mkdir创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作。

涉及到权限问题,HOME外无法成功。

6 touch命令:创建文件

touch命令是“Globally search a Regular Expression and Print”的缩写。

语法:touch Linux路径 

touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用

[root@VM-8-12-centos ~]# pwd
/root
[root@VM-8-12-centos ~]# ls
test0  test1  test2  test20250103  test3  test4

[root@VM-8-12-centos ~]# touch text.txt
[root@VM-8-12-centos ~]# ls
test0  test1  test2  test20250103  test3  test4  text.txt

-rw-r--r--   1 root root    0 Jan  3 19:59 text.txt
[root@VM-8-12-centos ~]# ls -l
total 24
drwxr-xr-x 2 root root 4096 Jan  3 19:47 test0
drwxr-xr-x 5 root root 4096 Jan  3 19:29 test1
drwxr-xr-x 2 root root 4096 Jan  3 19:27 test2
drwxr-xr-x 2 root root 4096 Jan  3 19:18 test20250103
drwxr-xr-x 2 root root 4096 Jan  3 19:31 test3
drwxr-xr-x 3 root root 4096 Jan  3 19:38 test4
-rw-r--r-- 1 root root    0 Jan  3 19:59 text.txt

 7 cat命令:查看文件内容

cat命令是“concatenate”的缩写。

语法:cat Linux路径

cat命令同样没有选项,参数必填,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用。

8 more命令:分页查看文件内容(内容过多时支持翻页展示)

more命令同样可以查看文件内容,同cat不同的是: cat是直接将内容全部显示出来,more支持翻页,如果文件内容过多,可以一页页的展示。

语法:more Linux路径

more同样没有选项,参数必填,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用。

Linux系统内置有一个文件,路径为:/etc/services,可以使用more命令查看

more /etc/services

在查看的过程中,通过空格翻页

通过按q 即可退出查看

 9 -r(recursive)和-f(force)代表什么?

9.1 -r 来自英文单词recursive:递归的。

在Linux命令中,`-r`选项用于:递归地处理目录及其内容。在Linux操作系统中,cp复制和rm删除文件夹时需要使用`-r`(递归)选项,这是因为这些操作不仅涉及到文件夹本身,还涉及到其包含的所有子文件夹和文件。

9.2 -f 来自英文单词force:强制

在使用`rm`命令删除文件或目录时,加上`-f`(force)选项可以强制删除文件或目录不会提示确认。这对于批量删除文件非常有用,经常与`-r`(递归)选项一起使用,特别是在删除非空目录时。

10 cp命令(copy):复制文件、加-r复制文件夹

cp命令来自英文单词:copy

语法: cp -r 参数1 参数2   --复制文件夹,必须使用-r选项,否则不会生效

  • -r选项,可选,用于复制文件夹使用,表示递归。
  • 参数1,Linux路径,表示被复制的文件或文件夹。
  • 参数2,Linux路径,表示要复制到哪里。
***复制文件:
[root@VM-8-12-centos ~]# pwd
/root
[root@VM-8-12-centos ~]# ls -lh   --当前路径下有哪些文件、文件夹
total 24K
drwxr-xr-x 2 root root 4.0K Jan  4 10:00 test0
drwxr-xr-x 5 root root 4.0K Jan  3 19:29 test1
drwxr-xr-x 2 root root 4.0K Jan  3 19:27 test2
drwxr-xr-x 2 root root 4.0K Jan  3 19:18 test20250103
drwxr-xr-x 2 root root 4.0K Jan  3 19:31 test3
drwxr-xr-x 3 root root 4.0K Jan  3 19:38 test4
-rw-r--r-- 1 root root    0 Jan  4 09:59 text0
-rw-r--r-- 1 root root    0 Jan  3 19:59 text.txt

[root@VM-8-12-centos ~]# cp text.txt text1.txt  --复制text.txt为当前路径下的text1.txt

[root@VM-8-12-centos ~]# cp text.txt ./text2.txt  --复制text.txt为当前路径下的text2.txt

[root@VM-8-12-centos ~]# cp text.txt  /root/text3.txt --复制text.txt为当前路径下的text3.txt
 
[root@VM-8-12-centos ~]# ls -l   --以上三个操作后当前路径下有哪些文件、文件夹
total 24
drwxr-xr-x 2 root root 4096 Jan  4 10:00 test0
drwxr-xr-x 5 root root 4096 Jan  3 19:29 test1
drwxr-xr-x 2 root root 4096 Jan  3 19:27 test2
drwxr-xr-x 2 root root 4096 Jan  3 19:18 test20250103
drwxr-xr-x 2 root root 4096 Jan  3 19:31 test3
drwxr-xr-x 3 root root 4096 Jan  3 19:38 test4
-rw-r--r-- 1 root root    0 Jan  4 09:59 text0
-rw-r--r-- 1 root root    0 Jan  4 10:03 text1.txt
-rw-r--r-- 1 root root    0 Jan  4 10:03 text2.txt
-rw-r--r-- 1 root root    0 Jan  4 10:05 text3.txt
-rw-r--r-- 1 root root    0 Jan  3 19:59 text.txt

***复制文件夹加选项-r
[root@VM-8-12-centos ~]# ls    --当前路径下有哪些文件、文件夹
study02.txt  test0  test2         test3  text0      text2.txt  text.txt
studytest    test1  test20250103  test4  text1.txt  text3.txt

[root@VM-8-12-centos ~]# cp studytest studytest1   --复制文件夹不加-r报错
cp: omitting directory ‘studytest’

[root@VM-8-12-centos ~]# cp -r studytest studytest1 --复制studytest为当前路径下studytest1

[root@VM-8-12-centos ~]# cp -r  studytest /root/test0/studytest2 
--复制studytest为/root/test0/路径下studytest1

[root@VM-8-12-centos ~]# ls  ----以上两个文件夹复制完成后,当前路径下有哪些文件、文件夹
study02.txt  studytest1  test1  test20250103  test4  text1.txt  text3.txt
studytest    test0       test2  test3         text0  text2.txt  text.txt

 11 mv命令(move):移动文件或文件夹+重命名文件夹

 mv命令来自英文单词:move

语法:mv 参数1 参数2

参数1,Linux路径,表示被移动的文件或文件夹。

参数2,Linux路径,表示要移到哪里,如果目标不存在,则进行改名,确保目标存在。

***mv 移动
[root@VM-8-12-centos ~]# ls  --移动之前,当前路径下有哪些文件、文件夹
study02.txt  studytest1  test1  test20250103  test4  text1.txt  text3.txt
studytest    test0       test2  test3         text0  text2.txt  text.txt

[root@VM-8-12-centos ~]# mv studytest1 test1  --把studytest1文件夹移动到test1路径下
[root@VM-8-12-centos ~]# mv text.txt ./test1  --把text.txt文件移动到test1路径下
[root@VM-8-12-centos ~]# mv text1.txt ./test1   --把text1.txt文件移动到test1路径下

[root@VM-8-12-centos ~]# ls --移动之后,当前路径下有哪些文件、文件夹
study02.txt  test0  test2         test3  text0      text3.txt
studytest    test1  test20250103  test4  text2.txt

***mv 改名
[root@VM-8-12-centos ~]# ls  --移动之前,当前路径下有哪些文件、文件夹
study02.txt  test0  test2         test3  text0      text3.txt
studytest    test1  test20250103  test4  text2.txt

[root@VM-8-12-centos ~]# mv text0 text1  
--text1目标不存在,但是为了确保移动成功,把text0改名成text1

[root@VM-8-12-centos ~]# ls --移动之后,当前路径下有哪些文件、文件夹
study02.txt  test0  test2         test3  text1      text3.txt
studytest    test1  test20250103  test4  text2.txt

12 rm命令(remove):删除文件、加-r删除文件夹 ;-f表示强制删除

12.1 rm命令温馨提示:rm是一个危险的命令,特别是在处于root(超级管理员)用户的时候, 请谨慎使用。如下命令,请千万千万不要在root管理员用户下执行: rm -rf /和 rm -rf /*,效果等同于在Windows上执行C盘格式化。

12.2 rm命令来自英文单词:remove

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

同cp命令一样,-r(递归的)选项用于删除文件夹。

-f表示force,强制删除(不会弹出提示确认信息)普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示,所以一般普通用户用不到-f选项。

参数1、参数2、......、参数N  表示要删除的文件或文件夹路径,按照空格隔开。

[root@VM-8-12-centos ~]# pwd
/root
[root@VM-8-12-centos ~]# ls --查看当前路径下有哪些文件、文件夹
study02.txt  test0  test2         test3  text1      text3.txt
studytest    test1  test20250103  test4  text2.txt

[root@VM-8-12-centos ~]# rm study02.txt  --删除study02.txt文件
rm: remove regular empty file ‘study02.txt’? y --确认删除

[root@VM-8-12-centos ~]# rm studytest  --删除studytest文件夹
rm: cannot remove ‘studytest’: Is a directory  --报错“studytest是一个目录”

[root@VM-8-12-centos ~]# rm -r studytest  --加-r删除studytest文件夹
rm: remove directory ‘studytest’? y  --确认删除

[root@VM-8-12-centos ~]# ls  --查看以上两个删除操作后,当前路径下有哪些文件、文件夹
test0  test2         test3  text1      text3.txt
test1  test20250103  test4  text2.txt

[root@VM-8-12-centos ~]# ls
test0  test2         test3  text1      text3.txt
test1  test20250103  test4  text2.txt

[root@VM-8-12-centos ~]# rm text1 text2.txt
rm: remove regular empty file ‘text1’? y
rm: remove regular empty file ‘text2.txt’? y

[root@VM-8-12-centos ~]# rm -r test20250103 test4
rm: remove directory ‘test20250103’? y
rm: descend into directory ‘test4’? y
rm: descend into directory ‘test4/good’? y
rm: remove directory ‘test4/good/nb666’? y
rm: remove directory ‘test4/good’? y
rm: remove directory ‘test4’? y

[root@VM-8-12-centos ~]# ls
test0  test1  test2  test3  text3.txt

[root@VM-8-12-centos ~]# rm -f text3.txt
[root@VM-8-12-centos ~]# ls
test0  test1  test2  test3

13 通配符 *:模糊匹配任意内容包含空(搭配rm和find命令使用)

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

  • test*,表示匹配任何以test开头的内容。
  • *test,表示匹配任何以test结尾的内容。
  • *test*,表示匹配任何包含test的内容。
***rm 配合通配符*的使用(*相当于模糊匹配)
[root@VM-8-12-centos ~]# ls
test0  test1  test2  test3
[root@VM-8-12-centos ~]# ls test1 -lh   --查询test1下有哪些文件、文件夹
total 16K
drwxr-xr-x 2 root root 4.0K Jan  4 10:16 studytest1
drwxr-xr-x 2 root root 4.0K Jan  3 19:21 test1.1
drwxr-xr-x 2 root root 4.0K Jan  3 19:28 test1.2
drwxr-xr-x 2 root root 4.0K Jan  3 19:29 test1.3
-rw-r--r-- 1 root root    0 Jan  4 10:03 text1.txt
-rw-r--r-- 1 root root    0 Jan  3 19:59 text.txt

[root@VM-8-12-centos ~]# cd test1 --切换到test1目录
[root@VM-8-12-centos test1]# pwd  --查看当前目录
/root/test1

[root@VM-8-12-centos test1]# rm text*  --删除当前目录下以text开头的文件
rm: remove regular empty file ‘text1.txt’? y
rm: remove regular empty file ‘text.txt’? y

[root@VM-8-12-centos test1]# rm -r study*  --删除当前目录下以study开头的文件夹
rm: remove directory ‘studytest1’? y

[root@VM-8-12-centos test1]# ls -lh --以上两个模糊删除之后,查询test1下有哪些文件、文件夹
total 12K
drwxr-xr-x 2 root root 4.0K Jan  3 19:21 test1.1
drwxr-xr-x 2 root root 4.0K Jan  3 19:28 test1.2
drwxr-xr-x 2 root root 4.0K Jan  3 19:29 test1.3

14  which命令(查找命令):查找各命令的程序文件存放在哪个路径

我们在前面学习的Linux命令,其实它们的本体就是一个个的二进制可执行程序。 和Windows系统中的.exe文件,是一个意思。

我们可以通过which命令,查看所使用的一系列命令的程序文件存放在哪里。

语法:which  要查找的命令

  • 无需选项,只需要参数表示要查找哪个命令
[root@VM-8-12-centos ~]# ls
test0  test1  test2  test3

[root@VM-8-12-centos ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

[root@VM-8-12-centos ~]# which cd
/usr/bin/cd

[root@VM-8-12-centos ~]# which pwd
/usr/bin/pwd

[root@VM-8-12-centos ~]# which mkdir
/usr/bin/mkdir

[root@VM-8-12-centos ~]# which touch
/usr/bin/touch

[root@VM-8-12-centos ~]# which cp
alias cp='cp -i'
        /usr/bin/cp

[root@VM-8-12-centos ~]# which mv
alias mv='mv -i'
        /usr/bin/mv

[root@VM-8-12-centos ~]# which rm
alias rm='rm -i'
        /usr/bin/rm

[root@VM-8-12-centos ~]# which cat
/usr/bin/cat

[root@VM-8-12-centos ~]# which more
/usr/bin/more


[root@VM-8-12-centos ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
        /usr/bin/alias
        /usr/bin/which

15 find命令(查找文件):按文件名/文件大小,查找该文件存放在哪个路径

如下图:在windows图形化中,我们可以方便的通过系统提供的搜索功能,搜索指定的文件。

同样,在Linux系统中,我们可以通过find命令去搜索指定的文件。

语法:find 起始路径   -name  "被查找的文件名"

15.1 find命令 - 按文件名查找文件

查找文件名叫做:test的文件,从根目录开始搜索,基于语法,可以有命令:
[root@VM-8-12-centos ~]# find / -name "test"  
--从根目录/开始查找文件名称为test的所在路径

/usr/lib/modules/3.10.0-1160.119.1.el7.x86_64/kernel/drivers/ntb/test
/usr/local/qcloud/YunJing/bin/test
/usr/local/qcloud/python/lib/python3.7/tkinter/test
/usr/local/qcloud/python/lib/python3.7/unittest/test
/usr/local/qcloud/python/lib/python3.7/ctypes/test
/usr/local/qcloud/python/lib/python3.7/test
/usr/local/qcloud/python/lib/python3.7/sqlite3/test
/usr/bin/test
/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64/lib/raid6/test
/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64/drivers/ntb/test
/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64/include/config/test
/usr/lib64/python3.6/test
/usr/lib64/python2.7/unittest/test
/usr/lib64/python2.7/test
/test

15.2 find命令 - 通配符*

根据【语法:find 起始路径   -name  "被查找的文件名"】,语法中"被查找文件名",支持使用通配符 * 来做模糊查询。

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

①    test*,表示匹配任何以test开头的内容。

②   *test,表示匹配任何以test结尾的内容 。

③   *test*,表示匹配任何包含test的内容。

基于通配符的含义,可以结合find命令做文件的模糊查询。

15.3 find命令 - 按文件大小查找文件

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

解释:

① +、-表示 大于和小于。

② n表示 大小数字。

③ kMG表示 大小单位,k(小写字母)表示kb,M表示MB,G表示GB。

15.3 find命令 - 按文件大小查找文件
语法:find 起始路径  -size  +|-  n[KMG]
示例: 
从根目录/开始查找小于10KB的文件: find / -size -10k 
从根目录/开始查找大于100MB的文件:find / -size +100M 
从根目录/开始查找大于1GB的文件:find / -size +1G

16  grep命令(筛选内容):从文件中筛选出带有关键字的行及行号

grep是“Globally search a Regular Expression and Print”的缩写。

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

解释:

  • 选项-n:可选,表示在结果中显示匹配的行的行号。
  • 关键字:必填,表示过滤的关键字,带有空格或其它特殊符号,使用" "将关键字包围起来。
  • 文件路径:参数,表示要过滤内容的文件路径,可作为管道符的输入。
    ubuntu@VM-8-12-ubuntu:~$ whoami
    ubuntu
    ubuntu@VM-8-12-ubuntu:~$ pwd
    /home/ubuntu
    ubuntu@VM-8-12-ubuntu:~$ ls
    studylinux0.txt
    
    ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt
    此文件用于练习grep命令!
    此文件用于练习grep1命令!
    此文件用于练习grep2命令!
    此文件用于练习grep3命令!
    此文件用于练习grep4命令!
    hello linux
    hello ubuntu
    ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt
    此文件用于练习grep命令!
    此文件用于练习grep1命令!
    此文件用于练习grep2命令!
    此文件用于练习grep3命令!
    此文件用于练习grep4命令!
    hello linux
    hello ubuntu
    
    ubuntu@VM-8-12-ubuntu:~$ grep "hello" studylinux0.txt
    hello linux
    hello ubuntu
    
    ubuntu@VM-8-12-ubuntu:~$ grep "linux" studylinux0.txt
    hello linux
    
    ubuntu@VM-8-12-ubuntu:~$ grep -n "hello" studylinux0.txt
    6:hello linux
    7:hello ubuntu
    

17 wc命令(Word Count):统计行数、单词数量、字节数

可以通过wc(Word Count)命令统计文件的行数、单词数量等。
语法:wc  [-c   -m  -l  -w]  文件路径

语法解释:

  • 选项-c:统计bytes数量。
  • 选项-m:统计字符数量。
  • 选项-l:统计行数。
  • 选项-w:统计单词数量。
  • 参数文件路径:被统计的文件,可作为管道符的输入。

ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt
此文件用于练习grep命令!
此文件用于练习grep1命令!
此文件用于练习grep2命令!
此文件用于练习grep3命令!
此文件用于练习grep4命令!
hello linux hello ubuntu

ubuntu@VM-8-12-ubuntu:~$ wc studylinux0.txt
  6   9 209 studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ wc -cmlw  studylinux0.txt
  6   9 109 209 studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ wc -c studylinux0.txt
209 studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ wc -m studylinux0.txt
109 studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ wc -l studylinux0.txt
6 studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ wc -w studylinux0.txt
9 studylinux0.txt

18 管道符  |  :管道符左边命令的结果,作为右边命令的输入。

管道符(可以嵌套使用)作用是:将管道符左边命令的结果作为右边命令的输入。

管道符  |  的作用是:将管道符左边命令的结果,作为右边命令的输入。
ubuntu@VM-8-12-ubuntu:~$ ls
studylinux0.txt

ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt
此文件用于练习grep命令!
此文件用于练习grep1命令!
此文件用于练习grep2命令!
此文件用于练习grep3命令!
此文件用于练习grep4命令!
hello linux
hello ubuntu

ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt | grep "grep*"
此文件用于练习grep命令!
此文件用于练习grep1命令!
此文件用于练习grep2命令!
此文件用于练习grep3命令!
此文件用于练习grep4命令!

ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt | wc
      6       9     209
ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt | wc -l
6
ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt | wc -m
109
ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt | wc -c
209
ubuntu@VM-8-12-ubuntu:~$ more studylinux0.txt | wc -w
9

19 echo命令(输出内容):在命令行内输出指定内容

语法:echo 要输出的内容

语法解释:

  • 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用" "双引号包围。

20 反引号` `:被``包围的内容,会被作为命令执行,而非普通字符

(`和~是一个键,在英文状态下输入``)我们可以通过将命令用双反引号``将其包围,被``包围的内容,会被作为命令执行,而非普通字符。

21 >和>>重定向符:将左边结果覆盖/追加写入到右边文件中

  • > 将左侧命令的结果,覆盖(等价于替换内容)写入到符号右侧指定的文件中。
  • >> 将左侧命令的结果,追加(等价于新增内容)写入到符号右侧指定的文件中。
    ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt
    此文件用于练习grep命令!
    此文件用于练习grep1命令!
    此文件用于练习grep2命令!
    此文件用于练习grep3命令!
    此文件用于练习grep4命令!
    hello linux
    hello ubuntu
    
    ubuntu@VM-8-12-ubuntu:~$ echo "hello,2025" >>studylinux0.txt
    
    ubuntu@VM-8-12-ubuntu:~$ cat studylinux0.txt
    此文件用于练习grep命令!
    此文件用于练习grep1命令!
    此文件用于练习grep2命令!
    此文件用于练习grep3命令!
    此文件用于练习grep4命令!
    hello linux
    hello ubuntuhello,2025

22 tail命令:查看文件尾部内容,跟踪文件的最新更改

语法:tail [-f  -num]   Linux路径 

语法解释:

  • 选项,-f表示:持续跟踪(立马检测到文件的更改)。
  • 选项, -num(具体的数值)表示:查看尾部多少行,默认10行
  • 参数,Linux路径表示:被跟踪的文件路径。

    练习1:请使用echo并配合反引号,输出内容:我当前的工作目录是:`具体的工作目录路径`
    ubuntu@VM-8-12-ubuntu:~$ echo "我当前的工作目录是:`pwd`"
    我当前的工作目录是:/home/ubuntu
    
    练习2:并结合重定向符,将输出结果追加写入stulinux.txt文件中
    ubuntu@VM-8-12-ubuntu:~$ echo "我当前的工作目录是:`pwd`" >> stulinux.txt
    
    练习3:查看是否追加成功?
    ubuntu@VM-8-12-ubuntu:~$ tail -8 stulinux.txt
    swap.img
    sys
    tmp
    usr
    var
    2025身体健康万事如意
    2025祝您行大运发大财
    我当前的工作目录是:/home/ubuntu

23 vim 文件路径:vim是Linux中最经典的文本编辑器

  • vi、vim是visual interface的简称, 是Linux中最经典的文本编辑器。
  • 同图形化界面中的文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。
  • vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。

23.1 vim编辑器的三种工作模式

  • 命令模式(Command mode)在命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。 此模型下,不能自由进行文本编辑。
  • 输入模式(Insert mode)也就是所谓的编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑。
  •  底线命令模式(Last line mode)以:开始,通常用于文件的保存、退出。

通过vi/vim命令编辑文件,会打开一个新的窗口,此时这个窗口就是:命令模式窗口。命令模式是vi编辑器的入口和出口,如上图

  • 进入vi编辑器会进入命令模式。
  • 通过命令模式输入键盘指令,可以进入输入模式(编辑模式、插入模式)。
  • 输入模式需要退回到命令模式,然后通过命令可以进入底线命令模式 。

23.2 vim 文件路径:进入命令模式(进入中转站)

语法命令:vim Linux文件路径

  • 如果文件路径表示的文件不存在,那么此命令会用于新建一个新文件并编辑内容。
  • 如果文件路径表示的文件存在,那么此命令用于打开文件编辑内容。

vim兼容全部的vi功能,所以我们全部使用vim命令。

23.3 快速体验:vim 路径进入,i进入编辑,esc返回,:wq进入底线保存退出

快速体验vim编辑器:
1、使用:vim testvim.txt,创建新文件testvim.txt并打开编辑,执行后进入的是命令模式。
2、在命令模式内,按键盘 i ,进入输入(编辑、插入模式)模式。
3、在输入模式内输入任意内容。比如输入hello,linux vim。
4、输入完成后,按esc回退到命令模式。
5、在命令模式内,按键盘 : ,进入底线命令模式。
6、在底线命令内输入:wq,按回车,保存文件并退出vim编辑器。

7、退出编辑器,通过命令查看文件以及输入的内容是否存在?

23.4 命令模式快捷键

23.5 底线命令模式快捷键

  • 编辑模式没有什么特殊的,进入编辑模式后,任何快捷键都没有作用,就是正常输入文本而已。
  • 唯一大家需要记住的,就是:通过esc,可以退回到命令模式。
  • 在命令模式内,输入:,即可进入底线命令模式,支持如下命令:

24 补充说明

24.1  通过--help选项,查看命令帮助(例如:ls --help)

我们学习的一系列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 等选项,可以发现选项是极其多的。 文章中只对常见的选项进行整理, 足够满足绝大多数的学习、工作场景。如果想要对命令的其它选项进行查阅,可以通过如下方式:

24.2 通过man命令,查看命令详细手册(例如:man ls)

如果想要查看命令的详细手册,可以通过man(manual, 手册)命令查看 比如:

大多数手册都是全英文的,如果阅读吃力,可以通过重定向符:man ls > ls.txt,输出手册到文件,然后通过翻译软件翻译内容查看。

七 Linux用户和权限

1 root用户(超级管理员):拥有最大权限

无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员),而普通用户在许多地方的权限是受限的。

  • 普通用户的权限,一般在其HOME目录内是不受限的。
  • 一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。
    普通用户的权限,一般在其HOME目录内是不受限的。
    ubuntu@VM-8-12-ubuntu:~$ mkdir test3 
    ubuntu@VM-8-12-ubuntu:~$ ls
    ls.txt  stulinux.txt  test1  test2  test3  testvim.txt
    
    一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。
    ubuntu@VM-8-12-ubuntu:/$ whoami --查看当前登录的用户
    ubuntu
    ubuntu@VM-8-12-ubuntu:/$ pwd --查看当前的工作目录
    /
    ubuntu@VM-8-12-ubuntu:/$ mkdir test --创建新文件夹
    mkdir: cannot create directory ‘test’: Permission denied  
    --权限被拒绝,没有访问文件的权限。权限不足,不能创建
    

2 su命令(Switch User):切换用户;exit命令:退回上一个用户

来源英文单词:Switch User

语法:su -  [用户名]

语法解释:

  • - 符号是可选的,表示是否在切换用户后加载环境变量,建议带上。
  • 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root。
  • 切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:ctrl + d。
  • 使用普通用户,切换到其它用户需要输入密码,如切换到root用户。
  • 使用root用户切换到其它用户,无需密码,可以直接切换。
    root@VM-8-12-ubuntu:~# su - ubuntu  --从root切换ubuntu用户,无需输入密码
    ubuntu@VM-8-12-ubuntu:~$ whoami --查看当前用户
    ubuntu
    ubuntu@VM-8-12-ubuntu:~$ su -   --切换时不带用户名,默认切换到root用户
    Password:  --输入root密码
    root@VM-8-12-ubuntu:~# whoami --查看当前用户
    root
    root@VM-8-12-ubuntu:~# exit --退出当前用户,返回到上一个用户
    logout
    ubuntu@VM-8-12-ubuntu:~$ whoami --查看当前用户
    ubuntu
    ubuntu@VM-8-12-ubuntu:~$
    
    ubuntu@VM-8-12-ubuntu:/$ su - root
    Password:
    root@VM-8-12-ubuntu:~# pwd
    /root
    root@VM-8-12-ubuntu:~# mkdir test  利用root用户创建成功,因为root拥有最大权限
    root@VM-8-12-ubuntu:~# ls
    test

3 sudo命令:临时赋予root授权(可以让一条普通命令带有root权限)

在我们得知root密码的时候,可以通过su命令切换到root得到最大权限。但是不建议长期使用root用户进行操作,避免带来系统损坏。可以使用sudo命令,为普通的命令授权,临时以root身份执行。

语法:sudo 其它命令

语法解释:

  • 在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权。
  • 但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证。
    ubuntu@VM-8-12-ubuntu:~$ whoami  --查看当前用户    
    ubuntu
    ubuntu@VM-8-12-ubuntu:~$ cd /  --跳出home目录,切换到根目录/
    ubuntu@VM-8-12-ubuntu:/$ mkdir test2  --创建test2文件夹
    mkdir: cannot create directory ‘test2’: Permission denied  --权限不足,无法创建
    ubuntu@VM-8-12-ubuntu:/$ sudo mkdir test2  --开头带上sudo,获得临时的root的权限,创建成功
    

4 vi  /etc/sudoers命令:为普通用户配置sudo认证

  • 第一步:切换到root用户,执行vi  /etc/sudoers命令,会自动通过vi编辑器打开:/etc/sudoers
  • 第二步:在文件的最后添加       用户名  ALL=(ALL:ALL) NOPASSWD: ALL
    表示该用户可以使用sudo命令,无需输入密码,最后通过 :wq 保存。
  • 第三步:切换回普通用户,执行的sudo命令,就可以以临时root身份运行。

5 用户、用户组

Linux系统中可以:

  • 配置多个用户
  • 配置多个用户组
  • 用户可以加入多个用户组中

Linux中关于权限的管控级别有2个级别,分别是:

  • 针对用户的权限控制
  • 针对用户组的权限控制

比如,针对某文件,可以控制用户的权限,也可以控制用户组的权限。 所以,我们需要学习在Linux中进行用户、用户组管理的基础命令,为后面学习权限控制打下基础。

6 用户组管理

以下命令需root用户执行。

6.1 创建用户组:groupadd 用户组名

ubuntu@VM-8-12-ubuntu:~$ whoami
ubuntu
ubuntu@VM-8-12-ubuntu:~$ su -
Password:
root@VM-8-12-ubuntu:~# whoami
root
root@VM-8-12-ubuntu:~# groupadd group1
root@VM-8-12-ubuntu:~# groupadd group666

6.2 删除用户组:groupdel 用户组名

root@VM-8-12-ubuntu:~# groupdel group1

7 用户管理

以下命令需root用户执行。

7.1 创建用户:useradd [-g -d] 用户名

  • 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
  • 选项:-d指定用户HOME路径。不指定,HOME目录默认在:/home/用户名
    useradd admin
    
    -g:指定这个新用户属于哪个用户组;-d 指定这个新用户的home目录
    
    root@VM-8-12-ubuntu:/# useradd admin1 -g group666 -d /home/usertest
    root@VM-8-12-ubuntu:/# su - admin1
    $ pwd
    /home/usertest
    

7.2 删除用户:userdel [-r] 用户名

  • 选项:-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
root@VM-8-12-ubuntu:/# userdel admin
root@VM-8-12-ubuntu:/# uerdel -r admin1

7.3 查看用户所属组: id  [用户名]

  • 参数:用户名,被查看的用户,如果不提供则查看自身
root@VM-8-12-ubuntu:/# id
uid=0(root) gid=0(root) groups=0(root)

root@VM-8-12-ubuntu:/# useradd yangyunlong -g group666

root@VM-8-12-ubuntu:/# id yangyunlong
uid=1005(yangyunlong) gid=1002(group666) groups=1002(group666)

root@VM-8-12-ubuntu:/# su - yangyunlong
$ id
uid=1005(yangyunlong) gid=1002(group666) groups=1002(group666)

7.4 修改用户所属组:usermod -aG 用户组 用户名

  • 将指定用户加入指定用户组
root@VM-8-12-ubuntu:/# groupadd group888
root@VM-8-12-ubuntu:/# usermod -aG group888 yangyunlong
root@VM-8-12-ubuntu:/# id yangyunlong
uid=1005(yangyunlong) gid=1002(group666) groups=1002(group666),1005(group888)

8 getent命令:查看当前系统中有哪些用户、有哪些用户组

8.1 getent passwd :可以查看当前系统中有哪些用户

8.2 getent group:可以查看当前系统中有哪些用户组

9 查看权限控制

9.1 认识权限信息

  • 序号1,表示文件、文件夹的权限控制信息
  • 序号2,表示文件、文件夹所属用户
  • 序号3,表示文件、文件夹所属用户组

让我们来解析一下序号1的权限细节,权限细节总共分为10个槽位

举例:drwxr-xr-x表示:

  • 这是一个文件夹,首字母d表示
  • 所属用户(右上角图序号2)的权限是:有r有w有x,rwx
  • 所属用户组(右上角图序号3)的权限是:有r无w有x,r-x (-表示无此权限)
  • 其它用户的权限是:有r无w有x,r-x

9.2 r:读权限,w:写权限,x:执行权限

  • r 表示权限(read)
  • w 表示权限(write)
  • x 表示执行权限(execute)

针对文件、文件夹的不同,rwx的含义有细微差别:

  • r,针对文件可以查看文件内容
  • r,针对文件夹,可以查看文件夹内容,如ls命令
  • w,针对文件表示可以修改此文件
  • w,针对文件夹,可以在文件夹内:创建、删除、改名等操作
  • x,针对文件表示可以将文件作为程序执行
  • x,针对文件夹,表示可以更改工作目录到此文件夹,即cd进入

10 chmod命令:修改文件、文件夹权限信息

10.1 chmod命令

注意,只有文件、文件夹的所属用户或root用户可以修改。

语法:chmod   [-R]  权限  文件或文件夹

选项:-R,对文件夹内的全部内容应用同样的操作。

示例:

chmod u=rwx,g=rx,o=x hello.txt ,将文件权限修改为:rwxr-x--x

其中:u表示user所属用户权限,g表示group组权限,o表示other其它用户权限

chmod -R u=rwx,g=rx,o=x test,将文件夹test以及文件夹内全部内容权限设置为:rwxr-x--x

除此之外,还有快捷写法:chmod 751 hello.txt 将hello.txt的权限修改为751 那么问题来了,751表示什么意思呢?

10.2 权限的数字序号:r记为4,w记为2,x记为1

权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。

数字的细节如下:r记为4,w记为2,x记为1,可以有:

  • 0:无任何权限   即 ---
  • 1:仅有x权限    即 --x
  • 2:仅有w权限    即 -w-
  • 3:有w和x权限    即 -wx
  • 4:仅有r权限    即 r--
  • 5:有r和x权限    即 r-x
  • 6:有r和w权限    即 rw-
  • 7:有全部权限    即 rwx

11 chown命令:修改文件、文件夹的所属用户和用户组

普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行。

语法:chown  [-R]  [用户] [:] [用户组]     文件或文件夹

语法解释:

  • 选项,-R,同chmod,对文件夹内全部内容应用相同规则
  • 选项,用户,修改所属用户
  • 选项,用户组,修改所属用户组
  • :用于分隔用户和用户组

示例:

  • chown root hello.txt,将hello.txt所属用户修改为root
  • chown :root hello.txt,将hello.txt所属用户组修改为root
  • chown root:itheima hello.txt,将hello.txt所属用户修改为root,用户组修改为itheima
  • chown -R root test,将文件夹test的所属用户修改为root并对文件夹内全部内容应用同样规则

八 Linux实用操作

1 实用快捷键

1.1 ctrl + c:强制停止

Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl + c 命令输入错误,也可以通过快捷键ctrl + c,退出当前输入,重新输入。

1.2 ctrl + d:退出(或通过命令exit得到同样效果)

可以通过快捷键:ctrl + d,退出账户的登录。或者退出某些特定程序的专属页面。

ps:不能用于退出vi/vim。

1.3 history:搜索历史输入过的命令

可以通过history命令,查看历史输入过的命令。

1.4 history |  grep 关键字:通过关键字去过滤某些特定的命令

1.5 光标移动快捷键

  • ctrl + a,跳到命令开头
  • ctrl + e,跳到命令结尾
  • ctrl + 键盘左键,向左跳一个单词
  • ctrl + 键盘右键,向右跳一个单词

1.6 ctrl + l:清屏(或通过命令clear得到同样效果)

1.7  !命令前缀:自动执行上一次匹配前缀的命令

1.8 ctrl + r:输入内容去匹配历史命令 

如果搜索到的内容是你需要的,那么: 回车键可以直接执行。键盘左右键,可以通过复制得到此命令(不执行)。

2 软件安装、卸载、搜索

以下命令需要root权限哦,可以su切换到root,或使用sudo提权。并且需要联网。

操作系统安装软件有许多种方式,一般分为:

  • 下载安装包自行安装

如win系统使用exe文件、msi文件等

如mac系统使用dmg文件、pkg文件等

  • 系统的应用商店内安装

如win系统有Microsoft Store商店

如mac系统有AppStore商店

  • Linux系统同样支持这两种方式,我们首先,先来学习使用:Linux命令行内的”应用商店”,yum命令安装软件:

前面学习的各类Linux命令,都是通用的。 但是软件安装,CentOS系统和Ubuntu是使用不同的包管理器。 CentOS使用yum管理器,Ubuntu使用apt管理器。 

实例:Ubuntu使用apt管理器搜索、安装、卸载wget

apt search wget,通过yum命令,搜索是否有wget安装包

apt -y install wget, 通过此命令安装wget程序

apt -y remove wget,通过此命令卸载wget命令

3 systemctl命令:控制软件的启动和关闭 

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启 能够被systemctl管理的软件,一般也称之为:服务。系统内置的服务比较多,比如: NetworkManager,主网络服务 network,副网络服务 firewalld,防火墙服务 sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)。现在可以使用systemctl去尝试一下,控制这些服务的启动、关闭、自启动啦。

语法:systemctl start |  stop | status |  enable | disable 服务名

  • start 启动
  • stop 关闭
  • status 查看状态
  • enable 开启开机自启
  • disable 关闭开机自启

可以控制软件(服务)的启动、关闭、开机自启动。

  • linux系统内置服务均可被systemctl控制
  • 第三方软件,如果自动注册了可以被systemctl控制
  • 第三方软件,如果没有自动注册,可以手动注册(后续学习)

4 ln命令:创建软连接 (类似于快捷方式)

在系统中创建软链接,可以将文件、文件夹链接到其它位置。 类似Windows系统中的《快捷方式》。

语法:ln   -s  参数1~参数2

语法解释:

  • -s选项,创建软连接
  • 参数1:被链接的文件或文件夹
  • 参数2:要链接去的目的地

5 日期、时区 

5.1 date命令:查看日期时间

语法:date   [-d]  [+格式化字符串]

  • -d 按照给定的字符串显示日期,一般用于日期计算
  • 格式化字符串:通过特定的字符串标记,来控制显示的日期格式

%Y   年

%y   年份后两位数字 (00..99)

%m   月份 (01..12)

%d   日 (01..31)

%H   小时 (00..23)

%M   分钟 (00..59) %S   秒 (00..60)

%s   自 1970-01-01 00:00:00 UTC 到现在的秒数

ubuntu@VM-8-12-ubuntu:~$ date
Thu Jan  9 06:48:31 PM CST 2025

ubuntu@VM-8-12-ubuntu:~$ date +%Y-%m-%d
2025-01-09

ubuntu@VM-8-12-ubuntu:~$ date "+%Y-%m-%d %H:%M:%S"
2025-01-09 18:50:16

5.2 修改Linux系统的时区

系统默认时区非中国的东八区。 使用root权限,执行如下命令,修改时区为东八区时区,将系统自带的localtime文件删除,并将/usr/share/zoneinfo/Asia/Shanghai文件链接为localtime文件即可。

ubuntu@VM-8-12-ubuntu:~$ sudo su - root

root@VM-8-12-ubuntu:~# rm -f /ect/localtime

root@VM-8-12-ubuntu:~# ln -s /usr/share/zoneinfo/Asia/shanghai~/etc/localtime 
--修改为亚洲上海的时区

root@VM-8-12-ubuntu:~# date
Thu Jan  9 07:00:48 PM CST 2025

5.3 使用ntp程序自动校准系统时间(需要联网)

安装ntp:apt -y install ntp

启动并设置开机自启:

systemctl start ntpd

systemctl enable ntpd

当ntpd启动后会定期的帮助我们联网校准系统的时间

也可以手动校准(需root权限):ntpdate -u ntp.aliyun.com

通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准。

6 IP地址、主机名 

6.1 ifconfig:查看IP地址

每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯 IP地址主要有2个版本,V4版本和V6版本(V6很少用,课程暂不涉及) IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址。可以通过命令:ifconfig,查看本机的ip地址,如无法使用ifconfig命令,可以安装:apt -y install net-tools。

ubuntu@VM-8-12-ubuntu:~$ sudo su - root

root@VM-8-12-ubuntu:~# apt -y install net-tools

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
net-tools is already the newest version (2.10-0.1ubuntu4).
The following packages were automatically installed and are no longer required:
  eatmydata libeatmydata1 python3-json-pointer python3-jsonpatch
  python3-jsonschema python3-pyrsistent tzdata-legacy
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 213 not upgraded.

root@VM-8-12-ubuntu:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.2.8.12  netmask 255.255.252.0  broadcast 10.2.11.255
        inet6 fe80::5054:ff:fef9:da45  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:f9:da:45  txqueuelen 1000  (Ethernet)
        RX packets 3192678  bytes 991769640 (991.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2940681  bytes 469840734 (469.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 48042  bytes 4137128 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 48042  bytes 4137128 (4.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

除了标准的IP地址以外,还有几个特殊的IP地址需要我们了解:

127.0.0.1,这个IP地址用于指代本机。

0.0.0.0,特殊IP地址: 可以用于指代本机,可以在端口绑定中用来确定绑定关系(后续讲解),在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问。 

6.2 hostname:查看主机名

每一台电脑除了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名。无论是Windows或Linux系统,都可以给系统设置主机名。

ubuntu@VM-8-12-ubuntu:~$ hostname
VM-8-12-ubuntu

6.3 hostnamectl set-hostname 主机名:修改主机名(需root)

ubuntu@VM-8-12-ubuntu:~$ hostname
VM-8-12-ubuntu

ubuntu@VM-8-12-ubuntu:~$ sudo su - root

root@VM-8-12-ubuntu:~# hostnamectl set-hostname studylinux

root@VM-8-12-ubuntu:~# hostname
studylinux

6.4 什么是DNS域名解析(主机名映射)

域名解析原理(相当于电话薄)https://blog.csdn.net/weixin_45806267/article/details/143451905

  • 先查看本机的hosts记录(私人地址本)

Windows看:C:\Windows\System32\drivers\etc\hosts

Linux看:/etc/hosts

  • 再联网去DNS服务器(如114.114.114.114,8.8.8.8等)询问 

6.5 配置主机名映射

比如,我们Xshell、FinalShell、mobaXterm是通过IP地址连接到的Linux服务器,那有没有可能通过域名(主机名)连接呢? 可以,我们只需要在Windows系统的:C:\Windows\System32\drivers\etc\hosts

文件中配置记录即可。

 6.6 如何在VMware Workstation中配置Linux系统的固定IP地址(用于Windows系统)

配置固定IP需要2个大步骤:

第一步:在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)。

第二步:在Linux系统中手动修改配置文件,固定IP 首先让我们,先进行第一步,跟随图片进行操作。现在进行第二步,在Linux系统中修改固定IP 使用vim编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件,填入如下内容 执行:systemctl restart network 重启网卡,执行ifconfig即可看到ip地址固定为192.168.88.130了。

7 ping命令:检查指定的网络服务器是否是可联通状态 

语法:ping  [-c    num]  ip或主机名

语法解释:

选项:-c,检查的次数,不使用-c选项,将无限次数持续检查。

参数:ip或主机名,被检查的服务器的ip地址或主机名地址。

 8 wget命令:可以进行网络文件下载

语法:wget [-b]  url

语法解释:

选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件。

参数:url,下载链接。

注意:无论下载是否完成,都会生成要下载的文件,如果下载未完成,请及时清理未完成的不可用文件。

示例:
下载apache-hadoop 3.3.0版本:wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

在后台下载:wget -b http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

通过tail命令可以监控后台下载进度:tail -f wget-log

9 curl命令:可以发送http网络请求,可用于:下载文件、获取信息等 

语法:curl [-0] url

语法解释:

选项:-0,用于下载文件,当url是下载链接时,可以使用此选项保存文件。

参数:url,要发起请求的网络地址。

实例:通过curl下载hadoop-3.3.0安装包:curl -0 http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz 

10 端口:通过端口可以锁定计算机上具体的程序

10.1 端口的概念以及划分

计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。

通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通。

MAC地址相当于我们每个人的身份证。IP地址相当于小区地址,在小区内可以有许多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址。

Linux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为3类进行使用:

  • 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口 非特殊需要,不要占用这个范围的端口
  • 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
  • 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。

举例:如上图中,计算机A的微信连接计算机B的微信,A使用的50001即动态端口,临时找一个端口作为出口 计算机B的微信使用端口5678,即注册端口,长期绑定此端口等待别人连接。

10.2 nmap IP地址:查看指定IP的对外暴露端口

可以通过Linux命令去查看端口的占用情况使用nmap命令,安装nmap:apt -y install nmap

ubuntu@studylinux:~$ apt -y install nmap
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

ubuntu@studylinux:~$ sudo su - root

root@studylinux:~# apt -y install nmap
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  eatmydata libeatmydata1 python3-json-pointer python3-jsonpatch
  python3-jsonschema python3-pyrsistent tzdata-legacy
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  libblas3 liblinear4 liblua5.4-0 libssh2-1t64 nmap-common
Suggested packages:
  liblinear-tools liblinear-dev ncat ndiff zenmap
The following NEW packages will be installed:
  libblas3 liblinear4 liblua5.4-0 libssh2-1t64 nmap nmap-common
0 upgraded, 6 newly installed, 0 to remove and 213 not upgraded.
Need to get 6,452 kB of archives.

语法:nmap 被查看的IP地址


root@studylinux:~# nmap 127.0.0.1
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-13 12:21 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

可以看到,本机(127.0.0.1)上有1个端口现在被程序占用了。 22端口,一般是SSH服务使用,即FinalShell远程连接Linux所使用的端口。

10.3 netstat -anp | grep 端口号:查看指定端口的占用情况

安装netstat:apt -y install net-tools

语法:netstat -anp | grep 端口号

 如图,可以看到当前系统6000端口被程序(进程号7174)占用了 其中,0.0.0.0:6000,表示端口绑定在0.0.0.0这个IP地址上,表示允许外部访问。

11 进程管理

程序运行在操作系统中,是被操作系统所管理的。 为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程。并会为每一个进程都分配一个独有的:进程ID(进程号)。

11.1 ps命令:查看Linux系统中的进程信息

语法:ps [-e  -f]

语法解释:

选项:-e,显示出全部的进程。

选项:-f,以完全格式化的形式展示信息(展示全部信息)。

我们可以使用管道符配合grep来进行过滤,如: ps -ef | grep tail,即可准确的找到tail命令的信息。 过滤不仅仅过滤名称,进程号,用户ID等等,都可以被grep过滤哦 如:ps -ef | grep 30001,过滤带有30001关键字的进程信息(一般指代过滤30001进程号)。

11.2 kill [-9] 进程ID:关闭进程

语法:kill [-9] 进程ID 选项:-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

12 top命令:查看系统资源占用 

 可以通过top命令查看CPU、内存使用情况,类似Windows的任务管理器      默认每5秒刷新一次,语法:直接输入top即可,按q或ctrl + c退出。

第一行: top:命令名称,14:39:58:当前系统时间,up 6 min:启动了6分钟,2 users:2个用户登录,load:1、5、15分钟负载

第二行: Tasks:175个进程,1 running:1个进程子在运行,174 sleeping:174个进程睡眠,0个停止进程,0个僵尸进程

第三行: %Cpu(s):CPU使用率,us:用户CPU使用率,sy:系统CPU使用率,ni:高优先级进程占用CPU时间百分比,id:空闲CPU率,wa:IO等待CPU占用率,hi:CPU硬件中断率,si:CPU软件中断率,st:强制等待占用CPU率

第四、五行: Kib Mem:物理内存,total:总量,free:空闲,used:使用,buff/cache:buff和cache占用 KibSwap:虚拟内存(交换空间),total:总量,free:空闲,used:使用,buff/cache:buff和cache占用 

13 df -h: 查看硬盘的使用情况

语法:df [-h]

选项:-h,以更加人性化的单位显示。

14  iostat命令:查看CPU、磁盘的相关信息

语法:iostat [-x] [num1] [num2]

选项:-x,显示更多信息

num1:数字,刷新间隔

num2:数字,刷新几次

 15 sar命令:查看网络的相关统计

语法:sar -n DEV num1 num2

选项:-n,查看网络,DEV表示查看网络接口

num1:刷新间隔(不填就查看一次结束)

num2:查看次数(不填无限次数)

 16 环境变量

在讲解which命令的时候,我们知道使用的一系列命令其实本质上就是一个个的可执行程序。 比如,cd命令的本体就是:/usr/bin/cd 这个程序文件。我们是否会有疑问,为何无论当前工作目录在哪里,都能执行:/usr/bin/cd这个程序呢? 这就是环境变量的作用啦。环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。

16.1 env命令:查看当前系统中记录的环境变量

16.2 什么是PATH,作用是?

环境变量PATH会记录一组目录,目录之间用:隔开。

这里记录的是命令的搜索路径,当执行命令会从记录中记录的目录中挨个搜索要执行的命令并执行。

可以通过修改这个项目的值,加入自定义的命令搜索路径。 如export PATH=$PATH:自定义路径。 

16.3 $符号:可以取出环境变量的

16.4 自行设置环境变量

Linux环境变量可以用户自行设置,其中分为:

  • 临时设置,语法:export 变量名=变量值
  • 永久生效
  1. 针对当前用户生效,配置在当前用户的:    ~/.bashrc文件中,通过vi ~/.bashrc编辑
  2. 针对所有用户生效,配置在系统的:    /etc/profile文件中,通过vi /etc/profile编辑
  3. 并通过语法:source /etc/profile,进行立刻生效,或重新登录FinalShell生效

环境变量PATH这个项目里面记录了系统执行命令的搜索路径。 这些搜索路径我们也可以自行添加到PATH中去。

测试:
在当前HOME目录内创建文件夹,myenv,在文件夹内创建文件mkhaha
通过vim编辑器,在mkhaha文件内填入:echo 哈哈哈哈哈
完成上述操作后,随意切换工作目录,执行mkhaha命令尝试一下,会发现无法执行

修改PATH的值
临时修改PATH:export PATH=$PATH:/home/itheima/myenv,再次执行mkhaha,无论在哪里都能执行了
或将export PATH=$PATH:/home/itheima/myenv,填入用户环境变量文件或系统环境变量文件中去

17 文件上传、下载

17.1 方法一:通过第三方SSH工具上传、下载

我们可以通过第三方SSH工具,例如Xshell、FinalShell、mobaxterm等,方便的和虚拟机进行数据交换。 这些软件提供了Linux的文件系统视图,可以方便的:

  • 浏览文件系统,找到合适的文件,右键点击下载,即可传输到本地电脑
  • 浏览文件系统,找到合适的目录,将本地电脑的文件拓展进入,即可方便的上传数据到Linux中

17.2 方法二:通过rz、sz命令进行文件传输

rz、sz命令需要安装,可以通过:apt -y install lrzsz,即可安装。注意,rz、sz命令需要终端软件支持才可正常运行 FinalShell、SecureCRT、XShell等常用终端软件均支持此操作。

  • rz命令,进行上传,语法:直接输入rz即可,选择对应文件上传

  • sz命令进行下载,语法:sz 要下载的文件,文件会自动下载到桌面的:fsdownload文件夹中。

18 压缩、解压

市面上有非常多的压缩格式

zip格式:Linux、Windows、MacOS,常用

7zip:Windows系统常用 rar:Windows系统常用

tar:Linux、MacOS常用

gzip:Linux、MacOS常用

如何在Linux系统中操作:tar、gzip、zip这三种压缩格式完成文件的压缩、解压操作。

Linux和Mac系统常用有2种压缩格式,后缀名分别是:

  1. .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装。
  2. .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积。
  3. 针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作。

语法:tar [-c -v -x -f -z -C] 参数1 参数2 ...参数n

语法解释:

  • -c,创建压缩文件,用于压缩模式
  • -v,显示压缩、解压过程,用于查看进度
  • -x,解压模式
  • -f,要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个
  • -z,gzip模式,不使用-z就是普通的tarball格式。-z选项如果使用的话,一般处于选项位第一个
  • -C,选择解压的目的地,用于解压模式

18.1 tar 命令压缩

tar的常用组合为:

  • tar -cvf test.tar 1.txt 2.txt 3.txt

将1.txt 2.txt 3.txt 压缩到test.tar文件内

  • tar -zcvf test.tar.gz 1.txt 2.txt 3.txt

将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式

注意:

  1. -z选项如果使用的话,一般处于选项位第一个
  2. -f选项,必须在选项位最后一个

18.2 tar 命令解压

常用的tar解压组合有

tar -xvf test.tar 

解压test.tar,将文件解压至当前目录

tar -xvf test.tar -C /home/itheima

解压test.tar,将文件解压至指定目录(/home/itheima)

tar -zxvf test.tar.gz -C /home/itheima

以Gzip模式解压test.tar.gz,将文件解压至指定目录(/home/itheima)

注意:

  1. -f选项,必须在选项组合体的最后一位
  2. -z选项,建议在开头位置
  3. -C选项单独使用,和解压所需的其它参数分开

18.3 zip 命令压缩文件

语法:zip [-r] 参数1 参数2 ... 参数n

-r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致。

示例:

zip test.zip a.txt b.txt c.txt

将a.txt b.txt c.txt 压缩到test.zip文件内

zip -r test.zip test itheima a.txt

将test、itheima两个文件夹和a.txt文件,压缩到test.zip文件内

18.4 unzip 命令解压文件

使用unzip命令,可以方便的解压zip压缩包

语法:unzip [-d] 参数

  • -d,指定要解压去的位置,同tar的-C选项
  • 参数,被解压的zip压缩包文件

示例:

unzip test.zip,将test.zip解压到当前目录

unzip test.zip -d /home/itheima,将test.zip解压到指定文件夹内(/home/itheima)

常用基础命令到此结束,后续会更新实际工作中遇到的问题~


网站公告

今日签到

点亮在社区的每一天
去签到