鸟哥的linux私房菜-基础篇-第四版

news2024/10/10 9:44:59

第六章 文件与目录

6.1 目录与路径

6.1.2 目录的相关操作

在这里插入图片描述

  • cd:变换目录
  • pwd:显示当前目录
  • mkdir:建立一个新的目录
  • rmdir:删除一个空的目录
cd

dmtsai 这个用户的家目录是/home/dmtsai/,而 root 家目录则是/root/,假设我以 root 身份在Linux 系统中,那么简单的说明一下这几个特殊的目录的意义是:
在这里插入图片描述

pwd

在这里插入图片描述
在这里插入图片描述

mkdir

在这里插入图片描述

rmdir

在这里插入图片描述

6.1.3 关于执行文件路径的变量: $PATH

echo $PATH 查看PATH配置

在这里插入图片描述

 不同身份使用者预设的 PATH 不同,默认能够随意执行的指令也不同(如 root 与 dmtsai);
 PATH 是可以修改的;
 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻 PATH 来的正确;
 指令应该要放置到正确的目录下,执行才会比较方便;
 本目录(.)最好不要放到 PATH 当中。

6.2 文件与目录管理

6.2.1 文件与目录的检视: ls

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2.2 复制、删除与移动: cp, rm, mv

cp (复制文件或目录)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rm (移除文件或目录)

在这里插入图片描述
在这里插入图片描述

mv (移动文件与目录,或更名)

在这里插入图片描述
在这里插入图片描述

6.2.3 取得路径的文件名与目录名称

basename
dirname

在这里插入图片描述

6.3 文件内容查阅

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行
  • od 以二进制的方式读取文件内容!

6.3.1 直接检视文件内容

cat

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

tac (反向列示)

在这里插入图片描述

nl (添加行号打印)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3.2 可翻页检视

more (一页一页翻动)

在这里插入图片描述
在 more 这个程序的运作过程中,你有几个按键可以按的:

  • 空格键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』这个关键词;
  • :f :立刻显示出文件名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

比较有用的是搜寻字符串的功能,举例来说,我们使用『 more /etc/man_db.conf 』来观察该文件, 若想要在该文件内搜寻 MANPATH 这个字符串时,可以这样做:
在这里插入图片描述

less (一页一页翻动)

在这里插入图片描述

  • 空格键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字符串 :向下搜寻『字符串』的功能;
  • ?字符串 :向上搜寻『字符串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • g :前进到这个资料的第一行去;
  • G :前进到这个数据的最后一行去 (注意大小写);
  • q :离开 less 这个程序;

6.3.3 资料撷取

head (取出前面几行)

在这里插入图片描述
另外那个 -n 选项后面的参数较有趣,如果接的是负数,例如上面范例的-n -100 时,代表列前的所有行数, 但不包括后面 100 行。举例来说 CentOS 7.1 的 /etc/man_db.conf 共有 131 行,则上述的指令『head -n -100 /etc/man_db.conf』 就会列出前面 31 行,后面 100 行不会打印出来了。这样说,比较容易懂了吧?

tail (取出后面几行)

在这里插入图片描述
范例一的内容就有趣啦!其实与 head -n -xx 有异曲同工之妙。当下达『tail -n +100 /etc/man_db.conf』代表该文件从 100 行以后都会被列出来,同样的,在 man_db.conf 共有 131 行,因此第 100~131 行就会被列出来啦! 前面的 99 行都不会被显示出来喔!
在这里插入图片描述
在这里插入图片描述

6.3.4 非纯文本档: od

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3.5 修改文件时间或建置新档: touch

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
看到了吗?在默认的情况下,ls 显示出来的是该文件的 mtime ,也就是这个文件的内容上次被更动的时间。 至于鸟哥的系统是在 5 月 4 号的时候安装的,因此,这个文件被产生导致状态被更动的时间就回溯到那个时间点了(ctime)! 而还记得刚刚我们使用的范例当中,有使用到 man_db.conf 这个文件啊,所以啊,他的 atime 就会变成刚刚使用的时间了!文件的时间是很重要的,因为,如果文件的时间误判的话,可能会造成某些程序无法顺利的运作。OK!那么万一我发现了一个文件来自未来,该如何让该文件的时间变成『现在』的时刻呢? 很简单啊!就用『touch』这个指令即可!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
touch 这个指令最常被使用的情况是:

  • 建立一个空的文件;
  • 将某个文件日期修订为目前 (mtime 与 atime)

6.4 文件与目录的默认权限与隐藏权限

在这里插入图片描述

6.4.1 文件预设权限:umask

在这里插入图片描述
在这里插入图片描述

6.4.2 文件隐藏属性

chattr (配置文件案隐藏属性)

在这里插入图片描述

lsattr (显示文件隐藏属性)

在这里插入图片描述

6.4.3 文件特殊权限: SUID, SGID, SBIT

6.4.4 观察文件类型:file

如果你想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary , 且其中有没有使用到动态函式库 (share library) 等等的信息,就可以利用 file 这个指令来检阅
加粗样式

6.5 指令与文件的搜寻

6.5.1 脚本文件名的搜寻

which (寻找『执行档』)

在这里插入图片描述
在这里插入图片描述

6.5.2 文件档名的搜寻

whereis (由一些特定的目录中寻找文件文件名)

在这里插入图片描述

locate / updatedb

在这里插入图片描述
在这里插入图片描述

find

在这里插入图片描述

+4 代表大于等于 5 天前的檔名:ex> find /var -mtime +4
-4 代表小于等于 4 天内的文件档名:ex> find /var -mtime -4
4 则是代表 4-5 那一天的文件档名:ex> find /var -mtime 4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第七章、Linux 磁盘与文件系统管理

7.2 文件系统的简单操作

7.2.1 磁盘与目录的容量

df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)

df

在这里插入图片描述
在这里插入图片描述

  • Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
  • 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
  • Used:顾名思义,就是使用掉的磁盘空间啦!
  • Available:也就是剩下的磁盘空间大小;
  • Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
  • Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)

在这里插入图片描述
在这里插入图片描述

du

在这里插入图片描述在这里插入图片描述

7.3 磁盘的分区、格式化、检验与挂载

7.3.1 观察磁盘分区状态

lsblk 列出系统上的所有磁盘列表

lsblk 可以看成『 list block device 』的缩写,就是列出所有储存装置的意思!
在这里插入图片描述
在这里插入图片描述

  • NAME:就是装置的文件名啰!会省略 /dev 等前导目录!
  • MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!
  • RM:是否为可卸除装置 (removable device),如光盘、USB 磁盘等等
  • SIZE:当然就是容量啰!
  • RO:是否为只读装置的意思
  • TYPE:是磁盘 (disk)、分区槽 (partition) 还是只读存储器 (rom) 等输出
  • MOUTPOINT:就是前一章谈到的挂载点!

在这里插入图片描述

第八章、文件与文件系统的压缩,打包与备份

8.2 Linux 系统常见的压缩指令

*.Z compress 程序压缩的文件;
*.zip zip 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.xz xz 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩

8.2.1 gzip, zcat/zmore/zless/zgrep

压缩services文件
gzip -v services

读取压缩文件
zcat services.gz

解压,并会删除原本的压缩文件
gzip -d services.gz

解压并保留压缩文件
-c 可以将原本要转成压缩文件的资料内容,将它变成文字类型从屏幕输出, 然后我们可以透过大于(>) 这个符号,将原本应该由屏幕输出的数据,转成输出到文件而不是屏幕,所以就能够建立出压缩挡了
gzip -c services > services.gz

从压缩文件中,找出http这个关键词在哪几行?
zgrep -n 'http' services.gz

在这里插入图片描述

当你使用 gzip 进行压缩时,在预设的状态下原本的文件会被压缩成为 .gz 的档名,源文件就不再存在了

在这里插入图片描述
在这里插入图片描述

8.2.2 bzip2, bzcat/bzmore/bzless/bzgrep

bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的。bzip2 真是很不错用的东西~这玩意的压缩比竟然比 gzip 还要好~至于bzip2 的用法几乎与 gzip 相同
在这里插入图片描述

8.2.3 xz, xzcat/xzmore/xzless/xzgrep

在这里插入图片描述
在这里插入图片描述

8.3 打包指令: tar

8.3.1 tar

在这里插入图片描述

  • 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
  • 查 询:tar -jtv -f filename.tar.bz2
  • 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

那个 filename.tar.bz2 是我们自己取的档名,tar 并不会主动的产生建立的档名喔!我们要自定义啦!所以扩展名就显的很重要了!如果不加 [-z|-j-j|-J] 的话,档名最好取为 *.tar 即可。如果是 -j -j 选项,代表有 bzip2 的支持,因此档名最好就取为 *.tar.bz2 ,因为 bzip2 会产生 .bz2 的扩展名之故! 至于如果是加上了 -z 的 gzip 的支持,那档名最好取为 *.tar.gz

使用 tar 加入 -z, -j -j 或 -J 的参数备份 /etc/ 目录
time tar -zpcv -f /root/etc.tar.gz /etc
time tar -jpcv -f /root/etc.tar.bz2 /etc
time tar -Jpcv -f /root/etc.tar.xz /etc

time 会显示程序运作的时间
由于加上 -v 这个选项,因此正在作用中的文件名就会显示在屏幕上。
如果你可以翻到第一页,会发现出现上面的错误讯息!底下会讲解。
至于 -p 的选项,重点在于『保留原本文件的权限与属性』之意。

在这里插入图片描述

查阅 tar 文件的数据内容 (可察看檔名),与备份文件名有否根目录的意义

在这里插入图片描述

将备份的数据解压缩,并考虑特定目录的解压缩动作 (-C 选项的应用)
tar -jxv -f /root/etc.tar.bz2 -C /tmp

在这里插入图片描述

仅解开单一文件的方法
tar -jxv -f /root/etc.tar.bz2 etc/shadow -C /tmp

在这里插入图片描述

打包某目录,但不含该目录下的某些文件之作法

假设我们想要打包 /etc/ /root 这几个重要的目录,但却不想要打包 /root/etc* 开头的文件,因为该文件都是刚刚我们才建立的备份档嘛! 而且假设这个新的打包文件要放置成为 /root/system.tar.bz2 ,当然这个文件自己不要打包自己 (因为这个文件放置在 /root 底下啊!),此时我们可以透过 --exclude 的帮忙! 那个 exclude 就是不包含的意思!所以你可以这样做:
在这里插入图片描述
上面的指令是一整列的~其实你可以打成:『tar -j-jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root』,如果想要两行输入时,最后面加上反斜杠 () 并立刻按下[enter] , 就能够到第二行继续输入了。这个指令下达的方式我们会在第三章再仔细说明。 透过这个 --exclude=“file” 的动作,我们可以将几个特殊的文件或目录移除在打包之列,让打包的动作变的更简便

仅备份比某个时刻还要新的文件

某些情况下你会想要备份新的文件而已,并不想要备份旧文件!此时 --newer-mtime 这个选项就粉重要啦! 其实有两个选项啦,一个是『 --newer 』另一个就是『 --newer-mtime 』,这两个选项有何不同呢? 我们在第六章的 touch 介绍中谈到过三种不同的时间参数, 当使用 --newer 时,表示后续的日期包含『 mtime 与 ctime 』,而 --newer-mtime 则仅是 mtime 而已! 这样知道了吧! _ 。那就让我们来尝试处理一下
在这里插入图片描述

基本名称: tarfile, tarball ?

另外值得一提的是,tar 打包出来的文件有没有进行压缩所得到文件称呼不同喔!如果仅是打包而已,就是『 tar -cv -f file.tar 』而已,这个文件我们称呼为 tarfile 。如果还有进行压缩的支持,例如『 tar -j-jcv -f file.tar.bz2 』时,我们就称呼为 tarball (tar 球?)!这只是一个基本的称谓而已,不过很多书籍与网络都会使用到这个 tarball 的名称!所以得要跟您介绍介绍。
此外,tar 除了可以将资料打包成为文件之外,还能够将文件打包到某些特别的装置去,举例来说,磁带机 (tape) 就是一个常见的例子。磁带机由于是一次性读取/写入的装置,因此我们不能够使用类似cp 等指令来复制的! 那如果想要将 /home, /root, /etc 备份到磁带机 (/dev/st0) 时,就可以使用:『tar -cv -f /dev/st0 /home /root /etc』,很简单容易吧! 磁带机用在备份 (尤其是企业应用) 是很常见的工作喔!

特殊应用:利用管线命令与数据流

在 tar 的使用中,有一种方式最特殊,那就是透过标准输入输出的数据流重导向(standard input/standard output), 以及管线命令 (pipe) 的方式,将待处理的文件一边打包一边解压缩到目标目录去。
在这里插入图片描述

第九章、vim 程序编辑器

9.1 vi 与 vim

在这里插入图片描述

9.2.1 简易执行范例

1. 使用『 vi filename 』进入一般指令模式

在这里插入图片描述

2. 按下 i 进入编辑模式,开始编辑文字
3. 按下 [ESC] 按钮回到一般指令模式
4. 进入指令列模式,文件储存并离开 vi 环境

存档 (write) 并离开 (quit) 的指令很简单,输入『:wq』即可存档离开!

9.2.2 按键说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二部份:一般指令模式切换到编辑模式的可用的按钮说明

在这里插入图片描述

第三部份:一般指令模式切换到指令列模式的可用按钮说明

在这里插入图片描述
在这里插入图片描述

9.3 vim 的额外功能

9.3.1 区块选择(Visual Block)

在这里插入图片描述

  1. 使用 vim hosts 来开启该文件,记得该文件请由上述的连结下载先!
  2. 将光标移动到第一列的 host 那个 h 上头,然后按下 [ctrl]-v ,左下角出现区块示意字样:
    在这里插入图片描述
  3. 将光标移动到最底部,此时光标移动过的区域会反白!如下图所示:
    在这里插入图片描述
  4. 此时你可以按下『 y 』来进行复制,当你按下 y 之后,反白的区块就会消失不见啰!
  5. 最后,将光标移动到第一列的最右边,并且再用编辑模式向右按两个空格键,回到一般指令模式后, 再按下『 p 』后,你会发现很有趣!如下图所示:
    在这里插入图片描述

9.3.2 多文件编辑

在这里插入图片描述

  1. 透过『 vim hosts /etc/hosts 』指令来使用一个 vim 开启两个文件;
  2. 在 vim 中先使用『 :files 』察看一下编辑的文件数据有啥?结果如下所示。 至于下图的最后一列显示的是『按下任意键』就会回到 vim 的一般指令模式中!3.
  3. 在第一列输入『 4yy 』复制四列;
  4. 在 vim 的环境下输入『 :n 』会来到第二个编辑的文件,亦即 /etc/hosts 内;
  5. 在 /etc/hosts 下按『 G 』到最后一列,再输入『 p 』贴上;
  6. 按下多次的『 u 』来还原原本的文件数据;
  7. 最终按下『 :q 』来离开 vim 的多文件编辑吧!

9.3.3 多窗口功能

在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口启动另一个文件,就加入档名,否则仅输入 :sp 时, 出现的则是同一个文件在两个窗口间!让我们来测试一下,你先使用『 vim /etc/man_db.conf 』打开这个文件,然后『 1G 』去到第一列,之后输入『 :sp 』 再次的打开这个文件一次,然后再输入『 G 』,结果会变成底下这样喔:
在这里插入图片描述
万一你再输入『 :sp /etc/hosts 』时,就会变成下图这样喔:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.3.4 vim 的挑字补全功能

在这里插入图片描述
假设你想要编写网页,正要使用到 CSS 的美化功能时,突然想到有个背景的东西要处理,但是突然忘记掉背景的 CSS 关键语法,那可以使用如下的模样来处置! 请注意,一定要使用 .html 或 .php 的扩展名,否则 vim 不会呼叫正确的语法检验功能喔!因此底下我们建立的档名为 html.html 啰!
在这里插入图片描述
由于网页通常会支持 CSS 的语法,而 CSS 的美化语法使用的是 style 这个关键词,这个关键词后面接的就是 CSS 的元素与元素值。 若想要取得可能的元素有哪些,例如背景 (background) 的语法中,想要了解有哪些跟它有关的内建元素,如上图, 直接输入 b 然后按下 [crtl]+x 再按下 [crtl]+o 就会出现如上的相关字词可以选择,此时你就能够使用上下按钮来挑选所需要的关键元素! 这样使用上当然方便很多啊!只是要注意,一定要使用正确的扩展名,否则会无法出现任何关键词词喔!

9.3.5 vim 环境设定与记录: ~/.vimrc, ~/.viminfo

在这里插入图片描述

9.3.6 vim 常用指令示意图

在这里插入图片描述

第十章、认识与学习 BASH

10.1 认识 BASH 这个 Shell

  • /bin/sh (已经被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 预设的 shell)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已经被 /bin/tcsh 所取代)

Linux 预设就是使用 bash ,所以最初你只要学会 bash

10.1.4 Bash shell 的功能

命令编修能力 (history):

记忆使用过的指令

命令与文件补全功能: ([tab] 按键的好处)
  • [Tab] 接在一串指令的第一个字的后面,则为命令补全;
  • [Tab] 接在一串指令的第二个字以后时,则为『文件补齐』!
  • 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能!
命令别名设定功能: (alias)

直接以 lm 这个自定义的命令来取代 ls -al 的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用 alias 即可!你可以在指令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来设定别名呦:

  • alias lm=‘ls -al’
工作控制、前景背景控制: (job control, foreground, background)

这部分我们在第十六章 Linux 过程控制中再提及

程序化脚本: (shell scripts)
通配符: (Wildcard)

10.1.5 查询指令是否为 Bash shell 的内建命令: type

在这里插入图片描述
在这里插入图片描述

10.1.6 指令的下达与快速编辑按钮

在这里插入图片描述
在这里插入图片描述

10.2 Shell 的变量功能

10.2.2 变量的取用与设定:echo, 变量设定规则, unset

变量的取用: echo

在这里插入图片描述
变量的取用就如同上面的范例,利用 echo 就能够读出,只是需要在变量名称前面加上 $ , 或者是以 ${变量} 的方式来取用都可以。
么我要如何『设定』或者是『修改』 某个变量的内容啊?很简单啦!用『等号(=)』连接变量与他的内容就好啦!举例来说: 我要将 myname 这个变量名称的内容设定为 VBird ,那么:
在这里插入图片描述

变量的设定规则
  1. 变量与变量内容以一个等号『=』来连结,如下所示:
    『myname=VBird』
  2. 等号两边不能直接接空格符,如下所示为错误:
    『myname = VBird』或『myname=VBird Tsai』
  3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
    『2myname=VBird』
  4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
    • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
      『var=“lang is $LANG”』则『echo $var』可得『lang is zh_TW.UTF-8』
    • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
      『var=‘lang is $LANG’』则『echo $var』可得『lang is $LANG』
  5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, , 空格符, '等)变成一般字符,如:『myname=VBird\ Tsai』
  6. 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号『`指令`』或 『$(指令)』。特别注意,那个\ ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设定:
    『version=$(uname -r)』再『echo $version』可得『3.10.0-229.el7.x86_64』
  7. 若该变量为扩增变量内容时,则可用 “$变量名称” 或 ${变量} 累加内容,如下所示:『PATH=“$PATH”:/home/bin』或『PATH=${PATH}:/home/bin』
  8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:『export PATH』
  9. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
  10. 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定:『unset myname』

在这里插入图片描述
在这里插入图片描述

10.2.3 环境变量的功能

用 env 观察环境变量与常见环境变量说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用 set 观察所有变量 (含环境变量与自定义变量)

bash 可不只有环境变量喔,还有一些与 bash 操作接口有关的变量,以及用户自己定义的变量存在的。 那么这些变量如何观察呢?这个时候就得要使用 set 这个指令了。 set 除了环境变量之外, 还会将其他在 bash 内的变量通通显示出来
在这里插入图片描述

基本上,在 Linux 预设的情况中,使用{大写的字母}来设定的变量一般为系统内定需要的变量

export: 自定义变量转成环境变量

环境变量与自定义变量的差异:该变量是否会被子程序所继续引用
子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量
在这里插入图片描述

10.2.4 影响显示结果的语系变量 (locale)

10.2.5 变量的有效范围

10.2.6 变量键盘读取、数组与宣告: read, array, declare

read

要读取来自键盘输入的变量,就是用 read 这个指令了。这个指令最常被用在 shell script 的撰写当中,想要跟使用者对谈?用这个指令就对了。关于 script 的写法,我们会在第十三章介绍
在这里插入图片描述

declare / typeset

declare 或 typeset 是一样的功能,就是在『宣告变量的类型』。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变量名称与内容通通叫出来,就好像使用 set 一样
在这里插入图片描述
在这里插入图片描述
由于在默认的情况底下, bash 对于变量有几个基本的定义:

  • 变量类型默认为『字符串』,所以若不指定变量类型,则 1+2 为一个『字符串』而不是『计算式』。 所以上述第一个执行的结果才会出现那个情况的;
  • bash 环境中的数值运算,预设最多仅能到达整数形态,所以 1/3 结果是 0;

在这里插入图片描述

数组 (array) 变量类型
var[index]=content

意思是说,我有一个数组名为 var ,而这个数组的内容为 var[1]=小明,var[2]=大明,var[3]=好明 … 等等,那个 index 就是一些数字啦,重点是用中刮号 ([ ]) 来设定的。 目前我们 bash 提供的是一维数组。老实说,如果您不必写一些复杂的程序, 那么这个数组的地方,可以先略过,等到有需要再来学习即可!因为要制作出数组, 通常与循环或者其他判断式交互使用才有比较高的存在意义!
在这里插入图片描述

10.2.7 与文件系统及程序的限制关系: ulimit

在这里插入图片描述
在这里插入图片描述

10.2.8 变量内容的删除、取代与替换 (Optional)

变量内容的删除与取代
# 与 ##

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
非常有趣!不是吗?因为在 PATH 这个变量的内容中,每个目录都是以冒号『:』隔开的, 所以要从头删除掉目录就是介于斜线 (/) 到冒号 (😃 之间的数据!但是 PATH 中不止一个冒号 (😃 啊! 所以 # 与 ## 就分别代表:

  • # : 符合取代文字的『最短的』那一个;
  • ##:符合取代文字的『最长的』那一个
% 与 %%

在这里插入图片描述

/ 与 //

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

变量的测试与内容替换
- 与 +

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

= 与 :=

在这里插入图片描述

?

在这里插入图片描述

10.3 命令别名与历史命令

10.3.1 命令别名设定: alias, unalias

10.3.2 历史命令:history

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么 history 这个历史命令只可以让我查询命令而已吗?呵呵!当然不止啊! 我们可以利用相关的功能来帮我们执行命令呢!举例来说啰:
在这里插入图片描述

同一账号同时多次登入的 history 写入问题

在这里插入图片描述

无法记录时间

10.4 Bash Shell 的操作环境:

10.4.1 路径与指令搜寻顺序

在这里插入图片描述

10.4.2 bash 的进站与欢迎讯息: /etc/issue, /etc/motd

10.4.3 bash 的环境配置文件

login 与 non-login shell
/etc/profile (login shell 才会读)
~/.bash_profile (login shell 才会读)
source :读入环境配置文件的指令
~/.bashrc (non-login shell 会读)

10.4.4 终端机的环境设定: stty, set

stty

在这里插入图片描述
在这里插入图片描述

set

在这里插入图片描述
在这里插入图片描述

bash 默认的组合键

在这里插入图片描述
在这里插入图片描述

10.4.5 通配符与特殊符号

通配符

在这里插入图片描述
在这里插入图片描述

特殊符号

在这里插入图片描述

10.5 数据流重导向

数据流重导向就是将某个指令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方

10.5.1 什么是数据流重导向

standard output 与 standard error output

standard output 与 standard error output 分别代表『标准输出 (STDOUT)』与『标准错误输出 (STDERR)』

< 或 << 或 > 或 >>

数据流重导向可以将 standard output (简称 stdout) 与 standard error output (简称 stderr) 分别传送到其他的文件或装置去,而分别传送所用的特殊字符则如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/dev/null 垃圾桶黑洞装置与特殊写法

/dev/null 可以吃掉任何导向这个装置的信息
在这里插入图片描述
在这里插入图片描述
2>&1 表示将 2> 转到 1> 去

standard input : < 与 <<

< 是将原本需要由键盘输入的数据,改由文件内容来取代
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<< 代表的是 结束的输入字符
举例来讲:『我要用 cat 直接将输入的讯息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束』,那我可以这样做:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.5.2 命令执行的判断依据: ; , &&, ||

cmd ; cmd (不考虑指令相关性的连续指令下达)

在这里插入图片描述

$? (指令回传值) 与 && 或 ||

在这里插入图片描述
上述的 cmd1 及 cmd2 都是指令。好了,回到我们刚刚假想的情况,就是想要: (1)先判断一个目录是否存在; (2)若存在才在该目录底下建立一个文件。由于我们尚未介绍如何判断式 (test) 的使用,在这里我们使用 ls 以及回传值来判断目录是否存在啦!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.6 管线命令 (pipe)

管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息,对于stdandard error 并没有直接处理的能力。
在这里插入图片描述

10.6.1 撷取命令: cut, grep

cut

这个指令可以将一段讯息的某一段给他『切』出来~ 处理的讯息是以『行』为单位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候!这是因为有时候我们会以某些字符当作分区的参数,然后来将数据加以切割,以取得我们所需要的数据。 鸟哥也很常使用这个功能呢!尤其是在分析 log 文件的时候!不过,cut 在处理多空格相连的数据时,可能会比较吃力一点,所以某些时刻可能会使用下一章的 awk 来取代的!

grep

刚刚的 cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息, 若当中有我们所需要的信息,就将该行拿出来~简单的语法是这样的:
在这里插入图片描述

10.6.2 排序命令: sort, wc, uniq

sort

sort 是很有趣的指令,他可以帮我们进行排序,而且可以依据不同的数据型态来排序喔! 例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此, 如果您需要排序时,建议使用 LANG=C 来让语系统一,数据排序比较好一些。
在这里插入图片描述
在这里插入图片描述

uniq

在这里插入图片描述
这个指令用来将『重复的行删除掉只显示一个』,举个例子来说, 你要知道这个月份登入你主机的用户有谁,而不在乎他的登入次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个指令是在将重复的东西减少,所以当然需要『配合排序过的文件』来处理

wc

在这里插入图片描述
在这里插入图片描述
举个例子来说,当你要知道目前你的账号文件中有多少个账号时,就使用这个方法:『 cat /etc/passwd | wc -l 』啦!因为 /etc/passwd 里头一行代表一个使用者呀! 所以知道行数就晓得有多少的账号在里头了!而如果要计算一个文件里头有多少个字符时,就使用 wc -m 这个选项

10.6.3 双向重导向: tee

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
tee 可以让 standard output 转存一份到文件内并将同样的数据继续送到屏幕去处理! 这样除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录之用

10.6.4 字符转换命令: tr, col, join, paste, expand

tr

tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换
在这里插入图片描述
在这里插入图片描述

col

在这里插入图片描述

join

两个文件当中,有 “相同数据” 的那一行,才将他加在一起
在这里插入图片描述
在这里插入图片描述

paste

将两行贴在一起,且中间以 [tab] 键隔开
在这里插入图片描述

expand

这玩意儿就是在将 [tab] 按键转成空格键
在这里插入图片描述
在这里插入图片描述
unexpand 将空白转成 [tab] 的指令

10.6.5 分区命令: split

可以将大文件分区成为小文件
在这里插入图片描述
在这里插入图片描述

10.6.6 参数代换: xargs

产生某个指令的参数。xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LEAP模型的低碳路径建模与温室气体核算方法!详细

LEAP 模型&#xff08;Long-range Energy Alternatives Planning System&#xff09;&#xff0c;即低排放分析系统&#xff0c;是一个基于情景分析的自底向上的能源—环境核算工具&#xff0c;由斯德哥尔摩环境研究所与美国波士顿大学共同开发。LEAP拥有灵活的结构&#xff0c…

算法笔记(十五)——BFS 解决拓扑排序

文章目录 拓扑排序课程表课程表 II火星词典 拓扑排序 有向无环图&#xff08;DAG图&#xff09; 有向无环图指的是一个无回路的有向图 AOV网&#xff1a;顶点活动图 在有向无环图中&#xff0c;用顶点表示一个活动&#xff0c;用边来表示活动的先后顺序的图结构 拓扑排序 找到一…

鸿蒙HarmonyOS中Image图片组件以及HarmonyOs图标库完全解析

Image 图片组件&#xff0c;支持本地图片和网络图片的渲染展示。 一 、加载网络图片 1 、需要在 src/main/module.json5 中申请网络权限 "requestPermissions": [ { "name": "ohos.permission.INTERNET" } ] 详情参考&#xff1a; https://d…

展览会:企业宣传和推广的重要平台之一

在当今这个信息爆炸、市场竞争日益激烈的时代&#xff0c;展会作为企业与市场直接对话的重要桥梁&#xff0c;其推广的重要性愈发凸显。展会不仅是产品展示、技术交流的平台&#xff0c;更是品牌塑造、市场拓展的关键一环。 一、提升品牌知名度与形象 展会是企业向外界展示自…

新一届诺贝尔奖揭晓,能否为医学AI领域带来一些启发?|个人观点·24-10-09

小罗碎碎念 还未从microRNA的知识海洋中抽身出来&#xff0c;又要面对受限玻尔兹曼机带来的冲击。 这两天随着诺贝尔奖的公布&#xff0c;学术界可谓是热闹非凡&#xff0c;我也正好趁着这个机会&#xff0c;拾起停更半个月的公众号。 作为医学人工智能研究大军中的一员&#…

各省财政涉农支出统计(2001-2022年)

财政涉农支出是指政府预算中用于支持农业、农村和农民发展的财政支出&#xff0c;旨在促进农村经济的发展&#xff0c;提高农民收入&#xff0c;改善农村生产生活条件&#xff0c;推进农业现代化。 2001年-2022年各省财政涉农支出统计&#xff08;数据整理&#xff09;.zip资源…

Linux平台Kafka高可用集群部署全攻略

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kafka简介 2、Kafka核心优势 二、环境准备 1…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

麒麟操作系统:解决sudo命令报错“Account or password is expired”问题

麒麟操作系统&#xff1a;解决sudo命令报错“Account or password is expired”问题 1、问题描述2、问题分析3、问题解决方法步骤1&#xff1a;检查账户和密码状态步骤2&#xff1a;处理账户过期问题步骤3&#xff1a;处理密码过期问题 &#x1f490;The Begin&#x1f490;点点…

电脑端视频通过PCIE到FPGA端图像缩放转UDP网络视频输出,基于XDMA+PHY芯片架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案本博已有的FPGA图像缩放方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存纯Verilog图像缩放模块详解…

Python - Modbus测试

python -Modbus测试 前言 本实例中&#xff0c;python版本是python 3.10, 使用的pymodbus安装包进行实现&#xff0c;如没有按照此包&#xff0c;需要先执行如下指令&#xff1a; pip install pymodbusModbus客户端的python实现 Modbus Client的客户端程序&#xff0c;通过…

【Java 问题】集合——List

List 1.说说有哪些常见集合&#xff1f;2.ArrayList和LinkedList有什么区别&#xff1f;3.ArrayList的扩容机制了解吗&#xff1f;4.ArrayList怎么序列化的知道吗&#xff1f; 为什么用transient修饰数组&#xff1f;5.快速失败(fail-fast)和安全失败(fail-safe)了解吗&#xf…

XILINX MIG驱动

简介 框架图 本章节主要针对MIG读写做详细介绍,首先创建BLOCK DESIGN,工程连接如下图所示: MIG IP介绍 DATAMOVER的配置这里不再做介绍,结合上篇文章讲到DATAMOVER对BRAM进行读写操作,这里通过AXI桥再加一个MIG模块,MIG模块的配置和说明如下: 1、Clock Period:…

记录一个Ajax发送JSON数据的坑,后端RequestBody接收参数小细节?JSON对象和JSON字符串的区别?

上半部分主要介绍我实际出现的问题&#xff0c;最终下面会有总结。 起因&#xff1a;我想发送post请求的data&#xff0c;但是在浏览器中竟然被搞成了地址栏编码 如图前端发送的ajax请求数据 如图发送的请求体&#xff1a; 很明显是keyvalue这种形式&#xff0c;根本就不是…

浏览器动态移动的小球源码分享

浏览器动态移动的小球源码分享 <script>(function(a){var width100,height100,borderRadius100,circlefunction(){};circle.prototype{color:function(){let colour "#"Math.floor(Math.random()*255).toString(16)Math.floor(Math.random()*255).toString…

基于SpringBoot剧本杀管理系统 【附源码】

基于SpringBoot剧本杀管理系统 效果如下&#xff1a; 系统首页界面 系统注册页面 剧本信息详细页面 后台登录界面 管理员主界面 剧本信息界面 剧本预约界面 作者主界面 研究背景 随着现代社会生活节奏的加快&#xff0c;人们越来越渴望通过各种娱乐活动来释放压力和增进社交…

开源 Three.js 案例及入门教程

Three.js入门教程目录 章节1认识three.js与开发环境搭建,rar 章节2 Three.js开发入门与调试设置,rar 章节3 Geometry进阶详解.rar 章节4 详解材质与纹理.rar 章节5 纹理材质高级操作,rar 章节6 详解灯光与阴影.rar 章节7 精通粒子特效.rar 章节8 详解光线投射与物体交互…

内容营销:基于大模型的内容再利用

在这篇文章中&#xff0c;我将带你了解一个完整的自动化系统&#xff0c;该系统可帮助你将任何内容重新用于你想要的其他帖子。 输入的内容可以是任何东西&#xff1a;YouTube 视频链接、博客文章链接、大纲、推文、pdf 等…… 我将在本文末尾为你提供所有代码。 一步一步地…

基于SpringBoot+Vue+Uniapp的仓库点单小程序的详细设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行效果图 代码运行效果图 代码运行效果图 代码运行效果图代码运行效果图 代码运行效果图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发…

毕业设计 | Ruff开发板 + 华为云IoT物联网平台,实现家中温度、湿度、二氧化碳、PM2.5、甲醛监控分析...

基于温湿度、空气质量传感器实现温度、湿度、二氧化碳、PM2.5、甲醛环境数据实时监测。 硬件清单 我们采用 Ruff 开发板&#xff0c;串口连接温湿度传感器 DHT11 和空气质量传感器 SDS011&#xff0c;每5分钟采集一次数据&#xff0c;通过MQTT协议发送到华为云 IoT 物联网平台&…