目录
[cat < 文件](#cat < 文件)
[cat 文件](#cat 文件)
[echo 字符串](#echo 字符串)
[echo 字符串 > 文件](#echo 字符串 > 文件)
[echo 字符串 >> 文件](#echo 字符串 >> 文件)
[printf 字符串 >> 文件](#printf 字符串 >> 文件)
1.rm指令改造为mv指令实现回收站
之前在OS3.【Linux】基本指令入门(2)文章讲过,由于rm指令比较危险,且文件较难恢复,没有Windows系统下的回收站策略,因此在一个工程中一般是建立一个delete文件夹,然后使用 mv 指令移走文件,定时对delete进行删除
实际上可以对rm指令改造为mv指令来实现回收站,讲完vim后会写,现在暂时不讲
2.指令存储的位置
在使用Linux的命令行界面的时候,有时候会输错指令,例如:

注意到"not found",推测输入指令时,系统会先去找指令,如果没有则显示"Command '???' not found",如果找到了,那么会正常执行指令
指令存储在root用户下的usr目录的bin目录下

ls -l后会列出一大堆文件,例如可以看到之前讲过的cat指令

结论:1.指令在系统的特定路径下存储 2.指令和可执行程序都是可以被执行的,那么++指令就是可执行程序++
3.简易安装自制的指令(深刻理解指令的本质)
前面的结论提到了:指令在系统的特定路径下存储,那么是不是可以自己将编译后的可执行文件放到usr/bin的目录下然后手动执行呢? 答案是可以的
使用nano+gcc去编译C语言文件
首先要知道Linux环境下怎么编译C语言文件
新建C语言文件+使用nano文本编辑器编辑C语言文件
cpp
touch test.c
nano test.c
目前先用nano文本编辑器,不用vim
输入以下代码
cpp
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}

Ctrl+S保存,Ctrl+X退出nano
编译指令(gcc是原来是C语言编译器,现已扩展到C++、Objective-C、Fortran、Ada等语言的编译)
cpp
gcc test.c
注:g++是gcc的一个分支,专门用于编译C++代码
产生a.out(绿色字体),是可执行文件,相当于Windows平台下的*.exe文件

将a.out改成自己想要的指令名称,然后用移动到usr/bin路径下

cpp
mv mycommand /usr/bin
之后可再次切换到/usr/bin路径下查看是否安装了mycommand指令

mycommand指令正常执行了 :

4.指令的别名
一些指令具有别名,例如ls -l的别名为ll,但去用which去查ll指令时却显示没有查询到
which用于查询指令的存储路径

alias
单独一个alias
在Ubuntu系统下,which后需要跟可执行文件,可以使用单独一个alias指令来查看所有的别名

(注: --color=auto是配色方案,不用管)
在Ubuntu系统下,ll是ls -alF的别名,而在CentOS系统下,ll是ls -l的别名,这个依系统而定
加选项的alias
加选项的alias:可以对指令临时使用别名,与服务器断链后会失效(要永久有效需要更改配置文件)
设置别名的格式
cpp
alias 指令的别名='指令'
即指令和指令的别名的效果是等价的
例如alias wai='whomai',即设置whoami的别名为wai


取消别名的格式
例如alias wai='',取消设置wai别名

5.程序角度理解Linux系统下一切皆文件的观点
例如:显示器(为输出设备,则可以写入数据,即写入显存,但不能读数据),键盘(只能读数据),普通文件(可写可读)
单独一个cat
单独一个cat,则默认从键盘(一切皆文件)读取数据,之后显示到显示器上

(输入什么显示什么)
可以使用输入重定向符"<"来修改cat读取数据地方,如下
cat < 文件

cat 文件
作用:查看目标文件内容(全称concatenate)
指令"cat 文件"就是将文件的内容写入显示器中

其余有关cat的细节部分参见下一篇文章
echo
echo 字符串
作用:将字符串在显示器上打印(可以认为将字符串写入显示器中)

(无论字符串加不加引号,无论是单引号还是双引号,打印结果都是一样的)
echo 字符串 > 文件
观察以下图片,能否得出单个输出重定向符">"特点

(注:若echo写的文件不存在,则会自动创建)
发现向test.txt写入456后会覆盖掉原来的文件内容
结论: 单个输出重定向符的特点:覆盖写入,即先清空文件再写入数据
上方结论可以类比在C语言75.【C语言】文件操作(2)文章中讲过的fopen文件函数:如果打开的文件已经存在,fopen函数会自动将文件清空
那如果想追加字符串可以使用两个重定向符号>>(中间不能有空格)
由上可以得出清空文件的简化指令:>out.txt

echo 字符串 >> 文件
作用:向文件中追加字符串,旧的内容不会被清空,但会在字符串的结尾多追加一个换行符号,这点可以类比75.【C语言】文件操作(2)文章的a选项


可以使用xxd指令来验证查看test.txt存储的换行符(0x0a)
安装xdd的指令:
cpp
sudo apt-get install xxd # Debian/Ubuntu 系统
sudo yum install xxd # CentOS 系统
sudo dnf install xxd # Fedora 系统
printf 字符串 >> 文件
和指令"echo 字符串 >> 文件"不同的是:不会在字符串的结尾多追加一个换行符号

也可以使用echo -n 字符串 >> 文件,可以达到同样的效果
新建文件的简单指令">文件名"
>是一个输出重定向符,用于将命令的输出内容写入到指定的文件,如果文件不存在,则会自动创建
创建新文件可以不用touch指令
