《鸟哥的Linux私房菜》笔记 第七至十六章

鸟哥的Linux私房菜

课程链接

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

第九章 vim 程序编辑器

所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在;

很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);

可以将 vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息。 vim 里面加入了很多额外的功能,例如支持正则表达式的搜寻架构、多文件编辑、区块复制等等。

基本上 vi 共分为三种模式,分别是"一般指令模式"、"编辑模式"与"命令行命令模式"。 这三种模式的作用分别是:

一般指令模式 (command mode)【正常模式】

以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中, 你可以使用"上下左右"按键来移动光标,你可以使用**"删除字符"或"删除整列"来处理文件内容, 也可以使用"复制、贴上"**来处理你的文件数据。

编辑模式 (insert mode)【插入模式】

在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到你按下"i, I, o, O, a, A, r, R"等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现" INSERT 或 REPLACE "的字样,此时才可以进行编辑。而如果要回到一般指令模式时, 则必须要按下"Esc"这个按键即可退出编辑模式。

命令行命令模式 (command-line mode)【命令模式】

在一般模式当中,输入" : / ? "三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以提供你"搜寻数据"的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的!

第十章 认识与学习BASH

设置变量

python 复制代码
[[email protected] ~]$ echo ${myname}
       >==这里并没有任何数据~因为这个变量尚未被设置!是空的!
[[email protected] ~]$ myname=VBird
[[email protected] ~]$ echo ${myname}
VBird  >==出现了!因为这个变量已经被设置了!


范例一:让使用者由键盘输入一内容,将该内容变成名为 atest 的变量
[[email protected] ~]$ read atest
This is a test        >==此时光标会等待你输入!请输入左侧文字看看
[[email protected] ~]$ echo ${atest}
This is a test          >==你刚刚输入的数据已经变成一个变量内容!

什么是"子程序"呢?就是说,在我目前这个 shell 的情况下,去启用另一个新的 shell ,新的那个 shell 就是子程序啦!在一般的状态下,父程序的自订变量是无法在子程序内使用的。但是通过 export 将变量变成环境变量后,就能够在子程序下面应用了!

当我们以 bash 登陆 Linux 主机之后,系统会主动的由主文件夹的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的 HISTFILESIZE 这个变量设置值有关了!

\[email protected\] \~\]$ !number \[\[email protected\] \~\]$ !command \[\[email protected\] \~\]$ !! 选项与参数: number :执行第几笔指令的意思; command :由最近的指令向前搜寻"指令串开头为 command"的那个指令,并执行; !! :就是执行上一个指令(相当于按↑按键后,按 Enter) 有些朋友在练习 linux 的时候喜欢同时开好几个 bash 接口,这些 bash 的身份都是 root 。 这样会有 \~/.bash_history 的写入问题吗?想一想,因为这些 bash 在同时以 root 的身份登陆, 因此所有的 bash 都有自己的 1000 笔记录在内存中。因为等到登出时才会更新记录文件,所以啰, 最后登出的那个 bash 才会是最后写入的数据。唔!如此一来其他 bash 的指令操作就不会被记录下来了 (其实有被记录,只是被后来的最后一个 bash 所覆盖更新了) 。 由于多重登陆有这样的问题,所以很多朋友都习惯单一 bash 登陆,再用工作控制 (job control, 第四篇会介绍) 来切换不同工作! 这样才能够将所有曾经下达过的指令记录下来,也才方便未来系统管理员进行指令的 debug 啊! 标准输入  (stdin) :代码为 0 ,使用 \< 或 \<\< ; 标准输出  (stdout):代码为 1 ,使用 \> 或 \>\> ; 标准错误输出(stderr):代码为 2 ,使用 2\> 或 2\>\> ; 执行" find /home -name .bashrc \> list " 会有什么结果?呵呵,你会发现 list 里面存了刚刚那个"正确"的输出数据, 至于屏幕上还是会有错误的讯息出现呢 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/de0bf364b545af9efc68376f5e1b38ce.png) (1)若 /tmp/abc 不存在故回传 $?≠0,则 (2)因为 \|\| 遇到非为 0 的 $? 故开始 mkdir /tmp/abc,由于 mkdir /tmp/abc 会成功进行,所以回传 $?=0 (3)因为 \&\& 遇到 $?=0 故会执行 touch /tmp/abc/hehe,最终 hehe 就被创建了; (1)若 /tmp/abc 存在故回传 $?=0,则 (2)因为 \|\| 遇到 0 的 $? 不会进行,此时 $?=0 继续向后传,故 (3)因为 \&\& 遇到 $?=0 就开始创建 /tmp/abc/hehe 了!最终 /tmp/abc/hehe 被创建起来。 以 ls 测试 /tmp/vbirding 是否存在,若存在则显示 "exist" ,若不存在,则显示 "not exist"!答:这又牵涉到逻辑判断的问题,如果存在就显示某个数据,若不存在就显示其他数据,那我可以这样做: > ls /tmp/vbirding \&\& echo "exist" \|\| echo "not exist" ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d57c3bf5818b691a12b5ec143976e0a8.png) 在 last 的输出讯息中,只要有 root 就取出,然后仅取第一栏 \[\[email protected\] \~\]$ last \| grep 'root' \| cut -d ' ' -f1 在取出 root 之后,利用上个指令 cut 的处理,就能够仅取得第一栏啰 \[\[email protected\] \~\]$ ls -l /home \| tee \~/homefile \| more 这个范例则是将 ls 的数据存一份到 \~/homefile ,同时屏幕也有输出讯息! ## 第11章 正则表达式 那如果我不想要开头是英文字母,则可以是这样: \[\[email protected\] \~\]$ grep -n '^\[^a-zA-Z\]' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 21:# I am VBird 指令也可以是: grep -n '^\[^\[:alpha:\]\]' regular_express.txt 注意到了吧?那个 \^ 符号,在字符集合符号(括号\[\])之内与之外是不同的! 在 \[\] 内代表"反向选择",在 \[\] 之外则代表定位在行首的意义!要分清楚喔! 如果我想要找出"任意数字"的行列呢?因为仅有数字,所以就成为: \[\[email protected\] \~\]$ grep -n '\[0-9\]\[0-9\]\*' regular_express.txt ```python 带*的那个 [0-9]可以是空字符.所以,如果要两位数及以上就要 [0-9][0-9][0-9]* ``` 如果我想要找出 g 开头与 g 结尾的字串,当中的字符可有可无 如果写成g\*g就会造成只有一个g也符合要求。 要用到 . 这个符号,它代表必有一个任意字符 就是 g.\*g就可 "正则表达式的特殊字符"与一般在命令行输入指令的"万用字符"并不相同 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d0245e5e4d8cf7121c28e47d6cbcc77e.png) sed 的" -i "选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!通过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!很棒吧! ## 第十二章 shell script users=$(cut -d ':' -f1 /etc/passwd) # 撷取帐号名称 for username in ${users} # 开始循环进行! do id ${username} done ## 第十五章 例行性工作调度(crontab) ## 第十六章 程序管理 ### 工作管理 * 将"目前"的工作丢到背景中"暂停":\[ctrl\]-z 相当于在win里把程序窗口最小化了,会放在后台运行,vim最小化后会生成一个紧急保存文件.filename.swp 然后会有这样一条信息 \[1\]+ Stopped vim \~/.bashrc * 观察目前的背景工作状态: jobs 就,在命令行输入jobs就能看有多少程序是被最小化状态啦。 * 将背景工作拿到前景来处理:fg (foreground) 想选第3个任务就 fg %3 * 让工作在背景下的状态变成运行中: bg 啊,因为\[ctrl\]-z放到背景里的时候都是Stopped的状态。不过,如果是第一次运行某个程序的话可以用\&直接在背景运行。像 qq\&这样。 *** ** * ** *** ## 杂七杂八的 *** ** * ** *** 快捷键 alt 搜索框 alt tab 切换窗口 (鼠标右键能进一步选择 alt num 网页上面的选项卡选择切换 *** ** * ** *** 我们正常开发人工智能产品的一种比较常见的形式,即先在VS Code中用python脚本进行算法验证,最后再用QT编写对应的C++应用,最后生成二进制可执行程序,这个最终生成的二进制可执行程序就是我们的"产品",这个可执行程序代码是封装起来的、不可见的、可以直接运行的。 [一小时教你学会 ARM 架构](https://blog.csdn.net/gitchat/article/details/78410083) [linux下安装软件的常用方法](https://blog.csdn.net/sinat_22815613/article/details/53177802) *** ** * ** *** ![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/14e259d4804f661716126eff74b665d8.jpeg) [arm-linux装qt](https://blog.csdn.net/Namcodream521/article/details/83928913) [Qt5.9.7 arm版编译配置附带完整源码及编译链](https://blog.csdn.net/poolooloo/article/details/108359622?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242) [在ARM Linux上使用OpenGL](https://blog.csdn.net/xuxinshao/article/details/3898807?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-14.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-14.control) [Qt5.3.0的移植安装与测试(交叉编译,用于arm,支持tslib触摸屏)](https://blog.csdn.net/woshidahuaidan2011/article/details/43604059?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242) > c语言编译器,c++编译器,调试器,工程文件(很多c文件)编译器,自动生成编译列表的工程编译器,工程里的c文件列表 > [gcc、g++、gdb、make、cmake、makefile总结](https://blog.csdn.net/midi666/article/details/101172479) > C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串C6.容器 C7.迭代器支持 > > C8.算法 C9.数值操作 C10.本地 > > 标准库不是STL,STL是标准模板库,是标准库的一个子集。它是一个可复用的组件库,其中包含了很多实用的算法和数据结构。stl是一个泛型思维的集中体现。 > [C++标准库简介、与STL的关系](https://www.cnblogs.com/xiongjiaji/archive/2011/06/22/2476490.html) *** ** * ** *** > VS Code并不适用于Jetson Nano,当前,还没有针对Jetson Nano这样的ARM设备的VS > > Code正式版本。但是,由于它是开源的,所以任何人都可以编译一个版本。其中,Code-OSS就是这样一款嵌入式环境下的"VS > > Code"。Code-OSS基于VS > > Code,它并不仅仅是一个代码编辑器,它具有用于管理整个项目文件夹而不是单个脚本的内置资源管理器功能以及丰富的第三方插件。实际上Code-OSS几乎具备了VS > > Code的所有完整功能 > [VS Code 的 7 个开源替代品](https://linux.cn/article-12382-1.html) [ubuntu错误解决:dpkg: error processing package \*\*\* (--configure)](https://runwei.blog.csdn.net/article/details/110730603?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control) *** ** * ** *** **各种报错** python编程 [python报"IndentationError: unexpected indent"的错 是缩进有误](https://blog.csdn.net/wuxiaobingandbob/article/details/10379157) [Python保存时提示"SyntaxError: Non-ASCII character '\\xe8' in file"](https://blog.csdn.net/jeikerxiao/article/details/53579267)

相关推荐
ljt27249606611 小时前
Vue笔记(一)--模板
前端·vue.js·笔记
山岚的运维笔记1 小时前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
ccyl011 小时前
UOS server 版(摩尔X300显卡)服务器安装显卡驱动
运维·服务器
楚灵魈1 小时前
[SKILL]从零开始的Arch Linux安装工作流程
linux·人工智能
Elnaij1 小时前
Linux系统与系统编程(8)——环境变量、进程控制与进程替换
linux
海兰1 小时前
使用 OpenTelemetry 与 Elastic APM 追踪 MCP 服务器工具调用
运维·服务器·elasticsearch·wpf
青天飞叶1 小时前
2026年高性能推理标杆:DreamZero推理服务器深度解析(延迟低至1.2ms,吞吐量提升300%)
运维·服务器
Galsk1 小时前
Linux零拷贝
java·linux·服务器·面试
Honker_yhw1 小时前
大数据管理与应用系列丛书《数据挖掘》(吕欣等著)读书笔记-偏相关分析
笔记·学习