今天我们继续学习Linux的基本指令,
这里是上一篇博客的链接:http://t.csdn.cn/9AgHP
接下来我会继续讲解Linux指令相关内容。
目录
Linux的命令千千万,我们不可能全部都记住。
man手册可以用来查询一些我们忘记或者不了解的指令/接口。
man + (数字) + 指令名称
比如说我们可以用man手册学习一下ls命令:

我们可以看到有很多选项:

注:(如果man手册不起作用,可以输入:yum install -y man-pages )
既然man手册可以查看系统的指令,我们当然也可以用man手册学习如何使用man手册:

我们可以看见,man手册有很多选项:

这里我们只需要了解最常用的前3个:
1. 第一个,也就是直接使用man可以查询Linux自带指令
2. 第二个,使用 man 2 选项可以查询系统调用接口
例:

fork就是一个系统调用接口,可以创建一个子进程:

3. 第三个,使用 man 3 选项可以查看C语言的接口
例:

相信大家对printf并不陌生:

这就是我们需要学习的三个选项。
这是一个拷贝指令,可以拷贝文件、目录。
cp + 选项 + 源文件或目录 目标文件或目录
常用选项:-r (递归拷贝)

拷贝文件到当前的目录下。

拷贝目录到当前文件下。

可以把文件拷贝到上级目录,
所以,我们可以通过相对路径,将文件拷贝到我们想要的地方:

我们拷贝了一个文件进test目录里面。
当然,我们也可以验证一下,这个拷贝是否真的把整个文件拷贝了:

我们可以观察到,test.txt文件里面的内容,
copy.txt里面也有,可以得出结论,cp确实拷贝了这个文件。
注:(补充一点:同一个目录下不能存在同名文件)
注:(echo 是输出指令,可以向屏幕输出)(举个例子)
例:(我们往屏幕输出了 hello Linux )

注:( > 是输出重定向,我们将echo输出的内容重定向到了test.txt文件里面 )
注:(cat 指令可以查看文件内容)
可以用来移动文件或者给文件改名。
mv + 文件原名 + 新的名字
mv + 文件名 + 目录
修改名字:

把test.txt 改名成name了。
移动文件:

我们把test目录移动到了上级目录。
移动并改名:

我们可以发现,移动到上级目录的test被改名成了name。
以上是mv命令。
比如说,Linux的命令行输出命令用不了了:

你好像输什么他都不停止,这个时候,可以:
Ctrl + c

如果遇到解决不了的问题或者死循环之类的,可以用这个指令杀掉当前的进程。
注:(可以解决大部分问题(但不是万能的!))
1. 我们发现指令是可以运行的,
指令和可执行程序都可以运行->指令就是可执行程序!
那我们的指令放在哪里呢?

我们可以看到,随便输入的字符,当前的shell跟我们说 not found 找不到指令,
那系统是在哪找我们的指令的?
2. 指令在执行前,做了什么?
先在系统中查找对应的指令(指令一定是在系统的某一个位置存在的!)
问题来了:指令究竟在哪里?

实际上,指令就在这个目录里面:

我们发现这些指令都是存在的!

因此我们可以得出这样一个结论,
指令是在系统特定的路径下存在的!
而这些指令一定是某种可执行程序(而且一定是用C/C++/shell...这些语言写出来的!)
那么,现在我们就要做一个实验了:

我们用nano(记事本)写一段C语言程序

然后执行:

注:(这里是用gcc编译这段代码)
然后改名:
既然我们这个是可执行程序,如果我们把它放到指令的位置,
只不是也能像指令一样执行呢???
确实是这样的!!!
(但是把程序放进指令的地方需要比较高的权限,我们这里切换到root用户)

注:(我用su 命令切换到root用户(输入su,然后输入root的密码))
我们将mytest 拷贝进指令的位置:

发现没有,mytest真的可以像指令一样使用了。
结论:
指令的本质就是可执行程序,
和我们自己写的代码编译好的可执行程序没有本质区别!(唯一的区别可能是别写的比你好...)
注:(我们把这个可执行程序拷贝到系统,这其实就是一种安装)
当然,最后别乱污染系统的指令:

我们就直接把它删除了。 (这其实就是卸载)
所以:系统的指令其实就是别人写好的可执行程序放到系统里面,仅此而已。
最后总结:指令的本质就是一个文件(一个可执行的文件)安装到了系统的某种路径下。
(可以在我们要使用的时候自动查找,仅此而已。)
那话又说回来,ls -l 为什么可以写成 ll 呢?
例:

我们可以看看 ll 指令是啥:

注:(which 指令可以看一条指令是啥,第二行是该指令的位置)
例:(我们也可以看看其他指令,比如:rm)

这里就不再去看其他指令了,感兴趣的话可以自己去试试。
我们观察 ll 指令可以发现,他有个:alias ll = 'ls -l -- color=auto'
这个意思其实就是 ll 是 ls -l 的别名,而后面那个 -- color=auto 是配色方案。
注:(有时候为了方便使用,就可以给指令设置别名)
例:(比如说我们想起个别名)

我给mycmd 起了个别名,就能直接使用了。(就是 ls -al )
注:(这个重命名方法只存在于这一次(你关掉xshell重进就会没了))
那为什么 ll 一直都在呢?因为他被写在了配置文件里面。
注:(不建议自己重命名,学好系统的指令再说)
我在这里抛出一个概念:(或者说是理解Linux的一种思想)
Linux下一切皆文件 - 比如:显示器、键盘、普通文件...
比如说:(我用这三个例子进行说明)
1. 我们向显示器写入,不就是对显示器写入吗:write()(对显示器文件进行写入操作)
实际上,我们是不能读取显示器文件的信息的,但是我们也认为在显示器文件
里面是存在:read() 这样的一个函数/方法,但是这是个空方法,无法使用而已。
2. 系统从键盘读取数据,那么可以想见,键盘具有:read() 这样的一个函数,
系统不可能往键盘里写入什么数据,总不可能系统给键盘写入一个a,你键盘的a建就跳起来吧,
所以我们可以推断出键盘文件中:write() 写入函数是一个空函数,无法使用。
3. 而普通文件,我们可以对文件进行读取 read() 和 写入 write()。
根据这三个例子,我们可以发现他们都可以具有读写方法,所以我们当然可以把他们当文件!
注:(当然,文件操作的方法肯定不止读写,这里我使用读写方法作为例子举例。)
注:(系统里面还有很多很多东西,还有硬件设备,在Linux下,他们都是文件吗?是!!!)
总结:Linux下一切皆文件!(初步理解)
所以:(我们使用 echo 指令往显示器上打印这串字符)

现在我们把这句话说成:echo 指令将这串字符写入到显示器文件中。

而我们使用 > 重定向,显示器上就没有显示出这段话了,
将原本应该写入到显示器文件的内容写入到out.txt文件里面,
这种操作就叫做重定向。
而 cat out.txt 就相当于把out.txt文件的数据写入到显示器文件里面。
输出重定向有一个特点:
例2:

实际上进行输出重定向的时候会覆盖原内容,具体操作如下:
1. 清空文件
2. 写入新内容
例2:

我们发现如果重定向往文件写入空,文件就清空了(对应上面的操作)

我们发现用 >> 追加重定向,就不会清空文件,并在文件尾写入。
注:(在C语言文件操作中,使用 -a 选项其实就是追加(append))
注:(echo 指令自带换行)(printf 指令不自带换行(有兴趣可以试试))
如果我们使用cat指令,后面什么都不加会怎么样?

我们输入什么,他就自动输出什么,
结合我们刚刚学的,cat 指令默认就是从输入设备(键盘)读取,写入到显示器文件中。

本来 cat 应该从键盘文件读取数据,现在变成从指定文件读取了,
这就是输入重定向。
那么补充知识暂时到这里了,我们继续学习指令。
cat 命令可以查看文件内容。
cat + 文件名
用cat 查看test.c文件内容。

如果一个文件内容很多会咋样?

我们用shell 脚步写一万行hello Linux进test.txt文件
注:( cnt=1; while [ $cnt -le 10000 ]; do echo "hello Linux $cnt"; let cnt++; done > test.txt )

我们发现用cat 查看该文件内容,直接被刷屏了,
如果我们想要看开头咋办,那就会很麻烦。
可以查看文件内容。
more + 文件名
选项 -n (可以选择看哪行)

用more查看test.txt文件:

会从头开始查看。
注:(按 enter 下翻)(按 q 键退出)
实际上,我们没办法上翻(more只支持下翻...)
我们可以用 / 查找文件内容:
我们可以在用more的时候就选择看哪行:

这样就直接跳转到这里了:
实际上我们用more用的不多(因为其实不太好用)
可以查看文件内容的命令。
less + 文件名

用less指令查看test.txt文件:
less 命令也支持用 / 查找内容:

这样就能找到999出现的地方:
注:(less 支持上下翻(直接用键盘的上下键即可))
head可以查看文件头部内容,tail可以查看文件尾部内容。
head -n 文件名
tail -n 文件名
选项:n代表你选择的行数(也可以不加)
用head查看文件头:

用head从上往下查看文件指定位置:

注:(查看头1000行内容)
用less查看文件尾:

用tail从下往上查看文件大小:


注:(查看尾5行的内容)
如果有这样一种场景,
我们想要查看这个文本的1000~1020行,我们可以怎么做?
我们当然可以用less直接去查找,
但是,我们也可以这样:

那么问题来了,这个 | 是什么?
这个 | 就是管道文件。
管道文件是一个内存级的文件,(我们该怎么理解这个‘内存级’?)
比如说:
我们要修改一个文件,系统是直接在磁盘了修改,还是先加载到内存呢?
答案显而易见,系统需要先把文件加载到内存,
换句话说,所有的文件都需要被加载到内存再进行操作,
所以这些文件在一定的生命周期里他们都是内存文件,
一个程序把自己的执行结果写到管道文件里,另一个文件再把数据从管道里读出来,
这就是管道。
所以上面的那张图片的工作原理就是这样的。
注:(管道通常可以支持流水线工作(将数据一步步加工直到我们满意))
我们今天学习了Linux一些新的指令,
还加深了对Linux系统的理解,接触了Linux下一切皆文件的思想,
认识到指令其实就是Linux系统下的软件,一个可执行程序,而且我们能在系统找到他们,
了解了重定向以及管道相关的知识。
想要和我一起继续学习和探索Linux的奥秘,可以订阅这个专栏哟~Linux从入门到精通。
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe