Linux笔记:命令进阶使用相关功能

2023-11-06

目的

使用linux时用户可以通过一个又一个的命令来完成各种操作,除了基础的各个命令外linux还提供了各种便利的功能来协调使用这些命令。这些功能让用户在使用linux时可以更加得心应手,也为shell脚本编写提供了巨大的可能性。这篇文章将对相关的内容做个简单的记录。

通配符

通配符可以用来代替匹配某些字符内容,常用的一些通配符示例如下:

表达式 描述 表达式 描述
* 单个或多个任意字符 ? 单个任意字符
[145] 匹配 1 4 5 [abD] 匹配 a b D
[4-8] 匹配 4 5 6 7 8 [a-z] 匹配 a~z,即所有小写字母
[C-F] 匹配 C D E F [2-7,c-e] 匹配 2 ~ 7 和 c ~ e
[!345] 不匹配3 4 5 [^345] 同[!345]
[[:alpha:]] 单个任意字母 [[:digit:]] 单个任意数字
[[:upper:]] 单个任意大写字母 [[:lower:]] 单个任意小写字母
[[:alnum:]] 单个任意字母或数字 [[:punct:]] 单个标点符号

在这里插入图片描述

转义符

转义符在各种编程语言中都很常见,一般是将有特殊功能的符号变成普通字符或是反一反。在linux命令操作中主要可以使用下面几个转义符:

符号 说明
反斜杠 \ 将其后面的符号变为普通字符,比如变量符号、通配符等
单引号 ’ ’ 其内部所有内容都变为单纯的字符串
双引号 " " 将其内部所有内容变为单纯的字符串,$和``不进行转义
反引号 ` ` 命令替换,替换为其中命令的结果,也可用 $( ) 代替
pi@raspberrypi:~ $ echo $HOME
/home/pi
pi@raspberrypi:~ $ echo \$HOME
$HOME
pi@raspberrypi:~ $ echo '$HOME'
$HOME

pi@raspberrypi:~ $ echo date
date
pi@raspberrypi:~ $ echo `date`
Fri 03 Sep 2021 10:30:29 AM CST

流程控制

shell中通常一行只能使用一条命令,我们可以使用一些符号让多条命令一起执行,下面是一些基础的符号:

符号 示例 说明
; 命令1 ; 命令2 命令1和命令2按顺序执行
&& 命令1 && 命令2 当命令1执行正确,命令2才会执行
|| 命令1 || 命令2 当命令1执行不正确,命令2才会执行
() (命令1 ; 命令2) 括号内的内容会作为一整块执行,注意其中使用cd命令的话只会对这一块有效
pi@raspberrypi:~ $ (cd Desktop/; ls)
2.txt  3.txt  4.txt  5.txt
pi@raspberrypi:~ $ cd Desktop/; ls
2.txt  3.txt  4.txt  5.txt
pi@raspberrypi:~/Desktop $ cd Desktop/ || cd ~
bash: cd: Desktop/: No such file or directory
pi@raspberrypi:~ $ cd Desktop/ && pwd
/home/pi/Desktop
pi@raspberrypi:~/Desktop $ cd ~ || pwd ; ls
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Share  Templates  Videos
pi@raspberrypi:~ $ cd ~ || (pwd ; ls)
pi@raspberrypi:~ $ cd ~ || pwd ; ls
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Share  Templates  Videos
pi@raspberrypi:~ $ 

管道符

linux中管道符 | 是非常好用的一个功能,它的功能很简单 —— 把前一个命令要输出的信息当作后一个命令的标准输入

管道符最常用的场景就是结合 grep 命令使用:
在这里插入图片描述

重定向

通常操作命令时输出的内容会直接显示在shell中,我们可以使用重定向的方式将其输出到其它地方。重定向不光有输出的重定向,也有输入的重定向。这里涉及到一个文件描述符(File Descriptor)的概念。

文件描述符以数字形式表示(0、1、2、……),简单的来说可以理解成为文件或设备(Linux中一切皆文件,设备在系统中也表现为文件)的指针。默认情况下文件描述符 0、1、2 是有特定功能和默认指向的文件的:

文件描述符 名称 功能 默认操作
0 stdin 标准输入 从键盘输入
1 stdout 标准输出 输出到屏幕(终端)
2 stderr 标准错误 输出到屏幕(终端)

我们常用的命令执行时如果有信息输出,这些信息都会输出到文件描述符1的文件中。默认情况下文件描述符1是指向屏幕(终端)的,所以我们可以在屏幕(终端)中看到命令输出的内容。

对于指针而言我们可以改变其指向的对象,文件描述符也差不多,我们可以改变其指向的文件。如果我们将文件描述符1指向的文件改成某个其它的文件,比如log.txt,那么命令执行时原本应该输出到屏幕(终端)的信息就会被输出到log.txt中,这就是重定向了。

基础的重定向方式如下:

表达式 描述
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止,分界符是自己定义的字符串
命令 > 文件 将标准输出覆盖到文件中,等价于 命令 1> 文件
命令 >> 文件 将标准输出追加到文件中,等价于 命令 1>> 文件
命令 2> 文件 将错误信息覆盖到文件中
命令 2>> 文件 将错误信息追加到文件中
命令 &> 文件 将标准输出和错误信息覆盖到文件中
命令 &>> 文件 将标准输出和错误信息追加到文件中

在这里插入图片描述

上面只是些最基本的重定向,事实上重定向经常组合使用,组合使用时从左到右进行,比如下面的例子:

表达式 描述
命令 < 文件A > 文件B 将文件A作为命令的标准输入并将标准输出到文件B
命令 > 文件A 2>> 文件B 将标准输出覆盖到文件A中,将错误信息追加到文件B中
命令 > 文件 2>&1 这个表达式相当于 命令 1> 文件 2>&1
先将标准输出覆盖到文件中,再将错误信息也修改为标准输出,这样它也会写入到文件中
最终的结果就是标准输出和错误信息一起覆盖到文件中
命令 >> 文件 2>&1 将标准输出和错误信息一起覆盖到文件中

在这里插入图片描述

上面出现的各种重定向方式都只在当前进程的当前语句有效,如果想要在当前进程一直生效的化可以使用 exec 命令,可以使用 man execexec --help 等方式查看具体使用方式。

环境变量

在shell中可以像各种编程语言一样定义变量,然后在一般操作中使用这些变量:

pi@raspberrypi:~ $ NAISU=/home/pi/Desktop
pi@raspberrypi:~ $ cd $NAISU
pi@raspberrypi:~/Desktop $ pwd
/home/pi/Desktop

一个变量可以有多个值,各个值之间使用:(冒号)分隔:

pi@raspberrypi:~/Desktop $ NAISU=aaa
pi@raspberrypi:~/Desktop $ echo $NAISU 
aaa
pi@raspberrypi:~/Desktop $ NAISU=$NAISU:bb
pi@raspberrypi:~/Desktop $ echo $NAISU 
aaa:bb

上面的定义的这些变量只有当前用户可以用,需要输出到全局才可以给其他用户用:

pi@raspberrypi:~/Desktop $ export NAISU

如果不需要这个变量了可以把它取消掉:

pi@raspberrypi:~/Desktop $ unset NAISU

前面定义的变量在系统重启后就消失了,想要重启后还能继续用的话只要在系统启动或是用户登陆时会执行的脚本中添加相关的命令即可。通常可用的脚本文件有一下一些(可能有也可能没有,依顺序执行,对于同一个变量后面的会覆盖前面的):
/etc/profile /etc/bashrc ~/.bash_profile ~/.profile ~/.bashrc

上面这些文件中通常默认已经有一些命令脚本了,其中就包含系统默认的环境变量设置。(通常来说bashrc是系统启动后就会执行的,而profile是用户登陆后才会执行的。)

可以使用 env 命令查看当前用户可用的环境变量。常用的一些环境变量如下:

变量名 描述 变量名 描述
HOME 用户的主目录 SHELL 用户在使用的Shell解释器名称
PATH 解释器搜索用户执行命令的路径 EDITOR 用户默认的文本解释器
RANDOM 生成一个随机数字 LANG 系统语言、语系名称

总结

这篇文章中介绍的各个命令使用相关的功能单个来看都非常简单,但是组合起来使用就拥有了丰富的可能性。很多时候仅仅使用命令与上面各个功能组合就可以实现大部分需求了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux笔记:命令进阶使用相关功能 的相关文章

  • 一、多路复用

    1 什么是多路复用 数据通信系统或计算机网络系统中 传输媒体的带宽或容量往往会大于传输单一信号的需求 为了有效地利用通信线路 希望一个信道同时传输多路信号 这就是所谓的多路复用技术 Multiplexing 采用多路复用技术能把多个信号组合
  • linux:ubuntu提示unable to locate package docker-engine

    参考 docker installation failed on Ubuntu 20 04 LTS Vmware Stack Overflow 说明 docker engine已经改为docker io
  • shell中的常用通配符,字符类

    通配符是一种特殊语句 主要有星号 和问号 用来模糊搜索文件 当查找文件夹时 可以使用它来代替一个或多个真正字符 当不知道真正字符或者懒得输入完整名字时 常常使用通配符代替一个或多个真正的字符 shell 提供了特殊字符来帮助你快速指定一组文
  • linux:命令行 &&与

    参考 Linux 命令行 与 简书 总结 command1 command2 只有前面命令执行成功 后面命令才继续执行 shell中 左边的命令 命令1 返回真 即返回0 成功被执行 后 右边的命令 命令2 才能够被执行 command1
  • QT环境变量配置

    QT官网地址 https my qt io 一 windows系统 1 1 QT下载安装 1 2 进入Qt安装目录 1 3 拷贝gcc所在的路径 不同安装目录有所差异 C Qt Qt5 5 0 Tools mingw492 32 bin 1
  • Shell脚本中引用另一个脚本文件

    在Shell中要调用别的shell脚本或别的脚本中的变量有一下两种方式 方法一 使用点号 subscript sh 方法二 使用source source subscript sh 注意 1 两个点之间 有空格 2 两个脚本不在同一目录 要
  • 关于ubuntu 64位 android studio 运行时,gradle卡住的问题

    主要是因为缺少相关的32位依赖库 可通过一下方法解决 终端输入以下命令 安装完成后 重启as即可 sudo dpkg add architecture i386 sudo apt get update sudo apt get instal
  • ubuntu下nginx1.0.15的安装

    1 首先到官网下载好nginx的原码 http nginx org en download html 2 安装nginx必备软件 gcc g pcre库 安装gcc sudo apt get install gcc 安装g sudo apt
  • Linux命令56问

    目录 2 查看CPU性能的指令 vmstat 3 查看内存使用情况的指令 free 4 查看硬盘使用情况的指令 df 5 查看网络IO情况的指令 ifstat 6 查看机器已建立的TCP连接的指令 Linux常用命令 8 cd命令的作用 9
  • linux:SecureCRT SSH连接报错 Key exchange failed. No compatible key exchange method

    问题 配置ssh后提示 Key exchange failed No compatible key exchange method The server supports these methods curve25519 sha256 cu
  • Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

    本文的开发环境为 Keil Cortex M3 内核处理器 重定向 fputc 函数方法 如果想使用库函数 printf 必须要将 fputc 重定向到自己的串口上 术语 重定向 可以理解为用户重写 fputc 函数 在重写的函数体内调用自
  • Linux笔记:文件共享服务Samba基础使用

    文章目录 目的 基础使用 软件包安装 独立服务器 客户端 总结 目的 linux中目前还比较常用的文件共享服务主要就是NFS和Samba 但其实NFS一般也就linux间用用 Samba通常是一个更加好的选择 可以方便的在linux和win
  • CentOS6/7 日常管理--启动服务及日志查看

    CentOS6 chkconfig chkconfig list显示开机启动服务列表 chkconfig level 3 服务名 on off chkconfig 服务名 on off chkconfig del 服务名 删除 关闭 服务
  • jdk安装与环境变量配置,看这篇就够了

    文章目录 场景 jdk 下载安装 如何环境变量的配置 总结 场景 在做 java 开发或者 android 开发 经常会碰到 jdk 安装与环境变量的配置 每次配置的时候 经常需要去查看一下 而且偶尔还会出现错误 这里就把这块详细的记录一下
  • JAVA环境变量的配置及常用工具说明

    首先 到官网www eclipse com下载并安装最新版本的JDK 其次 找到设置位置 我的电脑 右键 属性 高级系统设置 高级 默认 环境变量 系统变量 新建系统变量JAVA HOME和CLASSPATH 变量名 JAVA HOME 变
  • linux—通配符详解及总结

    本博客主要详解关于linux中常使用的通配符的知识点 主要分为三个步骤 通配符 和 的详细解释 举例截图说明 个人的总结理解 一 通配符 和 的详细解释 ps 因为通配符 中可添加很多变量 所以这里我会简单举出几个例子来说明 其他情况请类比
  • 很多软件安装时为什么需要设置环境变量

    设置环境变量的目的 背景 在cmd中想要执行net start mysql等操作命令 必须先cd到bin文件所在目录 如D mysql mysql x x xx winx64 bin 那么每次打开mysql 都要输入那么多指令切换目录是不是
  • 【Java数据结构】泛型详解+图文,通配符上界、下界

    0 泛型的本质 0 泛型的目的 1 泛型的语法 1 1 泛型的使用 2 包装类 2 1 装箱和拆箱 2 2 1练习题 3 泛型如何编译 4 泛型的上界 5 通配符 5 1通配符上界 5 2通配符下界 有坑填坑 0 泛型的本质 泛型的本质 泛
  • linux:ubuntu 查看ip

    解决方法 ifconfig a 或者sudo vi etc netplan 00 installer config yaml 进行查看
  • 嵌入式 Linux 入门(七、Linux 下的环境变量)

    嵌入式 Linux 入门第七课 学习理解 linux 的环境变量 矜辰所致 前言 学习完 Linux 的 Shell 命令 和 Shell 脚本 我们还需要理解一个东西 环境变量 理解了 Linux 的环境变量 前面的文章中有些细节的东西

随机推荐

  • 什么是 Web 3.0?

    很多人并不理解什么是 Web 3 0 本文尝试以最简洁的语言来解释一下我对于这个问题的理解 01 互联网范式迭代 Web 1 0 也就是第一代互联网 是静态互联网 主要的应用是网络媒体 各网媒雇佣一大批编辑 将图文并茂的内容发布成为网页 读
  • 无法启动程序 xxx.exe,系统找不到指定的文件

    1 问题现象 解绝方法 语法问题 scanf函数调用后边没写分号 导致没能编译生成可执行程序 2 问题现象 解绝方法 printf函数错写成print 导致语法错误 3 问题现象 解决方法 头文件写错了 找不到stdio h 注意 这几种问
  • JavaWeb 项目部署到 Aliyun 服务器

    JavaWeb 项目部署到 Aliyun 服务器 准备工作 环境 Java8 IDEA tomcat8 5 本次 web 项目在本地 tomcat 跑通 打包 项目没问题后进行打包 选择 Artifacts gt 点击 号 gt 右击选择
  • 【node】3、fs文件读写流

    fs createReadStream读取指定文件的可读流 const fs require fs const rs fs createReadStream 1 mp4 resume开启可读流 rs resume 通过rs readable
  • 《数据结构题集》求k阶斐波那契序列的第m项值的函数算法

    这个属于学习笔记一篇 刚看到这个题的时候 花了好半天时间 才搞明白题目到底是啥意思 原来我之前接触的斐波那契数列都是2阶的 有了思路之后就开始动手操作 经过我的验证 2阶的前14项的运算结果与百度百科上的一致 5阶前10项与我手动计算结果一
  • tp5下,保存公众号access_token

    在开发公众号的时候 免不了要用到公众号的接口 基于接口 它是需要access token做基础的 而access token它的有效期是有限定的 所以在获取到access token的时候要注意保存 1 在控制器中建一个方法 专门用来保存a
  • Mybatis中"if else"的写法

    在SSM框架中编写mapper xml的时候 需要对数据库进行操作 在对数据库操作的时候有时会遇到需要判断字段内容的情况 如果只需要判断字段满足某个条件 那么直接使用
  • 飞行棋游戏代码(C#)

    220224飞行器v1 0 using System namespace AeroplaneChess class Program 地图 static int Maps new int 100 玩家A B坐标 static int play
  • 良好的Java编程风格

    良好的Java编程风格 正确的注释和注释风格 使用文档注释来注释整个类或整个方法 如果注释方法中的某一个步骤 使用单行或多行注释 正确的缩进和空白 使用一次 tab 操作 实现缩进 运算符两边习惯性各加一个空格 比如 2 4 5 块的风格
  • Qt 关闭窗口时循环依旧运行的解决办法

    在Qt中 经常碰到关闭窗口之后 程序中的循环依旧运行 查资料知道跟线程和进程有关系 比较麻烦 以后再慢慢看线程和进程知识 今天想到一个比较偷懒的方法 具体方法如下 部分代码 1 在类中设立判断循环的标志 isLooopFlag 以及槽函数s
  • 学习笔记-正则表达式

    https www runoob com regexp regexp tutorial html 正则表达式re Regular Expression 是一种文本模式 包括普通字符 例如 a 到 z 之间的字母 和特殊字符 称为 元字符 可
  • CSerialPort教程4.3.x (1) - CSerialPort项目简介

    CSerialPort教程4 3 x 1 CSerialPort项目简介 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python Node
  • npm yarn pnpm命令

    命令对比 命令 npm yarn pnpm 安装 install add add 安装到dependencies save 默认 默认 安装到devDependencies D save dev D dev D save dev 安装到op
  • OpenCV-Python快速入门(十四):模板匹配

    OpenCV Python快速入门 十四 模板匹配 前言 前提条件 实验环境 模板匹配 cv2 matchTemplate 匹配单个结果 匹配多个结果 参考文献 前言 本文是个人快速入门OpenCV Python的电子笔记 由于水平有限 难
  • 【C语言】C语言 atoi 函数解析

    个人主页 简 料 所属专栏 C语言 个人社区 越努力越幸运社区 简 介 简料简料 简单有料 在校大学生一枚 专注C C GO的干货分享 立志成为您的好帮手 C C 学习路线 点击解锁 C语言 初阶数据结构与算法 C 高阶数据结构 Linux
  • 万劫不复之地-云原生可观测性的几大误区

    传统监控厂商正把可观测性引入万劫不复之地 可观测性是当前讨论非常多的话题 这个理念由来已久 却在最近开始流行 在20世纪60年代 该理念首次由Rudolf E Kalman在其论文中提出 论文题目是 on a general theory
  • Python中range()函数的用法

    先列几个range 函数的几个用法 函数原型 range start end scan 参数含义 start 计数从start开始 默认是从0开始 例如range 5 等价于range 0 5 end 技术到end结束 但不包括end 例如
  • 配置环境变量后,mysql依旧提示“'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件”

    在启动菜单搜索 cmd 搜索到后不要点击运行 右击选择以管理员的身份运行 之后输入mysql u 用户名 p 密码 就可以了 在此输入 cmd 找到 命令提示符 右击选择 以管理员的身份运行 之后正常操作就可以了 ps 此外如果之前操作没问
  • Docker安装使用记录

    Docker使用 Docker简介 Docker 架构 Docker安装 Docker CE 镜像源站 使用官方安装脚本自动安装 仅适用于公网环境 手动安装帮助 阿里云ECS可以通过内网安装 见注释部分内容 Ubuntu 14 04 16
  • Linux笔记:命令进阶使用相关功能

    文章目录 目的 通配符 转义符 流程控制 管道符 重定向 环境变量 总结 目的 使用linux时用户可以通过一个又一个的命令来完成各种操作 除了基础的各个命令外linux还提供了各种便利的功能来协调使用这些命令 这些功能让用户在使用linu