Linux基本指令1

系统内核:Centos  7.6  64位
操作系统(OS, operating  system)是什么?
世界上第一台计算机诞生的时候是没有操作系统的,但是这个计算机操作起来效率特别低,难度非常高。使用对象只有科学家。
操作系统的意义就在于降低操作难度,提高操作效率。
现在电脑的显示器属于硬件吗?
属于。当我们使用printf,cout函数的时候,会在显示器上打印出结果。本质就是向硬件写入数据。
printf和cout属于软件,显示器属于硬件。说明软件是可以操作硬件的。
现在的问题是:软件是如何操作硬件的?
驱动软件层:帮助上层实现对硬件的基本访问
每一个硬件在驱动软件层都有对应的驱动程序。
比如:电脑开机后,再将鼠标插入USB接口,不是一插入就立即可以使用鼠标了,往往会等上3~4秒,这是操作系统在根据硬件选择对应的驱动程序。
所以驱动程序的核心是可以给上层提供访问硬件的接口。
一般而言,每一种硬件都会有厂商提供对应的驱动软件。获取驱动的方式,一般来说是由OS帮助我们进行获取与安装。
OS kernel:狭义上将,这就是操作系统
kernel:内核
Os kernel存在四大构成:进程管理,内存管理,文件管理,驱动管理
操作系统(OS kernel)为什么要存在?
对下(软件驱动层,硬件)要管理好底层的软硬件资源,至少要保证所有的硬件都能正常使用;对上(用户层)要给用户提供一个良好的,稳定的,高效的运行环境。
OS: OS是一款软件,一款用来对软硬件资源进行管理的软件
管理目的:对上,对下,提高操作效率。
所以不管Linux操作系统如何特别,其核心都是围绕管理目的展开的。
Linux下的基本指令
第一个问题:为什么要进行指令操作?
对于非专业人员,没有必要;对于专业人员(指工程师),可以必要,可以不必要;对于学习OS原理,并在上面进行编程的人来说,指令操作是必须的。毕竟到后期,都是在纯Linux环境下进行编程。
为什么要学习指令?
最开始的操作系统都是支持指令操作的,因为最开始是仿照打字机输入数据的方式,设计出键盘,给计算机输入数据的。后来因为指令操作的操作成本高,才逐渐演化出图形化操作界面。所以指令距离OS更近,方便我们更好的的掌握OS,熟悉OS的原理。
确认指令的方式为enter键。
第一条指令:ls(l不是大写的i)
语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
首先登录云服务器,对了,最好不要在root账户下进行操作。
最开始,输入ls指令,什么都没发生,因为此时文件内容为空,使用touch指令,创建一个mytest.c文件,再ls就会显示出来。
需要创建目录时,使用mkdir指令,目录相当于Windows的文件夹。目录的颜色和其他文件不同。
指令pwd,会显示当前目录所在路径
创建什么的指令(如touch,mkdir)后需要加上空格。指令后如果有选项,也要加空格。
ls -l 指令可以显示更多文件的属性
现在有一个问题,在Windows下创建一个空白文件夹,这个空白文件夹占据空间吗?
答案是占据,空间文件夹也是有文件属性的,保存文件属性的数据,就会占据空间。文件=文件内容+文件属性。所有的文件操作,要么是对文件内容进行操作,要么是对文件属性进行操作。
ls -a 指令可以显示当前文件夹中所有的文件,包括隐藏文件。还可以ls -a -l ,同时执行ls -a和ls -l 指令。或者ls -al,同样效果。
Linux中以 . 开头的文件称为隐藏文件。
同样可以用touch指令创建隐藏文件。
这些隐藏文件中还存在两个看起来很奇怪的文件: . 和 ..  ,从颜色可以看出是两个目录文件。
. 和 .. 是任意目录下都会存在的两个隐藏文件,其中 . 是当前目录,.. 是上级目录。
现在,我们需要返回上级目录,如何返回?
使用cd指令,cd可以理解为change direct。cd .. 就可以返回上级路径。
/home/hzh称之为Linux路径。
Windows下的路径:C:\用户\ASUS\
Linux下路径分隔符是:/(斜杠),Windows下路径分隔符为:\(反斜杠)
同时发现,在回到 / 的时候就不能进行回退了。这里的 / 就不能称之为路径分割符,而是根目录。
想回到原来的路径,就使用指令:cd [要到达的路径]
还有关于 . 的用途。
现在假设存在一个a.out文件,./a.out 就代表执行当前文件下的a.out文件。
cd  ~ 指令代表进入家目录,家目录是云服务器账户登录时默认进入的一个目录。root账户的家目录是/root。
cd - 指令代表跳转到上一次我所处的路径。可以用于在经常访问的两个路径之间来回切换。
对于这些指令,不需要刻意去记。Linux的学习过程很长,用时忘记了就去查,时间一长就自然而然记住了。
Linux下入口目录是 : / 根目录
根目录中也可以再放其他文件,包括子目录和文件。子目录还可以再放目录。
Linux目录的本质结构是一个多叉树。所以Linux本质结构是一个树状结构。
每一个子节点可以是一个目录,也可以是一个普通文件。
这棵多叉树的叶子节点,一定是一个普通文件或者空目录。
任何节点都可以有多个子节点,但只有唯一一个父节点。所以常规的路径定位具有唯一性,这也是我们通过路径方式定位文件的原因。
/home/hzh:把从根目录开始的,具有唯一性的这种路径称为Linux下的绝对路径。
现在我们在code目录中,需要到mytest.c,方式有两种:
一种是通过绝对路径访问:cd  /home/hzh
另一种是通过相对路径访问 cd  ..
通过相对路径访问的方式强依赖于当前所处路径。
如果是日常使用,推荐使用相对路径——因为简单
后续需要添加一些配置文件时,使用绝对路径——因为不会出错
下面开始在Linux写第一个代码
vim的使用成本较高(虽然不知道为什么),用nano对一个普通文件进行编译。因为nano只是一个文本编辑器,所以不会有语法提示,但可以让我们快速开始Linux下代码的编写。
部分云服务器没有安装nano,这时切换到root账户,输入命令:yum  install  -y  nano 然后等待结束就可以了。
gcc没有安装也一样,root账户,输入命令:yum  install  -y  gcc-c++
进行编译的过程很简单:
touch mytest.c
nano mytest.c
完成编写后Ctrl + x,然后有的是w 回车,有的服务器是,y回车
gcc mytest.c
这时使用ls指令,会发现生成一个a.out文件
./a.out
结果如下:
现在要求我们一次创建一连串的目录,创建dir1,在dir1中创建dir2,在dir2中创建dir3。
mkdir dir1/dir2/dir3会出错
创建一连串的目录的指令:mkdir  -p  dir1/dir2/dir3
在之后的学习中,推荐创建一个code目录,在code目录下创建日期目录,记录每天练习的代码。
如果不想要一个文件如何删除?
如果要删除一个空目录:rmdir [目录名]
如果要删除一个普通文件:rm [文件名]
如果要删除一连串目录:rm -r [目录名]
如果要删除当前目录所有内容: rm -rf  *(等价于rm  -rf  ./*,*是通配符,可以匹配所有文件)
强制删除什么:rm -f [要删除的],如果是root账户,rm -rf /  系统就算坏了
rm(remove),-r(recursion,递归的意思),-f(force)。
这是一个网址,即URL,统一资源定位符(Uniform Resource Locator,URL),域名后面的部分是什么?
Linux有自己的路径分隔符: / ,和URL中的/是一样的,在访问网站时,这些网站是有自己的后端服务的,域名后面的就是这些后端服务对应的路径,其原理和Linux相同,或者说,后端服务器就是Linux操作系统。
在进行c++的学习时,遇到不熟悉的函数要到c++官网或者cplusplus.com上去查在线手册,如果现在需要查C语言的在线手册,且不想切出Linux,到网页上查找。就可以使用man指令,Linux操作系统本身是由C语言写的,所以man手册默认是带C语言的标准手册。这里只是介绍man的功能,实际当中,man更多是查找指令和系统调用。
man语法:man [选项] 命令
查找printf函数:
回车后跳出:
这是一个printf命令,不是要找的C语言printf函数。按q,退出
结果为:
看来华为云的服务器默认没有装C语言的在线手册,那就切换到root用户安装一下
在root用户下执行指令:yum install -y man-pages
完成后返回普通用户,输入:man 3 printf 得到:
就完成C语言printf的查找了,man后面不加选项即默认查找。同时,发现man 1 printf和man printf相同,所以默认开启选项是1,下面介绍一下选项的具体意义。
查一下man的含义。输入指令:man man
得到:
框住的部分即man查找的标准手册,选择中的数字即代表要到哪个手册中去找。
1代表要查找的命令手册
2代表要查找的系统调用手册
3代表要查找的C语言相关接口
最常用的就是这三个,后面的暂时不需要知道。
cp(copy)指令
语法:cp [选项]  源文件或目录  目标文件或目录
先做点准备工作:
完成对test.txt输入数据后,准备完毕。
进行拷贝
拷贝命令相当于Windows中的复制粘贴功能,如果要cp,拷贝的文件在当前路径下,两个文件的名称不能一样;如果拷贝的文件不在当前路径下,文件名称可以一样。也可以指定路径进行拷贝:
默认情况下,cp是不允许拷贝目录的,如果要拷贝目录需要加上选项:-r,还有会遇到要拷贝,系统问确认需要拷贝吗,如果不想被问就加上选项:-f
mv指令
语法:mv [选项]  源文件或目录  目标文件或目录
Windows中有剪切功能,mv就相当于Linux中的剪切。
可以剪切普通文件:
也可以剪切目录:
还可以对目录或者文件重命名:
mv中的选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
-i就是加上一个询问的环节,如果询问时选择n,就什么都不变。从图中可以看出覆盖就相当于把源文件重命名为目标文件,同时删除与目标文件相同的文件。
Linux中不要轻易删除文件,除非你特别确定。因为Linux中是没有回收站的,如果删了,就真的删了。当然,如果不想直接删除文件,也可以自己搭建一个回收站,具体如何实现,看后面的学习。
cat指令和tac指令:
语法:cat [选项] [文件]
选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
cat是从头开始,输出文件所有行,而tac是从尾开始,输出文件所有行。tac不能使用-n选项,其他选项和cat也存在不同。
cat比较适合查看短的文档或者代码。
more指令和less指令:
语法:more [参数] [文件]——这里的参数包含了选项,还有在使用时的操作
          less [参数] [文件]——同more一样。
more选项:
    -n 对输出的所有行编号——这个是选项
    q 退出more——这个是使用时的操作
less选项:
    -i  忽略搜索时的大小写
    -N  显示每行的行号
    /字符串:向下搜索“字符串”的功能
    ?字符串:向上搜索“字符串”的功能
    n:重复前一个搜索(与 / 或 ? 有关)
    N:反向重复前一个搜索(与 / 或 ? 有关)
    q:quit
more指令和less指令适用于长文本的查看,下面伪造一个10万行的文本:
cnt=1; while [ $cnt -le 100000 ]; do echo "hello Linux $cnt"; let cnt++; done
执行上面这段指令,空格也不能变。最好复制(用鼠标,键盘不行)。这是一个脚本,能生成十万行文本信息。完成需要时间。
然后再复制上面的指令,加上 > [要存入的文件]
用nano打开file.txt,就能看到存入的信息了
这些在页面下面的选项代表着要进行的操作选择,^代表Ctrl,如:Ctrl + y代表前一页,Ctrl+v代表后一页。Ctrl + x是退出。
用cat看file.txt只能看到最后的部分
指令:wc -l file.txt    可以查看file.txt有多少行
wc  -l可以看文件有多少行。
以上内容为准备工作。
more的使用:more file.txt
一开始只显示到41行,如果要下翻得按回车。如果要退出按q。还有其他的命令,比如在搜索时/10000就会搜索匹配的内容并跳转,more不支持向上查找,所以如果再输入/777会向下找到第一个匹配的内容并跳转。(q退出不了的就Ctrl+q, 再不行就esc,还不行就Ctrl +c,郑重说明:q退出不了的情况我没遇到过,所以没有亲身检验)
less的使用:less file.txt
开始和more一样。然后按一下回车,如果要上翻,按上箭头(笔记本右下部分),如果要下翻,按下箭头。less是支持上下查看的。同样支持/+数字进行搜索,按q退出。比较有趣的是:less数字不支持右边的数字键,要使用字母上面的数字键,而more支持右边的数字键。我的电脑是这样,也可能可以改。
两个工具更推荐less。
这两个命令的主要作用是帮助我们查看日志。给之后的内容做准备的。
下面看一组指令:
echo是按标准形式输出后面的内容(打印到显示器上),在加上 > 后,没有打印,而是将内容放到hello.txt中去了(hello.txt没有提前创建)。
 > 的含义是输出重定向,作用:本来应该写入到显示器的内容,把内容写入到文件中去(描述并不准确,只是便于理解)。
在将新的内容输入进去后,原来的信息被删除了,变成了新的信息。
所以输出重定向会清空原始文件的内容。进行重新写入。
我们发现,在使用 >> 的情况下,hello.txt的内容增多了。
>> 称为追加重定向,和输出重定向不同的地方在于:不会清空原始文件的内容,而是在原始文件的结尾新增式的写入。
我们发现,cat在后面不加文件的情况下,会默认从键盘(标准输入流)读取数据。
退出的方式:Ctrl+c,所有阻碍命令行操作的情况,都可以Ctrl+c,不能Ctrl+z。Ctrl+c是终止,Ctrl+z是暂停。
如果不小心Ctrl+z了,按下面步骤解决:
Ctrl+z后,cat前面的数字为Linux下的任务编号,fg 1就能重新启动任务,这时再Ctrl+c就行。
如何看有几个任务? 使用指令jobs。
< 代表输入重定向,作用是把本该从键盘文件中读取的数据,改成从指定文件中读取。
Linux下一切皆文件!键盘文件可以理解为可以直接从终端(键盘)获取数据的文件。
还有鼠标,显卡,显示器,网卡等设备都看做文件,这样的好处是可以以同样的方式看待这些设备(这些设备是外设,像内存,CPU这样的内设就不能当做文件来看待了)。
head指令与tail指令
语法: head [参数]... [文件]... 
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。 
语法: tail[必要参数][选择参数][文件] 
功能: 用于显示指定文件末尾后10行内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
head -20 file.txt可以查看前20行
tail -20 file.txt可以查看后20行
如果要查看[30000, 30020]行的内容呢?
方法一:临时文件法
输入指令:head -30020 file.txt > tmp.txt,把前30020行存入tmp.txt中,然后
输入指令:tail -20 tmp.txt,就能拿到[30001, 30020]的内容
方法二:管道
输入指令:head -30020 file.txt | tail -20
命令行中的 | 称为管道,现实中管道通常用来传输石油,天然气,水等资源,而在计算机世界,唯一的资源就是数据,管道的作用就是传输数据资源。
管道的两侧分别为写入数据口,输出数据口(非专业描述,只是便于理解),head -30020 file.txt运行的结果写入到管道里。
tail -20就是从管道里拿出数据,进行二次处理。可以再接管道,对数据进行处理。
管道可以组合多种命令,对数据进行流水线式的处理。
还有一些ls指令的其他选项:
语法: ls [选项][目录或文件]
常用选项:
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。
-F 在每个文件名后附上一个字符以说明该文件的类型。
    "*" 表示可执行的普通文件, "/" 表示目录; "@" 表示符号链接; "|" 表示FIFOs; "=" 表示套接字(sockets)。(目录类型识别)
指令汇总:
ls                                     显式当前目录下所以子目录和文件名
touch [文件名]                创建文件
mkdir [目录名]                创建目录
mkdir -p [一连串目录]    创建一连串目录
pwd                                显示当前目录
ls -l                                 显示当前目录下子目录和文件的详细信息
ls -a                                显示当前目录下所以文件,包括隐藏文件
cd [路径]                         到达路径所在位置
cd ..                                返回到上级目录
cd ~                               进入家目录
cd -                                跳转到上一次所处的路径
rmdir [目录名]                删除一个空目录
rm [文件名]                    删除一个普通文件
rm -r [目录名]                删除一连串目录
rm -f [要删除的]             强制删除
rm  -rf  *                        删除当前路径下所有内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值