一百天入职AI开发岗_熟悉Linux_[4]
本文介绍了Linux系统的核心概念和基本操作。
#Day4.shell命令
一、Linux总览
Linux正如其设计哲学“一切皆文件”一般,几乎所有的硬件设备、系统资源和操作接口都以文件的形式呈现和管理,使用Linux的本质就是对各种文件执行操作。
具体来说,当我们操作Linux系统时,实际上是在与各种文件打交道。例如:
- 修改系统配置实际上是在编辑/etc目录下的配置文件
- 运行程序是在执行具有可执行权限的文件
- 管理服务是通过读写systemd的单元文件
- 监控系统是通过读取/proc或/sys下的虚拟文件

Linux除此之外还是一个典型的多用户系统。对于一个文件,访客将会按照owner(拥有者)-group(群组成员)-other(其他)三层划分,每个用户都根据其所属身份来确定权限。于是为了保护系统的安全性,Linux系统对不同身份的用户访问同一文件(包括目录文件)的权限做了不同的规定。

具体权限划分如下:

除了开头的字母代表着文件类型外,后面九个字母,每三个为一组分别代表了每一级人员的权限。第一组对应文件的owner(拥有者),一般是该文件的创建者。第二组对应group(群组成员),类似于公司里同部门的人。最后一组other(其他),可以理解为需要查询信息的其他部门的员工或者游客身份的登录者。其中每一组内的字母则写明了拥有的权限的类型:r-读取,w-写入,x-执行(对于可执行文件)。若不具有某种权限,则对应的位置上会显示“-”。
值得一提的是我们在上一章里有提到过的root用户(根用户)。虽然它的名字叫用户,但具体来讲,它更像是管理员,拥有着系统的最高权限,能够执行任何操作并规定以上三层身份的系统用户所能拥有的权限。一个用户即使是文件的创建者,后续对该文档的各种操作也需遵从根用户划定的权限。
二、常见shell命令练习
#在root用户下
#每条命令拣选重要部分,并不展示全部
1)用户相关命令
添加用户:useradd。
命令格式:
useradd [选项] [用户名]
---------------------------------------------
[选项] :
-c 添加对用户的注释
-g 指定用户主要组
-G 指定用户附加组
-s 指定用户登录的shell
-m 创建用户的家目录
[用户名] :
用户登录时所需输入的名称
示例:useradd -m -g developer sam
在名为developer的组中,添加用户sam并自动为其创建家目录(无家目录可能会使用户登录遇到问题)。事实上,我们以root用户身份登录时,进入的环境就是root用户的家目录。需要注意的是通过该命令创建的用户不拥有有效密码。实际无法登录,要转为可用账户需单独设置密码。
设置密码:passwd
命令格式:
passwd [选项] [用户名]
---------------------------------------------
[选项] :
-l 锁定用户账户
-u 解锁用户账户
-S 查看账户状态
-e 设置密码首次登录后过期,要求用户自行设置密码
[用户名] :
用户登录时所需输入的名称
示例:passwd sam回车后即可输入账号sam的初始密码。
修改用户:usermod
命令格式:
usermod [选项] [用户名]
---------------------------------------------
[选项] :
-c 修改对用户的注释
-d 修改用户家目录,原有家目录将会删除
-m 配合参数d使用,将原来家目录中的内容搬到新目录
-g 修改用户主要组
-G 修改用户附加组
[用户名] :
用户登录时所需输入的名称
示例:usermod -c "行政助理" -G group1,group2,group3 sam
将用户sam添加注释“行政助理”并增设额外的附加组
删除用户:userdel
命令格式:
userdel [选项] [用户名]
---------------------------------------------
[选项] :
-r 删除用户家目录
-f 强制删除(即使用户正在登录)
[用户名] :
用户登录时所需输入的名称
示例:userdel -rf sam
强行删除已经登录并正在操作系统的sam。
组的修改与之类似
2)操作文件相关命令
列出当前目录下的文件:ll
在Linux中,不同文格式的文件有着不同的高亮色。

切换当前所在路径:cd
命令格式:
cd [选项] [directory]
---------------------------------------------
[选项] :
. 切换到当前目录(相当于刷新,或者暂时不知道写什么时写一句cd.用来占位)
.. 切换到上一级目录
/ 切换到根目录
~ 切换到当前用户的家目录
[directory] :
目标文件的绝对路径
示例:cd ~
切换到家目录。
创建目录(文件夹):mkdir
命令格式:
mkdir [选项] <directory>
---------------------------------------------
[选项] :
-p 递归创建目录,上级目录不存在时一并创建
<directory> :
所创建的目标路径
示例:mkdir -p project/{src,bin,doc,test}
递归创建四个目录project/src、project/bin...(文件夹project不存在时,project会被一并创建)
创建文件:touch
命令格式:
touch <file_name>
---------------------------------------------
示例:touch project/src/main.py
执行文件:bash
命令格式:
bash [选项] <file_name>
---------------------------------------------
[选项] :
-i 进入交互式环境
使用bash解释器执行文件。
重命名/剪切文件/文件夹:mv
命令格式:
mv <old_file_name> <new_file_name>
---------------------------------------------
示例:mv project project1
本质上是旧文件夹移动(剪切)到新文件夹。
复制粘贴:cp
命令格式:
cp [选项] <src> <target>
---------------------------------------------
[选项] :
-r 递归复制。将包含的的文件夹也复制进去。
-i 输入y确认操作后覆盖原文件。
<src> <target>:
源、目标文件
示例:cp project myproject #失败,连myproject都不会创建
ll myproject
cp -r project myproject
ll myproject
原模式仅处理非目录(非文件夹)内容,加入-r后会像我们常规认知里的一样全部复制。
删除文件:rm
命令格式:
rm [选项] <directory>
---------------------------------------------
[选项] :
-r 递归删除目录
-f 强制删除
<directory> :
目标路径
示例:rm -r project1
删除project1文件夹。慎用该命令,删除后不可恢复!
3)一点小知识
在Linux的上一章,我们使用的vim其实就是编辑文件的命令。
通管符“|”,用于链接命令,将前一个命令的输出作为后一个命令的输入。示例:echo "password123" | passwd --stdin testuser。echo类似于Python的print();--stdin接受标准输入流;testuser就是用户名。
更多推荐



所有评论(0)