Skip to content

Linux 入门笔记

本文参考:Linux 入门 - SAST skill docs

§1 What is Linux?

Linux 是一种自由和开放源码的类 UNIX 操作系统,Linux 也是自由软件和开放源代码软件发展中最著名的例子,只要遵循 GNU,任何个人和机构都可以自由地使用 Linux 的所有底层源代码,这使得它得到来自全世界软件爱好者和组织的开发支持。

狭义的Linux单指其内核,而平时说的Linux指的是其发行版本,还包括安装工具、系统配置、图形桌面界面、各种 GNU 软件等。常见的 Linux 发行版有 Debian、Ubuntu、Fedora、CentOS、Arch Linux 等。笔者使用的是WSL Ubuntu。其他使用Linux的方法有Linux系统、虚拟机(Virtualbox、Docker)、服务器远程连接(SSH、RDP)。

为什么更推荐 Linux 作为程序员的开发环境?

  1. 开发环境和服务器环境一致

    绝大多数网站后端、云服务器、Docker 容器、科研计算服务器都运行 Linux。如果在 Windows 本地开发、最后部署到 Linux,可能遇到换行符 CRLF 和 LF 不同、Shell 命令不同、权限机制不同、某些依赖只在 Linux 上正常运行等问题。

  2. 安装开发工具更统一

    Linux 安装工具通常可以直接使用包管理器,很多工具不需要到处找安装包、点击安装向导、设置环境变量。

  3. 命令行和自动化能力强

    Linux Shell 不只是“输入命令的黑框”,它可以把多个程序像积木一样组合。这种自动化能力在大型项目、科研实验、服务器运维中非常重要。

  4. Git、SSH、Docker 等工具属于 Linux 的“主场”

    Git、SSH、Docker、Kubernetes、GCC、CMake、Make 等工具都与 Unix/Linux 生态关系很深。它们在 Windows 上也能使用,但在 Linux 中通常文档中的命令可以直接复制、路径和权限行为更符合预期、不需要额外的兼容层、与远程服务器操作方式一致、Shell 脚本兼容性更好。

§2 Shell 101

Shell:一种软件,我们可以将它视为“用户到内核之间的中介”,它接受并解析(英语:Parse)用户输入命令行的指令,并调用内核所提供的对应服务。分为图形界面和命令行界面两种,比如 Windows 的文件浏览器、程序管理器都可以算是 GUI Shell,但用 Linux 时我们一般说的都是 CLI Shell。

常见的 Shell 包括 sh、bash、zsh、fish 等。

Linux终端提示符training@SAST-Training:~$

含义:

  • 身份:training
  • 主机名:SAST-Training
  • 当前工作目录:~ (指的是 home/username
  • 美元符号表示当前用户不是 root (反之是 #

解析命令的过程:每输入一个命令,Shell解析、运行,将结果输入终端。

最基本的命令:

1
2
training@SAST:~$ echo "Hello Linux!"
Hello Linux!

Shell 的命令由空格分割,第一个是要运行的程序(如上例 echo),后面跟它的参数(如上例 "Hello World!")。

基本指令

Command Description
目录相关
pwd 当前目录
cd 切换目录
ls 查看目录列表
mkdir 创建目录
find 在层级目录下搜索文件
文件相关
man 了解软件具体命令用法
tldr 更清晰的man
touch 创建
mv 移动(可用于重命名)
cp 拷贝
rm 删除
chmod 更改文件权限
chown 更改文件所属
echo 输出提供的文本
file 查看文件类型
cat 将文件内容输出到标准输出
用户和组相关
useradd 创建用户
groupadd 创建组
passwd 更改密码
chpasswd 批量更改密码
su 一般用于切换用户
sudo 一般用于执行 root 权限指令

查看文件系统

基本的表示:/ 表示根路径,~ 表示家路径(/home/username/,如果是 root 则为 /root/),. 表示当前目录,.. 表示上一级目录。

根路径下的文件夹:

  • /etc 目录是系统根路径下最重要的目录之一,它是用来存储操作系统文件的公共区域,比如 /etc/sudoers/etc/passwd 分别记录了拥有 root 权限的用户、系统内的所有用户信息。
  • /var 目录是系统的服务或应用频繁写入的地方,比如 /var/log 存储了程序的 log 文件。
  • /tmp 里是一些程序只需要访问一两次的文件,每当系统重启时,这里的文件都会被清空。注意这个文件夹默认可被任何用户写入。
  • /home 这个文件夹下是各个用户的家目录。
  • /mnt 是数据卷的挂载点;通过 USB 等接口连接的外部媒体也可能出现在 /media 文件夹中。
  • /srv 存放这个服务器提供的服务所需的文件(如网站资源)。
  • /proc:虚拟文件系统,用于存储内核和进程的运行时信息,例如 /proc/cpuinfo 查看 CPU 信息,/proc/meminfo 查看内存信息。
  • /sys:虚拟文件系统,提供设备和驱动相关的系统信息。
  • /dev:设备文件目录,例如 /dev/null(空设备文件)和 /dev/sda(磁盘设备文件)。

Shell 中的常见操作符

Operator Description Example
& 允许命令在后台执行 cp -r ./here ./there &
&& 执行多条指令,逻辑和 C++ 类似 wget someurl/install.sh . && ./install.sh
> 重定向输出 echo "Hello" > hello.txt
< 重定向输入 ./main < in.txt
>> 重定向输出并采取“追加”模式 echo cirno >> visitors.txt
| 连接前后两个程序的输出和输入 ls ~/Documents | grep note.txt

软件包管理系统是在电脑中自动安装、配置、卸载和升级软件包的工作组合。使用软件包管理系统可以大大简化在 Linux 发行版中安装软件的流程。常见的软件包有两种类型:deb 软件包(由 dpkg 和它的前端 apt 管理,使用于 Debian、Ubuntu)和 RPM 软件包(由 dnf、yum、ZYpp 等前端管理)。

§3 SSH

Secure SHell, 是一种用于在不安全网络上安全访问远程计算机 的协议. 它提供了一种加密的方法, 使得用户可以通过不安全的网络连接上安全地 远程登录 (ssh) 和传输文件 (scp / sftp). SSH 提供了完整的 Linux Shell 支持, 且协议开源可信, 常用终端开源, 安全漏洞较少, 因此被广泛使用.

远程执行命令:SSH 可以直接远程执行命令而不需要连接到远程的 Shell 中,在连接命令后加上需要执行的命令.

1
ssh username@server [command]

远程拷贝文件scp 指令可以从远程拷贝文件到本地/从本地拷贝文件到远程,基本格式是 scp <from> <to>。如果要拷贝一个文件夹,应该使用 flag -r 表示递归深入目录。

1
2
3
4
# 将本地当前目录的 test.zip 拷贝到远程的 ~/test.zip
scp test.zip training@153.223.56.12:~/test.zip
# 将远程的 data.csv 拷贝到本地当前目录
scp training@152.32.34.12:~/data.csv .

SSH配置文件:每次连接服务器都要输入用户名、IP 和端口未免过于繁琐,我们可以通过编辑 SSH 配置文件来简化命令。这个配置文件位于家路径的 .ssh 文件夹下,名字为 config(如果不存在需自己创建),即 ~/.ssh/config。对于 Windows 系统而言,这个 .ssh 文件夹位于用户目录下 C:\Users\<username>\.ssh\config。配置文件写法如下:

1
HOST sast    HostName 152.136.177.53    Port 8000     (默认22,此时不需要指定)    User root 

这样每次我们想连接到 root@152.136.177.53 -p 8000 时只需要输入 ssh sast 即可。

这个配置文件同样适用于 scp 命令:

1
# 前一小节例子的简略版 scp test.zip sast:~/test.zip  scp sast:~/data.csv . 

PubKey Authentication:利用密码学中的公钥-私钥非对称加密机制,我们只需要在服务器中预存好自己的公钥,就可以在登录时自动化验证流程而免去密码。

About this Post

This post is written by Ezra Yang, licensed under CC BY-NC 4.0.

#Basics #Linux

Comments