前言
- Linux系统编程的学习我们将要开始了,学习它我们不得不谈谈它的版本发布是怎样的,谈它的版本发布就不得不说说unix。
- 下面是unix发展史是我在百度百科了解的
Unix发展史
- UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前,只有面向批处理作业的操作系统,这样的系统对于需要立即得到响应的用户来说是太慢了。在60年代末,Kenneth Thompson和Dennis Ritchie都曾参加过交互方式分时系统Multics的设计,而开发该系统所使用的工具是CTSS。这两个系统在操作系统的发展过程中都产生过重大影响。在此基础上,在对当时现有的技术进行精选提炼和发展的过程中,K.Thompson于1969年在小型计算机上开发UNIX系统,后于1970年投入运行。
- 1972年,DennisRitchie开发出C语言,用来改写原来用汇编语言编写的UNIX,由此产生了UNIX VersionV。1974年,Kenneth Thompson和Dennis Ritchie合写的“The UNIX Time-Sharing System”在Communication of ACM上发表,正式向外界披露了UNIX系统。
- 当时,PDP-11系列小型计算机在世界各地已经得到广泛应用,UNIX系统一开发后便广泛配备于美国各大学的PDP-11系列计算机上,由此为UNIX的广泛应用创造了物质条件。
- 1978年,UNIX Version VI发表,随后又于1979年用于VAX-11超级小型机。以后,不断地出现各种新的版本。美国电话电报公司分别于1981年和1983年发表AT&T UNIX SystemII和UNIX SystemV。美国加州大学伯克莱分校也先后发表了UNIX的版本BSD4.1,BSD4.2和BSD4.3。
- UNIX系统的用户日益增多,应用范围也日益扩大。无论在各种类型的微型机、小型机,还是在中、大型计算机,以及在计算机工作站甚至个人计算机上,很多都已配有UNIX系统。不仅新推出的机型配有UNIX系统,而且一些历史较久的生产厂商,也竞相将原有机型配上UNIX系统以便打开销路、争取市场。
- 2020年,苹果发布操作系统升级版本,将UNIX操作系统的强大功能和苹果电脑的易用性相结合,提高了电脑的运行速度和电池寿命。
Linux发展史
- 1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。 Linus仅仅在第一个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码。
- Torvalds于10月5日发布的这个Linux版本被称为0.02版,它能够运行GNU Bourne Again Shell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语言。 Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux。
- Linux发布时的版本是0.02,后来又有0.03版,然后又跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正是公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的
开源
- Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲, Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。
- GNU通用公共许可协议(GNU General Public License,简称GNU GPL或GPL),是一个广泛被使用的自由软件许可协议条款,最初由理查德斯托曼为GNU计划而撰写, GPL给予了计算机程序自由软件的定义, 任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式,且必须公开源代码。
- Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。随着Linux操作系统飞速发展,各种集成在Linux上的开源软件和实用工具也得到了应用和普及,因此, Linux也成为了开源软件的代名词。
正是因为Linux是开源的,所以Linux具有很多优秀的特性。
在往后谈就要讲到Unix版本与Linux版本发布是如何一步一步到今天的了,这里就由小伙伴自己去百度搜索吧,博主就不多赘述了,下面开始我们的正题,这篇文章最主要的还是要讲解我们的指令部分。
使用XShell远程登录Linux
关于Linux桌面
很多同学的 Linux 启动进入图形化的桌面. 这个东西大家以后就可以忘记了. 以后的工作中 没有机会 使用图形界面.
思考:为什么不使用图形界面?
- Linux系统之所以被认为是相对安全的,是因为它具有很多安全特性和机制,如强大的权限管理、可定制的安全策略、加密文件系统等。这些安全特性和机制是Linux系统内在的设计和实现,与其图形界面的设计无关。
- Linux系统在设计上注重的是灵活性、稳定性和可靠性,而不是界面的友好度。因此,它通常采用了一些轻量级的桌面环境,如GNOME、KDE、XFCE等,这些桌面环境相对Windows的图形界面来说可能看起来较为简单,但是它们可以很好地适应不同的需求和使用场景。
- 另外,Linux系统的开发和使用者通常更加倾向于使用命令行界面。命令行界面提供了更加灵活的操作方式,可以更好地控制和管理系统,也更适合一些需要自动化操作和批处理的应用场景。同时,命令行界面也可以更方便地远程管理Linux系统,这在一些需要远程管理的场景下非常重要。
- Linux系统之所以没有像Windows一样的图形界面,是因为它的设计目标和使用场景不同。Linux系统更注重灵活性和可定制性,同时也更加注重安全和稳定性,而不是图形界面的友好度。
下载安装XShell
我们要登陆Linux的机器就必须需要一个远程终端程序
这个我们就可以使用XShell进行登陆
安装链接献上:XShell安装
注意安装时选择“home/shool”为免费版本
安装好后打开Xshell,如下图即为安装成功了(这里可能有些兄弟可能会安装的XShell7的一些版本,可能会出现打不开的情况,情况第二张图)
解决办法,所以你可以看到我下载的是XShell5的老版本,这可能是我们电脑的问题,我目前也不理解是什么原因,有想要老版本的可以私聊博主获取哦。
使用XShell登陆主机
安装好了并打开成功,那么我们就可以进行登陆了,当然,登陆之前我们需要准备一个远程的云服务器,我们可以去阿里云、华为云等等官网去购买服务器,然后通过XShell去登陆。价钱不贵,一些时候还有活动折扣哦~~
进入正题,我们如何登陆呢?
在XShell终端这样敲:
ssh 你的用户名@你的云服务器的公网ip
当我们点击回车
那么恭喜你,输入是没问题的。
只需要输入你在服务器内所设置的密码即可登陆,(密码不要设置太简单哦~~)
输入后回车,当出现这个界面时,那么恭喜您,你成功登陆你的Linux服务器。
这里来个小注意:我们大部分都是大学生,那么都可能会去使用我们的校园网,那么恶心的来了
有些校园网是不能登陆(或许需要某些权限把)XShell的Linux云服务器的,所以需要我们手机开启热点进行连接登陆。
XShell的复制粘贴
复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的.
当然也可以鼠标右键进行复制粘贴
下面进行本章的重点啦!!!
LInux下基本指令
先来学习几个简单指令的用法,方便我们应对接下来的学习
我们如果想要知道当前路径,我们需要用到pwd指令
所以我们当前所在的目录文件为root内
当我们想要知道目录文件root的内部有什么文件时就可以用ls
在入门阶段我们只需要知道ls --- 可以罗列出所有当前目录下的文件名,你的当前目录下可以什么文件都没有。
看第一张图,当前目录下只有一个普通文件
当我们想在当前目录下创建一个“文件夹”时就需要使用mkdir指令
这里就创建好了
第三张图我是新创建了一个文件111,通过ls显示在终端上,这是ls的简单用法。
这里我们用mkdir所创建的是目录文件
如果我们想进入某个文件内部呢?
这里我们就可以使用cd指令了
我们也可以用touch指令创建普通文件
我们在111文件夹下创建了一个叫test.c的普通文件。
当我们看到屏幕被指令充满时,我们可以用到clear指令进行清屏操作。
只需输入一个clear指令就可变成上图所示状态。
这样就可方便我们继续进行后续指令输入。
补充周边知识(文件)
以上我们所说的都是对文件的操作,我们如何操作的文件呢?
在我们当前Windows系统下创建一个文件
很明显创建的每个文件都会有它对应的属性 --- 文件名、修改日期、类型、大小等都是文件的属性
而我们打开这个文件当然也有文件的内容
所以我们总结出,文件 = 属性 + 内容
这些属性是数据吗? 是 !要保存吗? 要!
那么我们对文件的任何操作无外乎 1.对属性的操作 2.对内容的操作
那么就有了,用指令控制文件,编程访问文件
补充周边知识(绝对路径与相对路径)
拿出我们之前在Windows下创建的文件所在位置
我们将看到D:\code\2023这个就是这个文件所在的绝对路径
这个是Linux中的绝对路径。
我们可以看到无论是Windows还是Linux的路径都存在分隔符号,Windows的是‘\’,Linux的是‘/’
它们都是路径分隔符。
两个路径分隔符之间一定是一个“文件夹”。
一个路径的最末端一定是普通文件或者文件夹。
这里的文件夹又叫做目录文件。
Linux整个目录文件结构是一颗多叉树
而其中的最初的 / 就表示的是根目录文件
路径必须具有唯一性,访问任何文件必须先找到这个文件。
所以/usr/bin假如后面还有个普通文件即/usr/bin/test.c这个就叫做绝对路径
我们看到这个根目录下有两个是.和..的文件,这是因为每个目录文件下都会默认有两个隐藏目录
.表示的是当前路径
..表示的是上级路径
可以看到第一个ls后的路径为绝对路径
第二个ls指令后的路径就为相对路径,意思是在当前路径下的111下的test.c文件
(补充知识)whoami指令
--- 可以查看当前使用Linux系统的是谁
1.ls指令
语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
下面是常用的一些ls所跟的选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。 ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型, “*”表示可执行的普通文件; “/”表示目录; “@”表
示符号链接; “|”表示FIFOs; “=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。 (递归)
-1 一行只输出一个文件。
可见Linux系统指令是非常灵活的,我们可以把选项互换位置,可以缩写,但ll 表示的是ls -a -l
(补充指令)alias指令
可以给当前指令起别名,这样我们使用起来更加方便,但建议尽量减少起别名
(补充指令)which指令
可以显示当前指令所在目录
2.pwd指令
语法: pwd
功能:显示用户当前所在的目录
pwd用法比较简单,没有其他选项。
3.cd指令
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
举例:cd .. : 返回上级目录
cd /home/litao/linux/ : 绝对路径
cd ../day02/ : 相对路径
cd ~:进入用户家目
cd -:返回最近访问目录
(补充知识)家目录
这里我们不得不谈谈家目录的概念。
我们来看看Windows的家目录
这是我电脑上的默认的家目录
Linux系统指定的用户也有自己的家目录
通过对进入家目录操作,我们发现进入的是/root
对的,这个就是当前我们的家目录
对于root账号:默认的家目录/root --- 超级管理员账户
对于普通用户:默认家目录/home/xxx, xxx新建的用户名
任何一个用户,首次登录,所处路径都是自己的家目录
多用户操作系统 --- Windows,Linux
桌面实质也是个文件夹
只是在Windows是通过图形化界面显示在屏幕上。
4.touch指令
语法:touch [选项]... 文件...
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
-a 或--time=atime或--time=access或--time=use只更改存取时间。
-c 或--no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或--time=mtime或--time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。
5.mkdir指令(重要)
语法: mkdir [选项] dirname...
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
举例:
6.rmdir指令 && rm指令(重要)
rmdir是一个与mkdir相对应的命令。 mkdir是建立目录,而rmdir是删除命令。
语法: rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm命令可以同时删除文件或目录
语法: rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
使用-f时我们要注意,确定我们删的文件是我们想要删除的,一旦删除,就无法还原,所以一定要看清楚,防止错把根目录删除使得系统崩溃,这在公司就可能会是一个大事故了。所以,我们宁可备份,不要删除。
(补充指令)stat
ACM时间
Access:
- 表示文件最近一次被访问的时间
Modify:
- 表示最近一次修改文件属性的时间
Change:
- 表示最近一次修改文件内容的时间
(补充指令)tree
该指令可以使文件目录以树状形式显示目录结构
tree后可跟目录文件名显示的是这个目录文件对应的树状结构也可不跟
如果我们没有这个指令的话,可以进行安装
指令为:
yum install -y tree
有时我们会碰到指令失控的情况,这时我们只需要按ctrl + c就可终止异常的指令
7.man指令(重要)
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是
man 语法: man [选项] 命令
-k 根据关键字搜索联机帮助
num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按
下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,面手册分为8章
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
举例: 可以查c语言的库函数
也可以查指令,比如查自己对应的指令解析
我们最重要的是去查2号手册。
总结:
Linux指令还是有很多的,本章讲解了部分Linux的指令与一些周边知识来充实我们的大脑,小伙伴们不用担心这些指令这么多,我们要不要去强行记忆,我回答,完全大可不必,我们在以后使用Linux会经常使用一些指令,这些指令就是我们的常用指令,敲的多了,这些指令就被我们记住了,其他的一些不常用的指令,既然是不常用我们也没必要刻意去记,对吧,所以我们不用焦虑去记这些指令的问题,我们重点关注的是一些周边知识的原理,这才是最重要的,支持一下哦,若需继续进行指令学习,等待博主的后续追更哦~