欢迎光临
我们一直在努力

《Linux系统编程》1.Linux基础指令(上)

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》


🌸Yupureki🌸的简介:


目录

1. Linux前言

1.1 什么是Linux?

1.2 为什么学习Linux?

1.3 利用XShell远程登陆Linux

1.3.1 环境安装

1.3.2 安装Xshell

2. Linux基本指令

2.1 ls命令

2.2 pwd命令

2.2.1 Linux中的目录

2.2.2 目录的本质

相对目录与绝对目录

目录的本质

tree命令

2.2.3 ls命令补充

2.3. cd命令

2.4 touch命令

2.4.1 stat命令

2.4.2 文件初识

2.4.2.1 文件的属性与内容

Linux下一切皆文件!

which命令

2.5 mkdir命令

2.6 clear命令

2.7 rmdir命令&&rm命令

2.8 man命令

2.9 cp命令

2.10 mv命令

2.11 cat命令


1. Linux前言

1.1 什么是Linux?

Linux是一款开源的类UNIX的操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议

与我们常见的Windows,Android,IOS这些面向普通大众带图形化界面不同的是,Linux操作系统一般为大黑屏,由命令行操作(Windows上的cmd)

思考:为什么Linux操作系统普遍不带图形化界面?

因为Linux不面向普通用户,而是开发者,特别是对于服务器开发,这是最重要的现实原因

  • 历史传承:Linux的设计深受Unix操作系统的影响。Unix在上世纪70年代诞生时,计算机非常昂贵,通常由多个用户通过终端(只有键盘和显示器)连接到一台大型主机上工作。在这种环境下,命令行界面是最高效、最稳定的交互方式。所有的操作都通过键盘输入命令完成,不需要为图形界面消耗宝贵的主机资源。Linux继承了这种高效、稳定的基因
  • 资源效率: 对于一台服务器来说,它的任务就是7×24小时高效处理网络请求。CPU、内存等资源是宝贵的。运行一个图形界面会消耗大量的内存和CPU周期,而这些资源本可以用来处理业务。无图形界面的Linux可以将所有硬件资源都投入到核心服务中。

  • 稳定性与安全性: 图形界面系统(特别是X11或Wayland等显示服务器,以及复杂的桌面环境)代码量巨大,远比稳定的内核更容易出问题(崩溃、卡顿)或存在安全漏洞。对于需要长时间运行的服务器,任何图形界面相关的问题都可能导致服务不可用。移除图形界面,就减少了系统的攻击面和潜在的故障点。

  • 远程管理与自动化: 服务器通常放在千里之外的数据中心里,管理员不可能跑到机房去操作鼠标键盘。他们通过SSH(安全外壳协议)等远程命令行工具进行连接和管理。图形界面在这种情况下完全没有用武之地。此外,服务器的大量配置、部署和运维工作都需要通过脚本自动化完成,而命令行是实现自动化的基础。

  • 1.2 为什么学习Linux?

    我们桌面端几乎只用Windows和macOS,这两个桌面端操作系统几乎占据了百分之99的份额,那么为什么还要学习Linux?

    因为Windows和macOS面向普通用户,大众是不需要做开发的,但是对于我们程序员,在某些领域这些操作系统是达不到很好的效果的,例如服务器领域

    Linux的发展现状:

    • Linux在服务器领域的发展 随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。 据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器场 的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。
    • Linux在桌面领域的发展 近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是UbuntuLinux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。
    • Linux在移动嵌入式领域的发展 Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。 此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的作 系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控 制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。
    • Linux在云计算/大数据领域的发展 互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用 Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。

    学习Linux不仅是利用Linux做开发,更是学习操作系统的底层运行原理,学习计算机相关的底层知识,对于我们程序员而言是十分重要的

    1.3 利用XShell远程登陆Linux

    1.3.1 环境安装

    我们一般使用Linux系统,不是在本地安装,而是使用云服务器,也是进入企业后的真实环境

    很多互联网大厂的服务器机房资源过剩,为了充分利用,可以远程给我们用户使用,当然代价是得交钱。但一般学生优惠一年也就100不到

    常见的云服务器厂商有:腾讯云,阿里云,华为云等等

    我们可以前往各个云服务厂商查看轻量级服务器,货比三家,哪个便宜买哪个

    如腾讯云领取学生优惠:

    购买后进入你的服务器首页

    这些就是你的云服务属性页面,我们初步关注的有两点:密码和操作系统

    密码不必多说,当你登陆Linux系统时(最开始是root)需要输入密码,这个密码就是你在腾讯云这里设置的密码

    至于操作系统,我们用的已经是Linux了,为什么还要安装一个操作系统?

    Linux上的操作系统,就像安卓之上的MIUI,ColorOs,OriginOS等等,熟悉手机的朋友都知道,这些都是基于安卓深度定制的,Linux上的也是如此,常见的有:Centos,Ubuntu等

    企业开发一般使用Centos,但Centos已经停更了

    学生一般用Ubuntu,所以我们安装Ubuntu系统

    1.3.2 安装Xshell

    购买了云服务并不能直接使用,我们需要一个软件来访问,一般使用XShell

    进入Xshell中,我们首先要绑定我们的云服务器,点击这个新建会话内容

    在这个主机这里就是购买的云服务器的IP地址,填进去即可

    第一次登陆你的Linux服务器需要填写密码,这个密码就是你在云服务器设置的密码

    之后,你就成功看见了这个大黑屏,迈出Linux之路的第一步

    2. Linux基本指令

    Linux跟我们常用的操作系统都不一样,是大黑屏加命令行,而不是手机屏幕点击或者鼠标点击

    因此我们就必须先学习如何用Linux

    而访问Linux的最重要的就是使用命令行

    2.1 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一行只输出一个文件。

    具体介绍

    我们一开始使用ls命令时发现什么都没有,因为这是在用户根目录,用户根目录的文件都被隐藏起来了,需要带-a(常用)来显示所有(a->all)

    -l(常用)选项:以行列的形式显示详细数据

    注意

    • 选项可以带多个,例如ls -l -a,也可以ls -l,也可以ls -a
    • 选项乱序不影响最终结果,例如ls -l -a和ls -a -l的性质是一样的
    • 选项前要带空格,不可粘连在一起,例如不可ls-l-a

    当然我们一般不用ls -l -a,毕竟要多打两个选项,我们一般用ll,ll就当与是ls -l -a

    知道这两个选项就够用了,其他选项需要用时再探讨即可

    2.2 pwd命令

    语法:pwd 功能:显示用户当前所在的目录 常用选项: 无

    2.2.1 Linux中的目录

    我们使用pwd命令时,看到了/root,这就是我们现在所处的目录

    相当于Windows中的目录

    只不过Windows中的目录分隔符是 \\ ,而在Linux中是 /

    我们使用ll查看当前目录的文件中,发现除了目录之外,还有.和..这两个东西

    实际上.是本目录,而..是上级目录,我们到时候跳转目录或者使用相对目录时就需要用到这些了

    2.2.2 目录的本质

    相对目录与绝对目录

    相对目录之所谓相对,就是有个参照物,为了方便理解,我们看Windows中的目录

    我们在任意一个文件夹中点击其中的一个文件夹,发现能够成功跳转到这个文件夹中,系统怎么知道你要选的那个文件夹?因为系统知道这个文件夹在哪个文件夹中,这是相对的

    而绝对目录则是从系统的根目录开始查找的,具有唯一性

    从E盘开始找,找到的这个文件

    目录的本质

    目录的本质就是树状结构

    根目录之下有很多个子目录,而这些子目录之下又有多个目录,以此往复,而目录的终点便是普通文件或者空目录

    tree命令

    语法:tree [目录] 功能:将该目录下的所有文件以树状的形式打印 常用选项: 无

    利用tree命令,可以证明Linux下的目录的底层是以多叉树存储的,每个文件夹或文件对应一个节点

    当然值得探讨的便是这个目录选项,我们可以填入相对路径或者绝对路径

    相对路径:

    还记得之前的那个.路径吗?这表明的是当前路径

    因此我们tree了当前目录下的所有文件,而..则是上级目录,我们tree ..就遍历了上级目录下的所有文件

    注意:不要tree根目录,因为根目录下的文件很多,tree遍历每个文件将会刷屏!!!

    如果你真的这么做了,就按crtl + c结束该进程(也是解决异常的常用方法)

    绝对路径:

    每个文件夹都有其绝对路径,我们当然也可以使用绝对路径来tree

    总结:路径的认识

    • Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件
    • 其中普通文件一定是目录树的叶子节点
    • 目录可能是叶子(空目录),也可能是路上节点
    • 理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就
    • 需要具有唯一性的方案来进行定位文件。其中任何一个节点,都只有一个父节点,所以,从根目录开始,定位指定文件,路径具有唯一性
    • 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式
    • 相对路径:相对于当前用户所处目录,定位文件的路径方式
    • 绝对路径一般不会随着用户的路径变化而丧失唯一性,一般在特定服务的配置文件中经常被使用
    • 相对路径因为它的便捷性,一般在命令行中使用较多

    2.2.3 ls命令补充

    ls/ll后面可跟目录名,来查看目标目录下的文件

    2.3. cd命令

    语法:cd 目录名 功能:改变工作目录。将当前工作目录改变到指定的目录下

    我们cd目录名可以进入到这个目录中,这个目录名既可以是相对路径又可以是绝对路径,因此我们可以使用.或者..进入当前目录或者上级目录

    2.4 touch命令

    语法:touch[选项] 文件名(或者目录/文件名) 功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。 常用选项: -a:change only the access time -c:change only the modification time

    我们在Linux可以发现神奇的一幕,那就是可以有多个"文件名"相同的文件,即使后缀不同

    那是因为Linux系统不关心后缀,可以说是把后缀也当作了文件名的一部分,因此严格来说文件名不一样(但是部分软件关心后缀)

    2.4.1 stat命令

    语法:stat文件名(或者目录/文件名) 功能:查看一个文件的属性

    今天我们不关心其他的属性,只关心这三个东西:Access,Modify和Change

    Access:访问时间

    • 缩写: atime

    • 定义: 文件中的数据最后被读取的时间。

    • 触发操作: 当你使用命令查看文件内容(如 cat、less、head)或者使用编辑器打开文件(但尚未保存)时,这个时间就会更新。

    • 简单记忆: 记录“读”的动作。

    Access简单来说就是只要你打开了这个文件,那么Access属性就会被修改

    Modify和Change翻译过来都是修改,那么有什么区别?

     Modify (修改时间)

    • 缩写: mtime

    • 定义: 文件的内容最后被修改的时间。

    • 触发操作: 当你编辑文件并保存(改变了文件里的数据),或者通过重定向向文件写入新内容时,这个时间就会更新。

    • 简单记忆: 记录“写内容”的动作。

    Change (状态改变时间)

    • 缩写: ctime

    • 定义: 文件的属性(也称为元数据或状态)最后被改变的时间。

    • 触发操作:

      • 当你修改文件内容时(虽然内容是数据,但文件大小这个属性变了,所以 ctime 也会变)。

      • 当你修改文件的权限(chmod)、修改文件的属主(chown)、或者重命名/移动文件(mv)时,即使文件内容没变,ctime 也会更新。

    • 重要特性: ctime 无法人为直接设置为过去的时间,它始终反映文件元数据最后一次变化的时刻。

    • 简单记忆: 记录“改属性”或“改状态”的动作。

    简单来说是修改了文件的内容Modify和Change就会更新,而修改了文件的属性只有Change更新

    2.4.2 文件初识

    我们谈及了Modify和Change的更新条件,借此机会来谈谈文件是个什么东西?

    2.4.2.1 文件的属性与内容

    任意一个文件都包含其属性与内容

    文件的内容都明白,最典型的就是文档中的文本,.c .cpp文件中的代码行,这些数据要么以文本的形式要么以二进制的形式保存在文件中

    而要描述一个文件不仅仅包含其内容,还有其属性,具体包括:文件名,文件格式,大小等

    Linux下一切皆文件!

    什么是"一切皆文件"?

    这里的“文件”不是狭义的磁盘上的普通文件,而是一个抽象的 I/O 概念。在 Linux 中,几乎所有东西都被抽象成一个文件,可以通过标准的文件操作 API(如 open()、read()、write()、close()、ioctl() 等)进行访问。这些“东西”包括:

    • 普通文件:磁盘上的数据文件。

    • 目录:也是文件,包含文件名和 inode 号的列表。

    • 设备文件:如 /dev/sda(硬盘)、/dev/tty(终端)、/dev/null(空设备)。对它们的读写会触发对应的设备驱动程序。

    • 管道(Pipe)和 FIFO:用于进程间通信,也表现为文件描述符。

    • 套接字(Socket):用于网络通信,也是通过文件描述符操作。

    • 符号链接:特殊的文件,指向另一个文件。

    • proc 文件系统:如 /proc/cpuinfo、/proc/meminfo,提供了内核运行时信息的文件视图。

    • sysfs 文件系统:如 /sys/class/,提供了设备、驱动等内核对象的视图。

    • 甚至进程的地址空间:例如通过 /proc/[pid]/mem 可以访问进程的内存。

    所以,“一切皆文件”意味着:无论操作的对象是硬件设备、内核数据结构,还是网络连接,用户态程序都可以像操作普通文件一样使用统一的系统调用接口。

    不仅如此,甚至连命令本身都是文件!这里介绍一个查看可执行程序所在目录的which命令

    which命令

    语法:which [选项] 命令名 功能:查看一个文件的属性

    常用选项

    • -a:列出 PATH 中所有匹配的路径,而不仅仅是第一个。

    • –skip-alias:忽略别名,只搜索外部命令。

    • –skip-dot:跳过以点(.)开头的隐藏目录。

    • –skip-tilde:跳过以波浪号(~)开头的备份文件所在的目录。

    我们发现,ls命令能够找到ls命令所在的目录,这说明ls本身也是一个文件,其本质是用C语言编写的可执行程序,我们能够执行这个程序,显示本目录下的文件

    不仅如此,所有的命令均为文件,为用C语言编写的可执行程序

    至于其他的为什么也都是文件,就得等以后再探讨了

    2.5 mkdir命令

    语法:mkdir [选项] dirname… 功能:在当前目录下创建一个名为“dirname”的目录(文件夹)

    常用选项:

    -p/-parents:可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

    2.6 clear命令

    语法:clear 功能:清空屏幕上的信息

    2.7 rmdir命令&&rm命令

    rmdir是一个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除命令

    语法:rmdir [-p][dirName]

    适用对象:具有当前目录操作权限的所有使用者

    功能:删除空目录

    常用选项: ·-p当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。

    rm命令可以同时删除文件或目录 语法:rm [-f-i-r-v] [dirName/dir] 适用对象:所有使用者 功能:删除文件或目录

    常用选项: ·f即使文件属性为只读(即写保护),亦直接删除 i删除前逐一询问确认 -r删除目录及其下所有文件

    删除单一文件

    删除该目录下的所有文件

    2.8 man命令

    Linux的命令有很多参数,我们不可能全记住,可以通过查看手册获取帮助 语法:man[选项]命令

    常用选项

    • -k根据关键字搜索联机帮助
    • num只在第num章节查找
    • -a将所有章节的都显示出来,比如manprintf它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

    man手册分为9章(不同系统可能会有差别)

    • 1是普通的命令
    • 2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
    • 3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
    • 4略
    • 5是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义
    • 6是给游戏留的,由各个游戏自己定义
    • 7是附件还有一些变量,比如像environ这种全局变量在这里就有说明
    • 8是系统管理用的命令,这些命令只能由root使用,如ifconfig
    • 9略

    2.9 cp命令

    语法:cp [选项] [源文件或目录目标文件或目录] 功能:复制文件或目录 说明: cp指令用于复制文件或目录 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定 的所有文件或目录复制到此目录中

    常用选项 ·f或-force强行复制文件或目录,不论目的文件或目录是否已经存在 ·-i或-interactive覆盖文件之前先询问用户 -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符 号链接,则一律视为普通文件处理

    拷贝单一文件或目录

    拷贝一整个目录包括其中的所有文件

    2.10 mv命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名 语法:mv [选项] [源文件或目录] [目标文件或目录] 功能:

  • 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
  • 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  • 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
  • 常用选项: -f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖 -i:若目标文件(destination)已经存在时,就会询问是否覆盖!

    移动单一文件或者文件夹

    文件改名

    2.11 cat命令

    语法:cat [选项] [文件] 功能:查看目标文件的内容

    常用选项: -b对非空输出行编号,空行不做编号 -n对输出的所有行编号 -s不输出多行空行

    查看文件中的文本

    查看文本(带行号)

    赞(0)
    未经允许不得转载:171主机测评 » 《Linux系统编程》1.Linux基础指令(上)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址