学习Linux

linux存在的意义

Linux 开源、免费,打破了软件被少数公司垄断的局面,让更多人能自由地使用、研究、改造计算机,尤其是服务器和设备领域。

linux的用途

linux是开源、主要跑在服务器和设备上的操作系统。

linux与windows、macos的区别

|---------|------------|
| 系统 | 主战场 |
| Windows | 个人桌面、办公、游戏 |
| macOS | 苹果电脑、设计、创意 |
| Linux | 服务器、设备、超算 |

linux的核心竞争力

1开源:bug被"众包",越用越稳

2稳定:能长期不重启(与架构设计有关)

3免费:省钱,能大规模部署(无需授权费)

4安全:权限机制强,病毒少

5灵活:能裁剪能制定

linux的骨架

你(用户)

↓ 敲命令

【终端 Terminal】← 你打字的那个窗口(Xshell 就是一个终端)

↓

【Shell】← 真正"听懂"你命令的翻译官

↓

【内核 Kernel】← 操作系统的心脏,真正干活的那个

↓

【硬件】CPU / 内存 / 硬盘 / 网卡

狭义上来看,linux就是内核。随着多年的发展,配套软体不断完善,到了现在,linux显然是一个集大成者 ,linux家族包含了诸如ubuntu,centos等发行版本的操作系统。我们平时所说的linux,指的是某个家族成员。

学习linux的六大板块

一、基础操作

1.登陆与链接

2.命令的基本结构:命令/选项/参数

要干什么/具体怎么干/对谁干

命令:

如ls(列出),cd(切换),pwd(显示位置)

一条命令里,第一个词永远是命令

选项:

通常以-或--开头

短选项:-l(一个减号,单字母)

长选项:--help(两个减号,单词)

可以不加,不加就用默认行为

常见命令

-a:a=all,"所有文件,包括隐藏文件"

-l:详细列出(相比ls,多了权限、大小、时间、链接数、所有者、所属组)

参数

通常是文件、目录、路径

可以不加,不加就用默认对象

目录和文件的区分:看是容器还是内容本身

路径:如/home/zhangsan

关键要点:

顺序上:命令选项参数

空格:三部分之间用空格隔开

选项可以合并:ls -l -a可以合并写成ls-la

除了命令都可以省略

3.帮助:忘了命令怎么用,自己查

man 命令:看命令的完整手册

man = manual(手册)

想深入了解、查看完整说明就用man

按q退出(不按不退)

常见区块:

NAME:这个命令叫什么干什么

SYNOPSIS:用法格式

OPTIONS:所有选项及含义

EMANPLES:例子

命令 --help:看命令的简要帮助

使用--help,能快速查用命令,它能直接列出常用选项

4.命令提示符:

目标是一眼知道"我是谁、我在哪、是不是管理员"

当前用户@主机名 当前目录管理权限

例如root@localhost \~#

管理权限有两个符号区分:++#管理员(root),$普通用户++

5. 最基础的导航:

在系统内走动,确认自己的位置

pwd:我在哪个目录

Print working directory,显示当前所在的完整路径

作用:迷路时有奇效,知道自己在哪

ls:目录里面有什么

list,列出当前目录里的内容(文件和子目录)

作用:知道目录里有什么

cd:切换到别的目录

Change directory,切换到指定目录

几个常用的写法:

cd /home 去/home

cd 回家目录(~)

cd . . 去上一层目录

cd - 回上一次待的目录

cd有两种用法:

1.按某种确定的路径寻找,不管身在何处,特点是以 / 开头(绝对路径)

2.从当前的位置寻找,特点是没有 / (相对路径)

二、文件与目录(核心)

(一)建东西

mkdir

make directory,创建目录

用法:mkdir 目录名

作用:创建一个新的项目

常用选项:-p

-p = parents(父级)

作用:将路径上缺的上级目录,一并建出来

touch

本意是触摸一下,引申为创建/更新时间戳

用法:touch 文件名

作用:创建一个空文件(无内容)

touch的细节用法:可一次建多个文件

如果文件已存在,touch不会报错,而是更新时间戳(修改时间变成现在)

mkdir和touch的区别:前者建"文件夹",后者建"文件"

(二)删东西

remove(删除)

用法:rm 文件名

作用:删除文件,可一次删多个

关键选项:-r,-f

-r:删除目录必须加

解决rm默认删除文件的痛点,-r = recursive,能目录连带内容一起删

-f:强制删除,不提示

-f = force(强制),简单来说,就是删除某些文件时,不会问"确定吗",不加的话就会问。

删目录中最常用也最危险的组合写法:rm -rf

因为linux没有回收站,因此敲组合技之前一定要看清路径!

特别提醒⚠️:rm -rf / 或rm -rf /* 会删光整个系统。

(三)复制移动

cp:复制

copy,复制

用法:cp 源文件 目标位置

注意:

cp是复制,复制后源文件还在,多出一份新的

常用选项:-r

cp默认只能复制文件,不能复制目录,-r解决痛点。

-r = recursive(递归)

作用:复制目录时,把目录里所有内容一起复制过去

场景总结:复制"文件夹"需要用到-r

mv:移动/改名

move(移动)

用法:mv 源 目标

两大用途:

移动

将文件移动后,原位置就没有文件,文件到了新位置

改名

如果目标位置和源在同一目录,就相当于改名

cp 与 mv的关键差异:在移动目录上,mv不用加-r,直接就能移

三、用户与权限(linux的灵魂)

(一)用户:谁在用

查询当前登陆的用户名:whoami

查询这台机器上有哪些用户:cat/etc/passwd

会列出所有用户的档案,每行一个用户,信息很多,先看第一列(用户名)就行

⚠️:有个文件/etc/shadow,存加密密码,/etc/passwd只存基本信息(谁、家目录、shell)

显示当前用户的用户名、用户ID、所属组:id

(二)用户组:人怎么归类

概念:多个用户归到一起,方便统一管理权限。

一个用户:一个主组+多个附加组

主组:每个用户有一个主组,创建用户时默认生成

附加组:用户还可以额外加入别的组,可以有多个。

查看命令:

groups:看当前用户属于哪些组

id:也能看到组信息

(三)权限:谁对什么有什么权利

1.理解

linux里有三类人:所有者user(u)文件的主人;所属组groups(g),主人所在的组;其他人other(o),无关的其他人

权限的种类:读,写,执行。

读r,看内容,列出里面有什么

写w,改内容,建/删里面文件

执行x,运行它,进入这个目录

没有就是-。

举例:-rwxr-xr--

第一部分-:表示这是个普通文件(目录则是d)

第二部分,rwx:所有者的权限,读写执行

第三部分,r-x:所属组的权限,读和执行

第四部分,r--:其他人的权限,读

2.怎么改权限

chmod(字母法)

chmod= change mode(改变模式/权限)

用法:chmod 谁+/-权限 文件

符号:

u/g/o/a,所有者/所属组/其他人/所有人

+/-/=,加/减/设为

例子:

chmod u+x text.txt

chmod(数字法)

字母法好懂,但工作中数字法更常见。它把权限变成数字,写起来短。

核心:三个权限对应三个数

权限/数字

r(读)/4

w(写)/2

x(执行)/1

-(没有)/0

原理:把有的权限数字相加

rwx,4+2+1=7

rw-,4+2+0=6

r--,4+0+0=4

---,0

用法:chmod后面跟三个数字,分别对应:所有者/组/其他人

常见组合:

755:所有者全权,其他人读+执行,常用于目录、可执行文件

644:所有者读写,其他人只读,常用语普通文件

700:只有所有者有权限,常用于私密文件

777:所有人全权,这很危险,少用

(四 )提权:怎么临时当管理员

提权对应的需求:普通用户权限有限,有时候需要临时提高权限,让普通人临时拥有root的权限。

两个命令:

1.sudo------临时借用管理员权限(推荐)

sudo = superuser do,在一条命令面前加sudo,这条命令就以root身份执行,执行完,权限就恢复,恢复成普通用户。通常需要输入自己的密码。

用法:sudo 命令

特点:临时、单条命令、安全

2.su------切换用户

用法:su 用户名

su = switch user,切换后变成那个用户,直到退出。当然,切换到root:su - 或su root,要输入root的密码

特点:整体切换、持续、影响大

|------|----------|----------|
| 命令 | sudo | su |
| 干什么 | 临时单挑命令提权 | 切换到整个某用户 |
| 持续程度 | 就一条命令 | 一直持续到退出 |
| 密码 | 输自己的密码 | 输目标用户的密码 |
| 安全性 | 高(临时、可控) | 低(整体切换) |
| 实际常用 | 更常用 | 较少 |

为什么sudo更安全:

  • 只提权一条命令,用完就收回
  • 不用知道root密码,只用输入自己的密码
  • 系统还能记录谁用sudo做了什么

但是:得被授权了,才能用sudo,通常只有管理员把"你"加进sudo组或(wheel组),才能用

四、软件与服务(管理机器)

1、包管理(装软件yum/apt)

相比于,在windows上安装软件,得自己跑去官网找、下载、安装,linux可以说是帮助自己解放双手,只需要告诉linux自己需要什么,系统就会从仓库自动取货、装好。

关键概念:

软件仓库(repository),一个存软件的服务器,系统预先配置好了地址

包管理器,一个帮忙从仓库下载+安装+处理依赖的工具

依赖,软件运行需要的其他软件,自动帮忙安装

有个两个主流包管理器:

|---------------|------------|-----------------|
| 发行版 | 包管理器 | 装软件命令 |
| CentOS/RedHat | yum(新版dnf) | yum install 软件名 |
| Ubuntu/Debian | apt | apt install 软件名 |

看自己的服务器是哪个发行版选择包管理器。

常用命令(yum与apt用法几乎一样)

命令 作用

yum Install 软件名 装软件

yum remove 软件名 卸载

yum update 更新

yum search 关键词 搜软件

当然,在linux上装软件,可以用包管理器,也可以手动下载安装包,只不过后者作为备选罢了。

实际执行上,装软件通常要管理员权限,所以前面一般都加sudo。所以装软件=sudo+包管理器命令

2、服务管理(启动/停止程序systemctl)

服务service,在后台一直运行的程序,默默提供某种功能。

例子

服务 干什么

nginx 提供网站访问

mysql 提供数据库

sshd 实现远程连接

这些服务,开机就自动跑,一直不关,撑着系统功能

需要对服务进行管理的理由:

服务需要能启动、停止、重启、看状态,比如网站挂了,得重启nginx,所以要有一个工具统一管理服务。

核心命令:systemctl

用法:systemctl 动作 服务名

常用动作:

命令 作用

systemctl start nginx 启动

systemctl stop nginx 停止

systemctl restart nginx 重启

systemctl status nginx 看状态

systemctl enable nginx 开机自启

systemctl disable nginx 取消开机自启

两个常用:

看服务状态 :systemctl status nginx

显示服务在跑还是停了,以及最近日志。这便是排错第一步,先看状态。

重启服务 :systemctl restartnginx

改了配制后,重启让它生效。例如网站出问题,先重启试试

特别讲一讲enable:

enable=开机自动启动。不enable,重启机器后服务就没了,得手动打开。生产环境里,服务一般都要enable。

start管现在,enable管开机。

看看start与enable的区别:

|--------------|-----------------|
| 命令 | 效果 |
| start | 现在启动,重启机器后失效 |
| enable | 开机自启,永久生效 |
| start+enable | 现在也跑,重启后也跑(最常用) |

实际上会是这么使用:

systemctl start nginx

systemctl enable nginx

或者一条命令搞定:systemctl enable --now nginx

--now = 设开机自启的同时,现在就启动。一步到位,很常用。

3、进程(看谁在跑ps/top/kill)

进程progress,正在运行的程序。

这里需要和程序进行区分:

|----|---------------|----|
| 概念 | 是什么 | 在哪 |
| 程序 | 硬盘上的文件(静止的 ) | 硬盘 |
| 程序 | 程序跑起来的样子(动态的) | 内存 |

同一个程序可以有多个进程(比如开两个记事本)

看进程的必要性:

系统卡的时候可以查看是谁在占用资源,或是想知道某个程序在不在跑,再或者,可以结束卡死的程序。

核心命令:

ps------快照·看进程

用法:ps

ps用于显示当前的进程(快照),ps单独用,只ps当前终端,想要看全部,得加-ef或者aux

快照:类比一下,给进程拍张照,看这一刻谁在跑

常用组合:

ps -ef(查看所有进程,信息全)

ps aux(另一种写法)

top------动态·看进程

用法:top

top实时刷新,看谁在占用cpu、内存。需按q退出。类似windows的任务管理器。

kill------结束进程

用法:kill 进程号

kill 进程号,结束制定进程。进程号(PID,每个进程都有唯一的编号)从ps或者top里获得、查看。

强杀:kill -9 进程号

4、日志(看发生了什么, journalctl)

日志,Log,系统和程序运行过程中,自动记下的"流水账",例如飞机的黑匣子,手机的通讯录。当系统启动、程序运行、出错、谁登陆了......都会记下来,出问题时,翻日志就知道发生了什么。

通常会在以下场景彰显重要性:

  • 服务启动失败:看日志查找失败原因
  • 系统异常:看日志找线索
  • 谁登陆过:看日志有记录
  • 而排错的核心呢,就是看日志

核心命令:journalctl

用法:journalctl

查看系统日志(systemd管的服务的日志)。默认太多,一般加选项过滤。

常用用法:

命令 作用

journalctl -u nginx 看指定服务nginx的日志(排错常用)

journalctl -n nginx 看最近20行

journalctl -f 实时跟踪(像tail -f)

journalctl -xe 看最近的错误(排错常用)

-u = unit,指定某个服务

除了journalctl,日志也存在文件里,常见目录/var/log/,比如/var/log/messages(系统日志),/var/log/nginx。

可以直接用cat、less看:

less /var/log/massages

补充:

systemd:linux里负责启动和管理整个系统的"管家"。systemctl是控制systemd的命令;systemd把日志收集起来,journalctl看systemd管理的日志。

tail:看文件的"末尾几行"。默认是10行,写法:tail /var/log/messages。其他,例如:tail -n 20 /var/log/messages。作用:在诸多内容的日志文件中,直接定位到最新的末尾几行。

-f:意为follow,跟随,即实时盯着文件的新内容。tail -f /var/log/messages,文件一有新内容,就会立刻显示,实时看日志。需要按Ctrl+C退出。

tail 与tail -f:tail只能看一日志文件的末尾几行,tail -f能实时跟进日志文件。journalctl与journalctl -f同理,前者看systemd日志,后者实时跟进systemd日志。

五、网络与安全(对外链接)

1、网络查看(看网络状态ip/ping)

思考:你连云服务器,靠的是网络。那么,在linux里,怎么知道"我这台机器网络通不通、能不能访问某网站"?有没有类似"测试网络"的命令?

答案是有的。

既然连接的是云服务器,那么用之前需要先确认网络通不通,于是需要一个查网络状态的命令。

"通不通"有两层:

|---------|-----------------|------|
| 层次 | 需求 | 命令 |
| 本机网络配置 | 我这台机器的ip、网卡正不正常 | ip |
| 能不能到达对方 | 我能连上某个地方吗 | ping |

先看自己(ip),再在看对方(ping)。

核心命令一:ip

用法:ip addr

常用简写ip a,用于解决"自己这台机器的IP是多少",能用来看本机的IP地址、网卡信息。

核心命令二:ping

用法:ping 目标地址

例如:ping www.baidu.com,测能不能连接到百度;ping 192.168.1.1,测能不能练到某个IP

ping默认一直给目标地址发小包,按Ctrl+C停止

2、远程连接(连接别的机器ssh/scp)

这一块讲的是怎么连接到另一台机器,以及怎么在机器间传文件

核心命令:ssh------远程登录

ssh=secure shell

用法:ssh 用户名@目标地址

登陆后想退出,敲exit。

配套命令:scp------传文件(上传/下载)

scp= secure copy

解决需求:想在两台机器之间传文件(比如把本地文件传到服务器)

用法:scp 源文件 目标位置

例子:

scp a.txt root@192.168.1.10:/home/ # 本地上传到服务器

scp root@192.168.1.10:/home/a.txt . # 服务器下载到本地

写法 方向

scp 本地文件 用户@地址:路径 上传(本地->远程)

scp用户@地址:路径 本地路径 下载(远程->本地)

关键:远程路径前要加"用户@地址:",冒号后面才是路径。同时,冒号必须是英文,冒号前后不能有空格。冒号后面直接跟路径。

3、文件传输(传文件scp/rsync)

scp:使用方法参考上一个部分。特点:简单直接,每次全量传送。适合偶尔传一两个文件。

rsync:

rsync=remote synchronize(使时间一致)

**与scp的区别:**rsync只传"变化的部分",不是每次全传。也就是说scp传"全量",rsync传"增量"。

假设,你有一个大目录,只改了一个文件,如果用scp会整个重传,会很慢;而rsync会先对比,只传不一样的部分。

用法:rsync 选项 源 目标

常用写法:rsync -av 源目录/ 用户@地址: 目标目录/

易错点:rsync路径结尾的/

rsync路径结尾有没有/的意思不一样:

|-----------------------|------------------------------------|
| 写法 | 含义 |
| rsync -av project/ 目标 | 把project里的内容同步过去把project里的内容同步过去 |
| rstnc -av project 目标 | 把project这个目录本身同步过去(目标下会多一层project) |

关键选项:

-a,archive,归档模式(保留权限、时间等)

-v,verbose,详细输出,显示过程

-z,compress(z代表压缩),传输时压缩

--delete,让目标端和源端完全一致(删掉目标端多出来的)

-P,--partial--progress的合体,断点续传+进度

-r,recursive,递归目录

-l,links,保留软连接

-p,perms,保留权限

-t,times,保留时间戳

-g,group,保留属组

-o,owner,保留属主

-e,--rsh/exec,指定远程shell(如ssh)

-n,dry-run,只模拟不执行

补充:

syn:希腊语前缀,意为"一起、相同"

chron: 时间(time)

-ize:动词后缀,使......化

拓展:

sync,全称synchronize,意为"同步"(把内存数据刷到磁盘)

rsync,全称remote sync,意为"远程同步"

async,全称asynchronous,意为"异步"(a-表示'不')

synchronize,意为"同步"

4、防火墙(控制谁能访问firewalld)

给服务器提供的一层边界。防火墙相当于,控制"哪些网络请求能进来/出去"的机制。

核心思想:默认全关,只开需要的。

核心命令:firewall-cmd

CentOS用的防火墙工具就是firewall,命令就是firewall-cmd。cmd,在windows里是Command Prompt命令提示符的缩写,在linux中,是command的缩写,意为命令。

常用命令:

firewall-cmd --list--all,看当前规则

firewall-cmd--add-port=80/tcp --permanent,开放80端口(永久)

firewall-cmd --remove-port=80/tcp --permanent,关闭80端口

firewall-cmd --reload,重载,让改动生效

拓展:

80/tcp:80端口走TCP协议。

TCP:全称Transmission Control Protocol(传输控制协议),是网络传输数据的一套规则,上网、传文件、连接服务器,底层大多用的就是TCP。具有可靠性(数据发了,确保对方收到)、有序性(数据按顺序到达)、有连接性(先建立连接,再传数据)。

UPD(另一个协议):UPD像寄明信片一样,直接发,不管对方收没收到,相比TCP,不可靠,但快速。

关键概念:端口。

端口,是一台机器上,不同服务对外的"门牌号"。

要对外开放某些服务,就得"开对应的端口"。

一些的服务以及所需常用端口

网站(HTTP),80

网站(HTTPS),443

SSH远程,22

注意两个关键选项:

--permanent,意为永久生效。注意,不加的话,重启就没了。

--reload,意为重载配置,能让改动立即生效

六、shell脚本

1.什么是脚本(把多条命令打包)

先问一个直觉题:假设你每天都要做同一套操作,进目录,建文件,改权限,启动服务。那么,你觉得linux有没有办法,让你不用天天手敲着一串,而是一键搞定?

答案是有的。而且这正是shell要解决的事情。

shell脚本=把一串命令,夏津一个文件,一次性执行。

其核心思想,就是把"手敲一串命令"变成"运行一个文件"。

也就是把所需要的操作写进脚本,只用写一次,却能天天一键跑,还能配合定时任务,自动跑。具有省事、自动化、不用记的好处。

这里写一个最简单的脚本(myscript.sh):

|-------------------|--------------------|
| #!/bin/bash | 声明用哪个Shell执行(固定开头) |
| cd /home/zhangsan | 一条普通命令 |
| mkdir project | 一条普通命令 |
| chmod 755 project | 一条普通命令 |

问题来了,怎么运行脚本:

分两步:

++先给脚本加执行权限(chmod):++

chmod +x myscript.sh

++运行:++

./myscript.sh

./表示"当前目录下的"。运行后文件里的命令从上到写依次执行。

2.变量(存数据)

变量,一个用来存数据的"盒子"。例如:name = "zhangsan"。name就是变量名,zhangsan就是存进去的值,之后用$name就能取出zhangsan。

定义(赋值):

name="zhangsan"

age=20

++注意:等号两边不能有空格。++

使用(取值):变量名前加$

echo $name #输出 zhangsan

echo $age #输出 20

++$,告诉Shell"这是变量,取它的值"++

3.条件判断(if)

为什么需要条件:能让脚本"看情况办事"。

基本结构:

if 条件 ; then

命令

fi

解析:

if,如果

条件 ,判断的内容(方括号两边要空格)

then,那么

命令,条件成立时执行

fi,结束(反写if)

例子:

#!/bin/bash

if $age -gt 18 ;then

echo "成年了"

fi

++-gt=greater than。意思:如果age大于18,就输出"成年了"++

常用比较符:

-eq,等于(equal)

-ne,不等于

-gt,大于(greater than)

-lt,小于

-ge,大于等于

-le,小于等于

基本结构带else(否则):

if $age -gt 18 ; then

echo "成年"

else

echo "未成年"

fi

条件成立走then,不成立走else。

4.循环(for/while)

能让一段命令,重复执行多次。

for循环:知道要循环几次(遍历一组东西)

for 变量 in 列表

do

命令

done

例子:

for name in 张三 李四 王五

do

echo "你好,$name"

done

执行结果:

你好,张三

你好,李四

你好,王五

while循环:不知道几次,满足条件就一直循环

结构:

while 条件

do

命令

done

例子:

i=1

while $i -le 5

do

echo $i

i=$((i+1))

done

++拓展:(()),是一个专门的"算术运算"语法。变量,表示取i的值。二者不一样。++

++为什么会需要这样的语法?因为shell里,默认把一切当文字。++

5.定时任务(crontab)

定时任务,即让系统在指定时间,自动执行某个命令或脚本。具有无人值守,自动执行的价值。

核心命令:crontab

几个常用操作

crontab -l, 列出当前用户的定时任务

crontab -e,编辑定时任务

crontab -r,删除所有定时任务

++定时任务的格式(重点)++

每个定时任务,写成一行,分6个字段。

* * * * * 要执行的命令

│ │ │ │ │

│ │ │ │ └─ 星期几(0-7,0和7都表示周日)

│ │ │ └──── 月份(1-12)

│ │ └─────── 日(1-31)

│ └────────── 小时(0-23)

└───────────── 分钟(0-59)

顺序:分 时 日 月 周 命令

其中的 * 意为"每一个"(不限定)

举例子:

* * * * * ,每分钟

0 * * * * ,每小时的第0分钟(即每小时)

0 2 * * *,每天2:00

0 2 * * 1,每周一2:00

例子:每天凌晨2:00执行备份脚本

0 2 * * * /home/zhangsan/backup.sh

相关推荐
kyle~1 小时前
Linux --- CPU 调度机制
linux·运维·数码相机
晴天的雨.9921 小时前
【Linux】编译器gcc/g++
linux·运维·服务器
pirateeee1 小时前
Yocto 构建基于官方 imx6ull-14x14-evk 的 ubuntu 镜像
linux·嵌入式硬件
梦想的初衷~1 小时前
CESM2 完整实操学习大纲:环境搭建、案例运行、耦合模拟与代码开发
linux·地球系统模式·cesm2·气候模式模拟·clm 陆面模型·cam 大气模式·模式移植编译
叼烟扛炮1 小时前
Linux 学习笔记(三):文件管理与文本查看
linux·笔记·学习
海绵宝宝转agent1 小时前
2026-10-21学习笔记
笔记·学习·算法
动词ing1 小时前
【学习笔记】51单片机 点亮一个LED灯
笔记·学习·51单片机
zhangrelay1 小时前
手机十周年以上长期稳定测试意义不大正常非暴力使用电池健康都在七成以上
笔记·学习·智能手机
Iruoyaoxh1 小时前
linux-进程概念
linux