Class1(2020):Shell基础(一)——Shell概念

Shell概念

本系列博客为MIT的《Missing in CS Class(2020)》的课程笔记。

注:<>^在本文中指Ctrl,如c^cCtrl-c

终端

  • <Ait+T>:打开终端

  • <L>:清空终端内容

流的概念

文件被视为连续的字节流进行处理。文件分为普通文件与设备文件。

  • 普通文件:分为文本文件、二进制文件

  • 设备文件:在Linux上,一切皆文件。操作系统有一组预定义的设备文件:标准设备文件。当进程运行时,操作系统会为每个进程自动打开标准设备文件。常见的标准设备文件:

    • 标准输入流(stdin),通常为键盘,文件描述符为0

    • 标准输出流(stdout),通常为显示器,文件描述符为1

    • 标准错误流(stderr),文件描述符为2

路径

  • 路径分隔符:\(Windows) /(Linux)
  • 根目录:最顶层的目录。Windows:盘符:\;Linux:/
  • 绝对路径:以根目录起始的路径
  • 相对路径:以当前工作目录起始的路径
    • .:当前工作目录
    • ..:父目录
  • ~:当前用户的根工作目录
  • -:上次所在目录
  • 通配符:*:匹配任意长度0的字符;?:匹配任意单个字符;{}:表示某种集合,用于解释器的自动展开。如*{.c,.py}表示任意c文件与py文件

环境变量

  • Linux:$PATH。不同路径采用:分隔
  • Windows:%PATH%。不同路径下采用;分隔。
  • 当输入命令时,操作系统首先进入环境变量中顺序遍历寻找命令中使用的程序。

权限模型

在Linux下的权限模型中,每个文件/目录都具有权限控制。权限属于元信息,存储在对象的inode节点内。权限分为三种:

  • r:读。对于文件,代表可读取其中内容;对于目录,代表可查看目录中的内容
  • w:写。对于文件,代表可修改其中内容;对于目录,代表能修改该目录的内容,包括新建、删除、移动/重命名其中的文件或该目录本身。若仅对该目录中的文件可写,但对该目录不可写,则只能修改文件本身的内容,但无法删除文件。
  • x:执行。对于文件,代表可执行此文件;对于目录,代表能否进入该目录。注意与r权限区分,进入目录与查看目录内容是不同的,进入目录是最基本的权限。仅当对目录拥有x权限,才能对目录进行其他权限的操作。

Shell提示符(PS1)

Shell解释器配置文件位于用户主目录下以rc为后缀的隐藏文件。如bash则为~/.bashrc

下面以bash为例,进入终端后:username@hostname:dirtype

  • username:当前账户名,可使用whoami程序查看

  • hostname:当前主机名,可使用hostname程序查看

  • dir:当前工作目录。

    • 可使用pwd程序查看当前工作目录。
    • 若要切换工作目录,可使用cd dir(Change Dir)。当对dir有执行权限(x)时,更改当前工作目录至dir
  • type:当前账户的类型。$:非超级管理员(superadmin)账户;#superadmin账户,默认唯一的superadmin账户为root,uid=0

    • sudo command:在非superadmin账户下,以root身份进行执行命令。不切换$PATHsudo需要输入当前账户密码

    • su [username=root]:切换其他账户,需要输入对方账户密码。不切换pwd$PATH
      su -username:切换其他账户。切换pwd$PATH

命令、程序及常用程序

  • 命令:由若干个可能带有选项参数的程序组合而成的一组指令。在命令中使用后缀&使其在后台运行。

程序

  • 程序选项:以---开头,位于程序之后。-后的选项为选项的简写,--后的选项为其完整写法。

  • 程序的返回值:0表示正常返回,非0代表出现错误。如C中main函数的return,实质上是在向操作系统返回程序运行结果。布尔型程序true永远返回0,false永远返回1。

  • 逻辑运算:程序返回值的可参与逻辑运算,也被称为短路运算

    • &&:和运算符。对于一条含有该运算符的命令,仅当先前程序均执行成功(返回值均为0)时,才继续执行之后的程序;当某个程序执行失败(返回值非0)时,停止执行该命令。

    • ||:或运算符,对于一条含有该运算符的命令,只要有程序执行成功(返回值为0),停止执行该命令。

常用程序

  • man program:程序帮助手册。

  • which program:打印程序所在的绝对路径

  • date:输出系统日期

  • echo string:打印,将string打印至stdout

  • ls dir:查看某一目录下包含的文件/目录。若不指定dir,则默认为当前工作目录。
    选项:-l:查看某一目录下文件/目录的详细元信息

    例:typepermission_string link_number owner groups number update_time name

    • type-dd代表其为一个目录,-表示其为一个普通文件。
    • permission_string:长度为9的权限字符串,每3个一组。每组顺次代表为该对象的所有者(Owner)、用户组(Groups)、其他人(Others)的权限。若有权限则用权限名表示;-表示无该权限。可用chmod命令修改权限。chmod +name表示授予权限,chmod -name表示移除权限
    • number:对于普通文件,表示文件的字节数;对于目录,表示目录项的数量。某一目录的目录项=普通文件数量+子目录的目录项数+1(表示..,父目录)
    • update_time:表示最后的修改时间。使用touch name修改文件/目录的更新时间,使用选项-t YYYYMMDDhhmm.ss修改为指定时间YYYY-MM-DD hh:mm:ss。若操作对象不存在,则新建空白文件
  • findfind dir options expression:从dir开始进行查找。

    • 选项:-name "string":以对象名进行查找,可查找文件名、路径名。可使用通配符。
    • -type typetypefd
  • diffDifference,将两对象差异输出至stdout

    • diff file1 file2:输出两文件差异。仅在file1中的内容前用表示,仅在`file2`中的内容前用表示。
    • 选项:-r dir1 dir2:递归输出两目录差异。
    • 选项:-u file1 file2:以人类友好的方式输出差异。
    • 选项:-q file1 file2:只判断是否有差异,不输出差异内容。
  • grep:文本的模式匹配 grep "pattern" filefile可使用通配符。

    • 选项:-i:忽略模式串大小写
    • -r:递归搜索目录下所有文件
  • mvMove,移动文件/目录

    • mv file newdir:移动文件file至新目录newdirfile数量可不固定,且可使用通配符。若newdir不存在,则操作失败。如:将所有扩展名为.cpp的文件移动到目录./1中:mv *.cpp ./1

    • mv oldname newname:若newname不存在,则对操作对象重命名;若newname存在:对于文件,则操作对象会替换newname,对于目录,则操作对象会被移动并成为newname的子目录。

  • cpCopy,复制文件/目录

    • cp file1 file2 :复制文件。若file2已存在,则其将被替换

    • 选项:-r dir1 dir2:递归复制文件夹内所有文件。若dir2已存在,则dir1被复制成为dir2的子目录。

  • scp options SourceFile TargetPath:主机间复制文件。

    • 接受远程地址:Username@RemoteAddress:Path
    • 选项:-r:递归复制文件夹内所有文件
  • mkdir dirMake Dir,新建空文件夹

  • rmRemove,删除操作对象

    • rm file:删除文件
    • 选项:-r dir:递归删除文件夹下的所有内容
  • rmdir dir:当该文件夹为空时,则删除

  • cat file:打印文件全部内容至stdout

  • tail file:打印文件末尾内容。默认查看最后10
    选项:-n number:打印文件末尾number

  • tee file:将stdin同时写入stdoutfile

  • journalctl:打印系统日志

  • alias newname="oldname":为命令设置别名

  • jobs:工作管理指令

流的重定向、连接

  • 重定向输出流:>>>

    • <command> > file覆盖地重定向输出流至文件
    • <command> >> file追加地重定向输出流至文件
      例:echo命令通过重定向输出流的方式,可将字符串打印进文件中:echo string > file
    • n > file:将文件描述符为n的文件覆盖地重定向到文件。
      1 > file:将stdout重定向到file
    • n >> file:将文件描述符为n的文件追加地重定向到文件。
    • n >& m :将文件描述符 n 的输出重定向到文件描述符 m。如command 2>&1:将stderr重定向到stdout
  • 重定向输入流:<

    • < file:重定向输入流自文件,输入来自文件。
      例:cat file命令的本质即为cat < file,通过重定向输入流以读取某文件内容并打印。
    • n <& m:将文件描述符 m 的输入重定向到文件描述符 n
  • 例:使用cat命令实现文件复制:cat < file1 > file2cat起到作为中转站的作用。

    • cat的输入流被重定向至file1,其内容被读入cat

    • cat的输出流被重定向自file2,其内容被打印进file2

  • 管道符:|,位于两程序之间,用于连接它们的流。用法:program1 | program2,将program1stdout作为program2stdin

进程通信

进程间通过信号进行通信。信号从1开始编号。

信号可由进程发出,也可用户手动发出:kill -SIGid PID

常用信号:

信号编号 信号名称 信号含义
1 SIGHUP 终端挂起/控制进程结束br/若要忽略该信号,在运行程序的命令前使用nohup,或对已运行的程序使用disown
2 SIGINT 中断(Ctrl-C)
3 SIGQUIT 终止(Ctrl-\)
9 SIGKILL 强制终止
11 SIGSEGV 段错误
15 SIGTERM 终止信号,通常为kill命令发送的信号
18 SIGCONT 继续执行暂停进程
19 SIGSTOP 暂停进程
20 SIGTSTP 终端挂起(Terminal Stop,CTRL-Z)br/之后可通过fgbg分别在前台/后台继续进程
posted @   椰萝Yerosius  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示