当前位置: 首页 > news >正文

Linux基础 - shell基础

目录

零. 简介

一、常见的 Shell 类型

二、Shell 命令格式

三、基本命令

四、通配符

五、重定向

六、管道

七、变量

八、条件判断和流程控制


零. 简介

Shell 是一种命令解释器,在 Ubuntu 系统中,它负责接收用户在命令行中输入的命令,并将其解释后传输给 Linux 内核执行,然后把内核执行后的内容返回并展示在命令行中。

Ubuntu 中默认使用的是 Bash(Bourne Again Shell),它是 sh 的增强版,也是 Linux 标准默认的 Shell。

以下是一些关于 Ubuntu Shell 的常见操作和特点:

  1. 查看系统 Shell 类型:可以使用命令echo $SHELL(注意命令区分大小写)。
  2. Shell 通配符:用于模糊匹配文件名。常见通配符包括*(匹配任意字符序列,包括空字符序列)、?(匹配任意单个字符)等。
  3. Shell 特殊字符:例如|(管道符,用于连接两个命令,将前一个命令的输出作为后一个命令的输入)、>(输出重定向符,将命令的输出写入到指定文件中,覆盖原有内容)、>>(输出重定向符,以追加的方式将输出添加到指定文件的现有内容之后)等。
  4. 环境变量:常用的环境变量有PATH(可执行命令的搜索路径)、HOME(用户主目录)、LOGNAME(当前用户的登录名)、HOSTNAME(主机名)、PS1(当前命令提示符)、SHELL(当前使用的 shell)等。可以使用env命令查看所有的环境变量。如需引用环境变量,需要在变量名称前加$符号,如要修改则不需要加$符号。例如,查看当前用户主目录可以使用命令echo $HOME

Shell 是用户与 Linux 内核之间的交互接口,它接收用户输入的命令,并将其传递给内核执行,然后将执行结果返回给用户。

一、常见的 Shell 类型

  1. Bash(Bourne Again Shell):这是大多数 Linux 发行版默认使用的 Shell。它结合了 Bourne Shell 和 C Shell 的许多特性,功能强大且具有良好的兼容性。Bash 提供了丰富的命令行编辑功能、命令历史记录、别名设置等,支持脚本编程,语法灵活。
  2. Sh(Bourne Shell):是最早的 Unix Shell 之一,语法简单,执行效率高。但相对功能较为有限,在现代 Linux 系统中较少直接作为用户默认的 Shell 使用。
  3. Csh(C Shell):其语法类似于 C 语言,具有一些独特的特性,如命令别名、作业控制等。然而,由于其语法与其他常见 Shell 有所不同,可能会导致一定的学习难度。
  4. Ksh(Korn Shell):是对 Bourne Shell 的增强,具有更强大的功能和更好的编程特性。它在一些商业 Unix 系统中被广泛使用。

其中,Bash 是大多数 Linux 发行版默认使用的 Shell。

二、Shell 命令格式

一般命令格式为:命令名 [选项] [参数]

例如,ls -l /home 中,ls 是命令名,-l 是选项,/home 是参数。

以下是一些常用的快捷键:

  1. Ctrl + C:中断当前正在执行的命令。
  2. Ctrl + D:在输入模式下,通常表示输入结束(例如退出终端或结束文件输入)。
  3. Ctrl + Z:暂停当前正在运行的前台进程,并将其放入后台。
  4. Ctrl + A:将光标移动到命令行的开头。
  5. Ctrl + E:将光标移动到命令行的末尾。
  6. Ctrl + U:删除从光标位置到命令行开头的所有字符。
  7. Ctrl + K:删除从光标位置到命令行末尾的所有字符。
  8. Ctrl + L:清屏,使屏幕显示内容向上滚动,效果类似于输入 clear 命令。
  9. Ctrl + R:用于搜索命令历史记录。输入部分关键字后,按 Ctrl + R 可查找相关的历史命令。
  10.  和  方向键:浏览之前输入过的命令历史记录,向上箭头查看更早的命令,向下箭头则相反。

这些快捷键可以帮助您更高效地在 Shell 中操作和输入命令。

Tab 键具有自动补全和提示的功能,能极大地提高命令输入的效率和准确性。

当您输入命令、文件名、目录名等的一部分后按下 Tab 键,如果输入的部分足以唯一确定要输入的内容,Shell 会自动补全剩余部分。

如果输入的部分不足以唯一确定,再次按下 Tab 键,Shell 会列出所有可能的匹配项供您选择。

例如,如果您在当前目录中有文件 file1.txt 和 file2.txt ,当您输入 cat fi 后按下 Tab 键,Shell 会自动将其补全为 cat file 。如果您再按一次 Tab 键,会显示出 file1.txt 和 file2.txt ,提示您有这两个可能的选项。

对于命令和选项,Tab 键也有相同的作用。比如输入 ls - 后按 Tab 键,可能会补全为 ls -l (如果 -l 是常见且唯一的选项),或者显示出以 - 开头的所有可能选项。

输入 reb + tab就会自动补全reboot

三、基本命令

  1. ls:用于列出目录中的文件和子目录。常见选项包括:

    • -l:以长格式显示,包括文件权限、所有者、大小、修改时间等详细信息。
    • -a:显示包括隐藏文件(以 . 开头的文件)在内的所有文件。
    • -h:以人类可读的方式显示文件大小(例如以 K、M、G 为单位)。
  2. cd:用于切换当前工作目录。例如:

    • cd /home/user:切换到 /home/user 目录。
    • cd..:切换到上一级目录。
    • cd ~:切换到用户的主目录。
  3. mkdir:创建新的目录。例如:mkdir new_directory

  4. rmdir:删除空目录。注意,只能删除空目录,如果目录不为空,需要使用其他命令如 rm -r 。

  5. touch

    • 创建一个新的空文件,如果文件已存在,则更新其访问和修改时间。
    • 例如:touch new_file.txt
  6. cat

    • 查看文件的内容并将其输出到终端。
    • 例如:cat file.txt
  7. more 和 less

    • 用于分页查看大文件的内容。按空格键翻页,more 只能向前翻页,less 还可以向后翻页。
  8. head:默认显示文件的开头 10 行内容。可以通过选项指定显示的行数,例如 head -5 file.txt 显示前 5 行。

  9. tail:默认显示文件的末尾 10 行内容。与 head 类似,可以通过选项指定显示的行数。常用于查看日志文件的最新内容。

  10. cp:复制文件或目录。例如:cp file.txt destination ,将 file.txt 复制到指定的目的地。

  11. mv:移动或重命名文件或目录。例如:mv file.txt new_file.txt 重命名文件。

  12. rm:删除文件或目录。使用 -r 选项递归删除目录及其内容,使用 -f 选项强制删除而不提示确认。

  13. grep:在文件中搜索匹配指定模式的行。例如:grep "keyword" file.txt 在 file.txt 中搜索包含 "keyword" 的行。

  14. find:在指定的目录及其子目录中查找符合条件的文件或目录。例如:find /path -name "file.txt" 在指定路径中查找名为 file.txt 的文件。

  15. chmod:更改文件或目录的权限。权限可以用数字表示(如 755)或符号表示(如 u+rwx )。

  16. chown:更改文件或目录的所有者。

四、通配符

  1. *:匹配任意字符序列(包括空字符序列)。
  2. ?:匹配任意单个字符。

例如,假设当前目录下有文件 123.txt1abc.txtxabc.txtabc.txt 和 abcd.txt,那么:

  • ls *abc:将匹配任意 0 个或多个字符,然后以 abc 结尾的文件,即会显示 1abc.txtxabc.txtabc.txt
  • ls?abc:将匹配任意 1 个字符,然后以 abc 结尾的文件,即会显示 1abc.txt
  • ls (0-9)*:将匹配以数字开头的文件,即会显示 123.txt1abc.txt
  • ls (^0-9)*:将匹配以非数字开头的文件,即会显示 xabc.txtabc.txtabcd.txt

五、重定向

在 Shell 中,重定向用于改变命令的输入来源和输出去向。

输出重定向

  1. >:将命令的输出覆盖重定向到一个文件。如果文件已存在,其原有内容将被覆盖;如果文件不存在,则会创建新文件。

例如,执行 ls > file.txt 会将 ls 命令的输出写入 file.txt 中,如果 file.txt 已存在,其原内容将被替换。

  1. >>:将命令的输出追加重定向到一个文件。如果文件不存在,则创建新文件;如果文件已存在,新的输出将添加到文件末尾。

比如,ls >> file.txt 会将 ls 命令的输出追加到 file.txt 的末尾。

输入重定向

<:将命令的输入来源重定向为一个文件,而不是默认的键盘输入。

例如,sort < file.txt 会从 file.txt 读取数据进行排序,而不是等待用户在键盘输入数据。

此外,还有一些特殊的重定向操作:

  1. 2>:将错误输出重定向到一个文件。

例如,command 2> error.txt 会将命令 command 产生的错误信息写入 error.txt 。

  1. 2>>:将错误输出追加重定向到一个文件。

  2. &> 或 &>>:同时重定向标准输出和错误输出。

例如,command &> file.txt 会将 command 的标准输出和错误输出都重定向到 file.txt 。

重定向功能使得在 Shell 中对命令的输入输出进行灵活控制和处理成为可能,方便了数据的保存、处理和传递。

六、管道

在 Shell 中,管道(|)用于将一个命令的输出作为另一个命令的输入,实现命令之间的数据传递和协同工作,从而构建更复杂和强大的操作。

例如,假设有一个命令 command1 产生了一些输出,而另一个命令 command2 需要对这些输出进行进一步的处理。通过管道,可以将 command1 的输出直接传递给 command2 ,而无需将中间结果保存到文件或进行其他复杂的操作。

具体的语法是:command1 | command2

以下是一个简单的示例,假设我们有一个包含用户名和年龄的文件 users.txt ,内容如下:

找出年龄大于25岁的用户

cat users.txt | awk '$2 > 25'

七、变量

在 Shell 中,变量用于存储数据,以便在脚本或命令行中重复使用和操作。

Shell 变量主要分为以下两类:

环境变量
环境变量是由系统预先定义好的,或者由用户在系统环境中自定义设置的变量。它们对整个系统或当前用户的所有进程都有效。常见的环境变量如 PATH(指定系统查找可执行文件的路径)、HOME(用户的主目录)、USER(当前用户的用户名)等。可以使用 printenv 或 env 命令查看当前系统中的环境变量。

用户自定义变量
用户可以根据自己的需求创建和使用自定义变量。自定义变量的命名规则通常遵循以下几点:

  1. 变量名由字母、数字和下划线组成。
  2. 变量名以字母或下划线开头。

定义变量的语法是:变量名=值 。例如:my_variable=10 。

引用变量的值时,需要在变量名前加上 $ 符号。例如:echo $my_variable 将会输出变量 my_variable 的值。

变量的值可以是字符串、数字等。如果值中包含空格或特殊字符,建议用引号(单引号或双引号)括起来。

单引号和双引号在使用时有一些区别:

  • 单引号:会严格按照原样输出,其中的变量和特殊字符不会被解析。
  • 双引号:其中的变量会被解析和替换为其值。

另外,还可以对变量进行一些操作,如重新赋值、删除变量(使用 unset 命令)等。

总之,Shell 变量为在 Shell 中进行灵活的编程和操作提供了便利。

八、条件判断和流程控制

例如 if-else 语句、for 循环、while 循环等,用于编写更复杂的脚本。

条件判断

通常使用 if 语句来进行条件判断。基本语法如下:

if [ condition ]; then# 当条件为真时执行的命令
fi

condition 可以是各种表达式,常见的有:

  1. 比较字符串:

    • string1 = string2 :判断两个字符串是否相等。
    • string1!= string2 :判断两个字符串是否不相等。
  2. 比较整数:

    • num1 -eq num2 :判断两个整数是否相等。
    • num1 -ne num2 :判断两个整数是否不相等。
    • num1 -gt num2 :判断 num1 是否大于 num2 。
    • num1 -lt num2 :判断 num1 是否小于 num2 。
    • num1 -ge num2 :判断 num1 是否大于等于 num2 。
    • num1 -le num2 :判断 num1 是否小于等于 num2 。
  3. 文件测试:

    • -f file :判断文件是否存在且为普通文件。
    • -d dir :判断目录是否存在。
    • -e file :判断文件或目录是否存在。

还可以使用 elif (相当于 else if)和 else 来实现多分支的条件判断:

if [ condition1 ]; then# 条件 1 为真时执行的命令
elif [ condition2 ]; then# 条件 1 为假,条件 2 为真时执行的命令
else# 所有条件都为假时执行的命令
fi

流程控制

  1. for 循环:
    • 遍历列表中的值:
    for item in value1 value2 value3; do# 对每个值执行的操作done
  • 遍历文件中的行:
    for line in $(cat file.txt); do# 对每一行执行的操作done
  1. while 循环:
    while [ condition ]; do# 条件为真时执行的操作done
  1. until 循环:
    until [ condition ]; do# 条件为假时执行的操作done

相关文章:

Linux基础 - shell基础

目录 零. 简介 一、常见的 Shell 类型 二、Shell 命令格式 三、基本命令 四、通配符 五、重定向 六、管道 七、变量 八、条件判断和流程控制 零. 简介 Shell 是一种命令解释器&#xff0c;在 Ubuntu 系统中&#xff0c;它负责接收用户在命令行中输入的命令&#xff0c…...

一文搞懂Linux命令行下载OneDrive分享文件

一文搞懂Linux命令行下载OneDrive分享文件 什么问题&#xff1f; 因为OneDrive有些坑&#xff0c;无法从分享界面获取真实下载链接&#xff0c;比如下面这个链接&#xff1a; https://connecthkuhk-my.sharepoint.com/:f:/g/personal/jhyang13_connect_hku_hk/EsEgHtGOWbJIm…...

SpringBoot 实现RequestBodyAdvice封装统一接受类功能

一、相关往期文章 SpringBootVue实现AOP系统日志功能_aop的vue完整项目 Spring AOP (面向切面编程&#xff09;原理与代理模式—实例演示_面向切面aop原理详解 二、需求分析 按照一般情况&#xff0c;统一接受类可以像以下的方式进行处理&#xff1a; 如果不想使用 Request…...

贪吃蛇——c语言版

文章目录 演示效果实现的基本功能技术要点源代码实现功能GameStart打印欢迎界面和功能介绍绘制地图创建蛇创建食物 GameRun打印提示信息蛇每走一步 GameEnd蛇死亡后继续游戏 演示效果 贪吃蛇1.0演示视频 将终端应用程序改为控制台主机 实现的基本功能 贪吃蛇地图绘制蛇吃食物的…...

ctr/cvr预估之WideDeep模型

ctr/cvr预估之Wide&Deep模型 在探索点击率&#xff08;CTR&#xff09;和转化率&#xff08;CVR&#xff09;预估的领域中&#xff0c;我们始终追求的是一种既能捕获数据中的线性关系&#xff0c;又能发现复杂模式的模型。因子分解机&#xff08;Factorization Machines, …...

快速生成基于vue-element的后台管理框架,实现短时间二次开发

你是否遇到过当你想要独立开发一个项目时对反复造轮子的烦扰&#xff1f; 这种流水线的操作实在让人受不了 而vue-element-template很好的帮你解决了这个烦恼 只需克隆下来&#xff0c;改改图标&#xff0c;模块名&#xff0c;甚至样式&#xff0c;就会变成一个全新的自己的项目…...

PCIe 7.0 要来了,一文看懂PCIe发展和技术

PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;&#xff0c;即外围组件高速串行扩展总线标准&#xff0c;自其诞生以来&#xff0c;已成为计算机硬件中不可或缺的一部分。它以其高速串行通信能力和不断演进的技术规范&#xff0c;满足了日益增长的数据…...

API-事件类型

学习目标&#xff1a; 掌握事件类型 学习内容&#xff1a; 事件类型鼠标事件焦点事件键盘事件文本事件focus选择器案例 事件类型&#xff1a; 鼠标事件&#xff1a; <title>事件类型-鼠标事件</title><style>div {width: 200px;height: 200px;background-c…...

解决poweroff时需要等待其他服务关闭问题

当我们在执行poweroff或者reboot时会出现某个服务需要等待才能关闭系统,这个时候就可以在服务中添加如下: After=shutdown.target Conflicts=reboot.target halt.target poweroff.target Before=shutdown.target reboot.target halt.target poweroff.target具体实例: [Uni…...

ThinkPHP-导入Excel表格(通用版)

一、版本说明 1.PHP8.2、MySQL8.0、ThinkPHP8.0 2.使用前安装phpspreadsheet composer require phpoffice/phpspreadsheet 二、技术说明 因本人采用前后端分离&#xff0c;因此上传文件以及导入表格为分离开发&#xff0c;如无需分离开发则自行合并开发即可。 1.第一步&a…...

毕昇jdk教程

毕昇jdk教程指南链接&#xff1a;Wiki - Gitee.com...

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器&#xff08;factor detector&#xff09;2.4 生态探测器&#xff08;ecological detector&#xff09;2.5 交互因子探测器&#xff08;interaction dete…...

深入理解Qt属性系统[Q_PROPERTY]

Qt 属性系统是 Qt 框架中一个非常核心和强大的部分&#xff0c;它提供了一种标准化的方法来访问对象的属性。这一系统不仅使得开发者能够以一致的方式处理各种数据类型&#xff0c;还为动态属性的管理提供了支持&#xff0c;并与 Qt 的元对象系统紧密集成。在这篇文章中&#x…...

【C语言课程设计】员工信息管理系统

员工信息管理系统 在日常的企业管理中&#xff0c;员工信息的管理显得尤为重要。为了提高员工信息管理的效率&#xff0c;我们设计并实现了一个简单的员工信息管理系统。该系统主要使用C语言编写&#xff0c;具备输入、显示、查询、更新&#xff08;增加、删除、修改&#xff…...

「动态规划」如何求最长递增子序列的长度?

300. 最长递增子序列https://leetcode.cn/problems/longest-increasing-subsequence/description/ 给你一个整数数组nums&#xff0c;找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其…...

深度神经网络DNN概念科普

深度神经网络DNN概念科普 深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是机器学习领域中一类具有多层结构的神经网络模型&#xff0c;它能够通过学习数据中的复杂模式来解决非线性问题。下面是对深度神经网络的详细解析&#xff1a; 基本组成部分 输入层&…...

Tomcat WEB站点部署

目录 1、使用war包部署web站点 2、自定义默认网站目录 3、部署开源站点&#xff08;jspgou商城&#xff09; 对主机192.168.226.22操作 对主机192.168.226.20操作 上线的代码有两种方式&#xff1a; 第一种方式是直接将程序目录放在webapps目录下面&#xff0c;这种方式…...

IPv6 中 MAC 33:33 的由来

一、33:33 由来 1. RFC9542 - 2024-05-02 Note IANA allocates addresses under the IANA OUI (00-00-5E) as explained in [RFC9542]. Unicast addresses under the IANA OUI start with 00-00-5E, while multicast addresses under the IANA OUI start with 01-00-5E. In t…...

告别手动邮件处理:使用imbox库轻松管理你的收件箱

imbox库简介&#xff1a; imbox是一个强大的Python库,专为与IMAP服务器交互而设计.IMAP&#xff08;Internet Message Access Protocol&#xff09;是一种用于电子邮件的标准协议,允许用户在远程服务器上管理邮件.imbox库通过IMAP协议与邮件服务器通信,帮助用户轻松地读取、搜索…...

Ubuntu 18.04 安装 PCL 1.14.1

在进行科研项目时&#xff0c;我们常常需要将 C 和 Python 结合起来编程。然而&#xff0c;每次将 PCL&#xff08;Point Cloud Library&#xff09;的内容添加到 CMakeLists.txt 文件中时都会报错。在深入分析后&#xff0c;我们推测可能是当前使用的 PCL 1.8 版本与现有程序不…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…...