Linux学习
基础概念
Linux 是一种开源、免费且高度可定制的操作系统内核,广泛应用于服务器、嵌入式设备、桌面及移动端(如 Android)。
- 内核(Kernel):Linux 的核心,负责管理硬件资源(CPU、内存、磁盘等)和进程调度。
-
常见发行版:
-
服务器端:Ubuntu Server、CentOS/RHEL、Debian、AlmaLinux
-
桌面端:Ubuntu、Fedora、openSUSE、Arch Linux
-
嵌入式:Yocto、Buildroot
-
-
Linux 特点
-
开源免费:代码公开,可自由修改和分发。
-
稳定性高:适合长时间运行的服务器环境。
-
安全性强:权限管理严格,病毒威胁少。
-
多用户多任务:支持多个用户同时登录和运行多个进程。
-
Linux 命令与 Shell 命令的关系解析
Linux 命令是否等同于 Shell 命令?
Linux 命令本质上是 Shell 命令的一部分,但严格来说,两者并非完全等同。
Linux 命令与 Shell 命令的定义与区别
维度 | Linux 命令 | Shell 命令 |
---|---|---|
定义 | 可执行的系统工具或程序(如 ls 、grep ) | 由 Shell 解释执行的命令(包括内置命令和外部命令) |
来源 | 通常位于 /bin 、/usr/bin 等目录 | 包括 Shell 内置命令(如 cd 、echo )和外部程序(如 ls ) |
执行方式 | 直接由内核调用(通过 exec 系统调用) | 由 Shell 解析后执行(可能调用外部程序或直接运行内置命令) |
典型示例 | ls 、grep 、systemctl | cd 、echo 、for 循环、ls (外部命令) |
Linux 命令是 Shell 命令的子集
- Shell 命令的分类:
- 内置命令:由 Shell 自身实现(如
cd
、echo
、export
)。- 示例:
cd
命令直接由 Shell 修改当前工作目录,无需调用外部程序。
- 示例:
- 外部命令:调用独立的可执行文件(如
ls
、grep
)。- 示例:
ls
命令实际调用/bin/ls
程序。
- 示例:
- 内置命令:由 Shell 自身实现(如
- Linux 命令的位置:
- 大多数 Linux 命令是外部程序,位于
/bin
、/usr/bin
、/sbin
等目录。 - 这些命令可以被 Shell 调用,但也可以独立运行(如直接在终端输入
/bin/ls
)。
- 大多数 Linux 命令是外部程序,位于
- Shell 的角色:
- Shell 是用户与系统交互的接口,负责解析用户输入的命令。
- 当用户输入
ls
时,Shell 会:- 检查是否为内置命令(不是)。
- 在
PATH
环境变量指定的目录中查找ls
可执行文件。 - 调用
exec
系统调用启动/bin/ls
程序。
示例对比
-
Shell 内置命令示例:
echo "Hello" # 由 Shell 直接执行,无需调用外部程序 cd /tmp # 修改当前目录,由 Shell 内部实现
-
Linux 命令(外部命令)示例:
ls -l # 调用 /bin/ls 程序 grep "error" log.txt # 调用 /bin/grep 程序
-
混合使用示例:遍历当前目录下所有
.txt
文件并在每个文件中搜索包含字符串hello
的行。for file in *.txt; do # Shell 内置的 for 循环grep "hello" "$file" # 调用外部 grep 命令 done
示例输出: 如果 a.txt 内容为: hello world goodbye 运行脚本后,输出可能是: a.txt:hello world
如果文件名包含空格(如
my file.txt
),需要用引号包裹$file
(即"$file"
),否则grep
会将其解析为多个参数。
SSH
SSH(Secure Shell) 是一种用于安全访问远程计算机的加密网络协议,广泛应用于 Linux/Unix 系统管理、文件传输和端口转发等场景
SSH 基本功能
- 安全登录:替代不安全的 Telnet,所有通信(包括密码)均加密。
- 远程命令执行:在远程服务器上运行命令。
- 文件传输:结合
scp
或sftp
安全传输文件。 - 端口转发:建立加密隧道,访问内网资源或代理上网。
基本语法
ssh [选项] 用户名@远程IP -p 端口号
- 常用选项:
-p
:指定端口(默认 22)。-i
:指定私钥文件路径。-v
:显示详细调试信息(排查连接问题时有用)。
ssh user@192.168.1.100 # 默认端口 22
ssh root@example.com -p 2222 # 指定端口 2222
ssh -i ~/.ssh/mykey user@host # 使用私钥登录
生成密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"
- 参数说明:
-t ed25519
:推荐使用 Ed25519 算法(安全性高,速度快)。-C
:添加注释(可选)。
- 生成后文件:
- 私钥:
~/.ssh/id_ed25519
(需严格保密)。 - 公钥:
~/.ssh/id_ed25519.pub
(可公开)。
- 私钥:
上传公钥到远程服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 user@远程IP
手动上传(若 ssh-copy-id
不可用):
cat ~/.ssh/id_ed25519.pub | ssh user@远程IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Linux 远程登录
Linux 一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的 Linux 服务器。
这时我们就需要远程登录到Linux服务器来管理维护系统。
Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 22。
Window 系统上 Linux 远程登录客户端有 SecureCRT, Putty, SSH