#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就是用户名。

Logo

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

更多推荐