引言

  我们为什么要学习Linux,想象一下,你找到了一个AI开源项目,准备运行它。结果弹出一堆错误,因为它的依赖库在Windows上安装极其困难。而且你将来需要租用云服务器来训练模型,你会发现99%的服务器都运行着Linux系统。Linux是AI世界的通用语言和基石。学会Linux,意味着拿到了开启AI世界大门的钥匙。

一、理解Linux的骨架与规则

  1、目录结构- 一切皆文件

  Linux不是一个完整的操作系统,而是一个操作系统内核。我们通常所说的"Linux系统"实际上是"Linux发行版",包含了Linux内核加上各种应用软件。Linux没有C盘、D盘的概念,整个系统只有一个根目录/,所有文件和设备都像树枝一样从这里生长出去。

  Linux采用树形目录结构,所有内容都以文件形式组织,包括硬件设备。

/              # 根目录,所有目录的起点
| /bin       #存放二进制可执行文件(ls,cat,mkdir等)
| /boot       #存放用于系统引导时使用的各种文件
| /dev       #存放设备文件
| /lib       #存放跟文件系统中的程序运行所需要的共享库及内核模块
| /proc       #虚拟文件系统,存放当前内存的映射
| /mnt       #挂载目录
| /sbin       #存储管理级别的二进制执行文件
|__ /home       # 用户家目录,存储个人文件和配置
|   |__ /home/username  # 你的个人工作空间
| /root       # 超级管理员root的家目录
|__ /etc        # 系统配置文件存放地
│   |__/etc/passwd    # 用户账户信息
|  |__/etc/group     # 用户组信息
|__ /var        # 经常变化的文件
│   |__ /var/log       # 系统日志文件
|__/opt        # 第三方软件安装目录
│   |__/opt/anaconda3 # Anaconda通常安装在这里
|__/usr/bin    # 用户命令和应用程序
|__/usr/local/bin # 本地编译安装的程序
|__/tmp        # 临时文件

  接下来让我们实际操作来探索一下根目录,在XShell(详情见上一篇安装内容)中输入以下代码:

# 查看根目录内容
ls /

# 查看详细目录信息
ls -l /

# 进入家目录的两种方式
cd /home/your_username
cd ~

# 查看当前路径
pwd

2、文件权限机制 - 系统安全的基石

  Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件的权限做了不同的规定。对应权限划分如下:

  读写的权限分别为r (Read):读权限,值为4、w(write):写权限,值为2、x(Execute):执行权限,值为1。

  总共有九个权限,可以分组三大组分别是:
1)、user:当前文件所属用户的权限
2)、group:与当前文件所属用户同一组的用户权限
3)、others:其他用户的权限

  如需修改权限,可使用chmod命令,chmod命令的格式为:chmod [选项] 模式 文件或目录

  例如我们首先创建 cc.py 测试文件并查看初始权限,然后依次给文件所有者添加执行权限、给所属组添加写权限、移除其他用户的读权限,最后为所有用户添加执行权限。

touch cc.py # 创建测试文件
ll cc.py  # 查看初始权限
chmod u+x cc.py      # 给所有者增加执行权限
chmod g+w cc.py      # 给组增加写权限  
chmod o-r cc.py      # 移除其他人的读权限
chmod a+x cc.py      # 给所有用户增加执行权限
ll cc.py  # 查看修改后的权限

3、用户及用户组管理

  Linux系统采用多用户多任务的分时架构,要使用系统资源必须通过系统管理员创建的个人账户登录。这种账户机制具有双重作用:对管理员而言,能够跟踪用户活动并控制资源访问权限;对用户而言,可以安全地组织个人文件并保护隐私。每个账户都包含唯一的用户名和密码,成功登录后即可访问系统并进入专属的主目录。用户账户管理主要涵盖三个核心环节:
1)、账户的创建、删除与信息维护
2)、登录密码的设置与管理
3)、用户组的配置与权限分配
  这样的设计既保证了系统资源的安全管控,又为每个用户提供了独立的工作空间。

  使用useradd即可增加一个用户其命令格式为:useradd 选项 用户名。

   当某个用户账户不再需要时,可以从系统中彻底移除。删除用户账户的本质是从 /etc/passwd 等系统配置文件中清除该用户的记录信息,必要时还会同步删除用户的专属主目录。在Linux系统中,使用 userdel 命令来删除现有用户账户,其基本语法为:userdel [选项] 用户名。其中最常用的选项是 -r,该选项的作用是在删除用户账户的同时,一并删除该用户对应的主目录及其内部所有文件,实现账户信息的完整清理。
  修改已有用户的信息使用usermod命令,其格式是:usermod 选项 用户名。

  指定和修改用户口令的Shell命令是passwd,命令的格式为:passwd 选项 用户名。

  在Linux系统中,每个用户都至少属于一个用户组,这种机制允许系统管理员以组为单位批量管理用户权限。不同Linux发行版对用户组的实现略有差异,通常创建用户时会自动建立与其同名的用户组作为主组。用户组管理主要包括组的创建、删除和属性修改,这些操作本质上是对 /etc/group 系统文件进行更新。要新增用户组,需使用 groupadd 命令,其基本语法为 :groupadd [选项] 用户组名。通过该命令可以快速在系统中建立新的用户组架构,为后续的用户权限分配奠定基础。

  如果要删除一个已有的用户组,可以使用groupdel命令,其格式为:groupdel 用户组

  我们也可以通过groupmod命令修改用户组的属性,其使用格式为:groupmod 选项 用户组

  我们来一个简单的操作:首先创建名为"ccc"的用户组,然后在该组下建立testuser用户并设置登录密码,接着我们将用户加入wheel附加组以提升权限,之后再修改ccc组的标识ID,最后按创建顺序的逆序去清理资源——删除用户及其主目录,并移除用户组。

# 创建名为ccc的用户组
groupadd ccc
getent group ccc  #从系统数据库中获取ccc组的信息,确认组是否创建成功

# 创建新用户testuser并指定属于ccc组
useradd -m -g ccc testuser
id testuser  #显示testuser用户的UID、GID以及所属的组
getent group ccc   #再次查看ccc组的信息

# 为用户testuser设置登录密码
passwd testuser

# 将用户加入附加组wheel
usermod -aG wheel testuser
id testuser  #再次查看testuser的用户和组信息
groups testuser  #显示testuser所属的所有组

# 修改用户组属性(更改组GID)
getent group ccc  #查看修改前ccc组的信息
groupmod -g 1005 ccc
getent group ccc  #再次查看,确认GID已经修改

# 删除前的最终确认查看
id testuser
getent group ccc
ls -ld /home/testuser
lid -g wheel | grep testuser

# 删除用户及其主目录
userdel -r testuser
id testuser 2>/dev/null
ls -ld /home/testuser 2>/dev/null

# 删除用户组
groupdel ccc
getent group ccc 2>/dev/null

二、Linux的基础命令

  在Linux中,命令行终端不像图形界面那样直观友好,却以其无可比拟的精准与强大,赋予了我们直接与系统内核对话的权限。我们穿梭于层层目录时不管是创建删除文件,还是操控进程、管理权限,只要掌握这些基础命令,就如同有了打开这座操作系统宝库的第一把钥匙,让我们得以摆脱鼠标的束缚,可以化繁为简,提高自己的工作效率。

1、查看路径及文件

  在Linux命令行中,清晰地了解当前所处位置及目录内容是一切操作的前提。pwd命令能直接告诉我们当前的工作目录绝对路径。而查看目录内容则有功能丰富的ls家族:最简单的ls或dir会列出当前目录下的可见文件和目录名;ll(它是ls -l的缩写)则以详细列表形式展示,包括权限、所有者、大小和修改时间等关键信息,若想查看包括以点.开头的隐藏文件在内的所有项目,则需使用ls -a。此外,stat命令能提供关于一个文件的更深入、更详细的元数据信息。在默认的配色方案中,终端会以不同颜色高亮不同类型的文件,从而让你快速识别:蓝色代表目录,绿色代表可执行文件,红色代表压缩包,浅蓝色代表链接文件,灰色则代表其他普通文件。

2、文件及目录操作

  在Linux中,管理目录结构离不开基础命令:touch创建空文件;mkdir创建目录,-p参数可递归创建父目录。mv命令用于文件或目录的重命名。导航则依赖cd命令,如cd ..返回上级,cd ~直达家目录,使用路径参数可精准切换。

 切换目录操作
cd .        # 留在当前目录(无实际变化)
cd ..       # 切换到上级目录
cd /        # 切换到根目录
cd ~        # 切换到当前用户的家目录
cd project/src # 使用相对路径切换到当前目录下的 project/src 目录

3、删除操作

  在Linux中,删除操作需谨慎使用rm命令。rm可直接删除文件,rm -r用于递归删除目录及其内容,系统会要求确认;而rm -f强制删除不提示,rm -rf则是强制递归删除目录的强力组合,使用时一定要确认目标正确。

# 查看当前目录内容
$ ls -l
# 删除单个文件
$ rm ai_script.py

# 删除目录(需要确认)
$ rm -r my_folder

# 强制删除,不提示确认
$ rm -f cccc.txt

4、复制粘贴及剪切

  在Linux中,文件操作通过cp和mv命令实现。cp用于复制文件,-r参数可递归复制目录;mv则用于移动(剪切)文件或目录,也可用于重命名。常用选项包括:-f强制覆盖、-i交互确认、-l创建硬链接、-s创建软链接。

# 查看当前目录内容
ls -l
# 1. 复制文件到当前目录
cp new_file.txt new_file_copy.txt
# 2. 复制文件到project目录
cp new_file.txt project/
# 3. 移动(剪切)文件到project目录
mv new_file.txt project/

5 、查看文件内容

  在Linux中查看文件内容有多种方式。cat命令用于顺序显示全文,适合小文件,tac则逆向显示。两者结合重定向可实现文件合并。cat -b可为非空行添加行号。对于长文件,more和less提供分屏浏览:空格翻页,回车下行,b回退,q退出    ,其中less功能更丰富,支持前后自由导航。

  

# 创建示例文件
echo -e "第一\n第二\n第三" > example.txt
# 1. 顺序查看文件内容
cat example.txt
第一
第二
第三
# 2. 逆序查看文件内容
tac example.txt
第三
第二
第一
# 3. 合并多个文件
cat file1.txt file2.txt > merged.txt
# 4. 显示行号(非空行)
cat -b example.txt
     1  第一
     2  第二
     3  第三

6、查看文件大小

  在Linux中,du命令用于统计文件和目录的磁盘空间使用情况。常用选项包括:-s显示总大小,-h以人们习惯的形式显示,-c显示总计。du -sh可直接查看目录总大小,du -ah则显示目录下所有文件的详细大小分布。

# 查看当前目录内容
ls -l
# 1. 查看单个文件大小
du -h example.txt
# 2. 查看目录总大小(最常用)
du -sh project
# 3. 查看目录详细大小分布
du -ah project
# 4. 查看当前目录所有文件大小
du -ah --max-depth=1
# 5. 统计并显示总计
du -ch example.txt project

7、编辑文件

  在Linux中,vi/vim是强大的文本编辑器,包含三种模式:命令模式(打开文件默认)、插入模式(按i进入,可编辑内容)和末行模式(按:进入,用于保存退出)。按Esc可从插入模式返回命令模式,在末行模式输入wq保存并退出。

# 1. 使用vim打开文件(进入命令模式)
vim new_file_copy.txt

# 2. 按 i 键进入插入模式,此时可编辑文件内容
# 屏幕左下角会显示 -- INSERT -- 标志
# 3. 编辑完成后,按 Esc 键返回命令模式
# 4. 按shift+: 进入末行模式,输入以下命令:
:wq     # 保存并退出
:q      # 直接退出(未修改时)
:q!     # 强制退出不保存
:w      # 仅保存不退出
# 5. 在命令模式下的常用操作:
yy     # 复制当前行
p      # 粘贴
dd     # 删除当前行
/文本  # 搜索指定文本

三、Linux常用工具

1、压缩解压工具

  在Linux中,tar是核心且功能强大的归档与压缩工具,被誉为“打包专家”。它不仅能将大量文件合并为一个归档包,还支持gzip(.gz)、bzip2(.bz2)等多种压缩算法以减小体积。掌握其-zcvf(创建压缩包)、-xvf(解压)及-tf(查看内容)等关键命令,对于管理和传输庞大的AI数据集、模型文件及日志都能提供很大的帮助。

1)、打包文件和目录

tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg 
 #将anaconda-ks.cfg文件打包为anaconda-ks.cfg.tar

tar -cvf example.txt.tar project/ 
#打包目录

  tar命令也可以打包多个文件和目录,但要注意用空格分开。

tar -cvf cc.tar anaconda-ks.cfg example.txt/

2)、打包并压缩目录

  压缩命令并不能直接压缩目录,要先用 tar 命令将目录打包,然后再用 gzip 命令或 bzip2 命令对打包文件进行压缩。

gzip example.txt.tar 
#压缩

    上一步我们已经对example.txt打包了,所以这里直接压缩即可。

3)、tar解打包操作

tar -xvf 压缩包
 tar -xvf anaconda-ks.cfg.tar 

   如果想要指定解压位置,则需要使用 "-C(大写)" 选项。

tar -xvf anaconda-ks.cfg.tar -C/root

4)、tar同时打包和压缩

  tar命令可同时完成打包与压缩。使用-z选项处理.tar.gz格式(如tar -zcvf pack.tar.gz dir压缩,tar -zxvf pack.tar.gz解压),-j选项则对应.tar.bz2格式。

tar -zcvf example.txt.tar.gz example.txt

tar -zxvf example.txt.tar.gz

5)、unzip命令

    unzip命令可以查看和解压缩 zip 文件。

unzip -l example.zip #查看压缩包内容

 unzip example.zip #解压zip文件到当前目录

2、Vim

1、vim操作详解

1)、查找文本

在命令模式下输入英文状态的下的/

/a    从光标所在位置向前查找字符串a
/^a    查找以a为行首的行
/abc$    查找以a为行尾的行
?a    从光标所在为主向后查找字符串a
n    向同一方向重复上次的查找指令
N    向相反方向重复上次的查找指令

2)、替换文本

r    替换光标所在位置的字
R    从光标所在位置开始替换并覆盖后面的字符,按esc结束命令
:s/a/b/g    将当前光标所在的行中所有的a用b替换
/n1,n2/a/b/g     将文件里n1到n2行中所有的a用b替换
:%s/a/b/g    将文件所有的a用b替换

3)、vim快捷键

h    光标向左移动一位
j    光标向下移动一行
k    光标向上移动一行
l    光标向右移动一位
w或W    光标移动到下个单词的首位
b或B    光标移动到上个单词的首位 
e或E    光标移动到下个单词的尾部
nw或nW    光标向右移动n个单词
nb或nB    光标向左移动n个单词
0或^    光标移动到当前行的首位
$    光标移动到当前行的尾部
fa或Fa    光标移动到当前行中下一个a字符处
gg    光标移动到文件开头
G    光标移动到文件末尾
nG    光标移动到n行
:n    编辑模式下可以将光标快速定位到指定行的行首
u    撤销最近一次对文本的修改
Ctrl+R    恢复最近一次对文本的修改
U    第一次使用会撤销对当前行的修改,第二次使用则会恢复对当前行的修改
起始行,终止行 s/^/#/g    在指定范围行加"#"注释
起始行,终止行s/^#//g    取消连续行注释
:set nu    显示行号
:set nonu    不显示行号

  到这里我们就基本了解了Linux的规则与一些常见的基础命令以及其常用的工具了,这些还需我们牢记并且多加练习,下一篇将详细的了解shell编程。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐