Linux笔记 Day03---(操作系统发展史和常用命令)

Linux笔记 Day03

文章目录

  • 一、操作系统发展史
    • 什么是操作系统?
    • 手工操作(无操作系统)
    • 批处理系统
    • 联机批处理系统
    • 脱机批处理系统
    • 多道程序系统
    • 多道批处理系统
    • 分时系统
    • 实时系统
    • 操作系统发展图谱
  • 二、Linux系统
    • (一)发展历程
    • (二)Linux版本及企业选择
  • 三、命令
    • (一)命令的语法结构
    • (二)命令执行过程:
    • (三)命令
      • 1.date命令
      • 2.cd命令
      • 3.重启
      • 4.关机
      • 5.ls命令
      • 6.echo命令
      • 7.cat命令
      • 8.touch命令
      • 9.find命令
      • 10.which命令
      • 11.chmod命令
      • 12.mv命令
      • 13.查看发行版本和内核版本
      • 14.help命令
  • 四、自定义命令
      • 1.自定义一个hello命令使其具有输出字符串"Hello Linux !"的功能
      • 2.自定义一个setip命令

一、操作系统发展史

什么是操作系统?

可能很多人都会说,我们平时装的windows7, windows10都是操作系统,没错,他们都是操作系统。还有没有其他的?
想想我们使用的手机,Google公司的Android系统,Apple公司笔记本上的的MacOSX、IPhone的IOS,他们都是操作系统。

那么我们想想,操作系统都可以做什么?
我们买来电脑的后第一件事情就是安装操作系统,有的电脑则在我们买来的时候已经安装好了操作系统,比如说品牌机(Dell、HP、lenovo,Mac)。
我们可以在操作系统上通过安装程序来看视频,听音乐,玩游戏、浏览网页,还可以弹出移动硬盘和U盘、管理我们硬盘中的文件等等;我们通过操作系统来和计算机交互,系统协调我们安排给计算机的各种任务。操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的,它是计算机系统中最基本的系统软件。
我们通过操作系统来使用计算机。 知道了系统是用来做什么的,我们来了解一下系统的发展历史。(操作系统工作方式的演变——20世纪五六十年代)。

手工操作(无操作系统)

1946年第一台计算机诞生–20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式。
程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。
Linux笔记 Day03---(操作系统发展史和常用命令)_第1张图片
手工操作方式两个特点:
(1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。
(2)CPU 等待手工操作。CPU的利用不充分。
20世纪50年代后期,出现人机矛盾:手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,手工操作方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍。唯一的解决办法:只有摆脱人的手工操作,实现作业的自动过渡。这样就出现了成批处理。

批处理系统

批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。
首先出现的是联机批处理系统,即作业的输入输出由CPU来处理。

联机批处理系统

首先出现的是联机批处理系统,即作业的输入/输出由CPU来处理。
主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行并把计算结果向输出机输出。完成了上一批作业后,监督程序又从输入机上输入另一批作业,保存在磁带上,并按上述步骤重复处理。
Linux笔记 Day03---(操作系统发展史和常用命令)_第2张图片
监督程序不停地处理各个作业,从而实现了作业到作业的自动转接,减少了作业建立时间和手工操作时间,有效克服了人机矛盾,提高了计算机的利用率。
但是,在作业输入和结果输出时,主机的高速CPU仍处于空闲状态,等待慢速的输入/输出设备完成工作: 主机处于“忙等”状态。

脱机批处理系统

为克服与缓解高速主机与慢速外设的矛盾,提高CPU的利用率,又引入了脱机批处理系统,即输入/输出脱离主机控制。
这种方式的显著特征是:增加一台不与主机直接相连而专门用于与输入/输出设备打交道的卫星机。
其功能是:
(1)从输入机上读取用户作业并放到输入磁带上。
(2)从输出磁带上读取执行结果并传给输出机。
这样,主机不是直接与慢速的输入/输出设备打交道,而是与速度相对较快的磁带机发生关系,有效缓解了主机与设备的矛盾。主机与卫星机可并行工作,二者分工明确,可以充分发挥主机的高速计算能力。
Linux笔记 Day03---(操作系统发展史和常用命令)_第3张图片
脱机批处理系统:20世纪60年代应用十分广泛,它极大缓解了人机矛盾及主机与外设的矛盾。IBM-7090/7094:配备的监督程序就是脱机批处理系统,是现代操作系统的原型。
不足:每次主机内存中仅存放一道作业,每当它运行期间发出输入/输出(I/O)请求后,高速的CPU便处于等待低速的I/O完成状态,致使CPU空闲。

为改善CPU的利用率,又引入了多道程序系统。

多道程序系统

多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
单道程序运行过程 :在A程序计算时,I/O空闲, A程序I/O操作时,CPU空闲(B程序也是同样);必须A工作完成后,B才能进入内存中开始工作,两者是串行的,全部完成共需时间=T1+T2。
Linux笔记 Day03---(操作系统发展史和常用命令)_第4张图片
多道程序运行过程 :将A、B两道程序同时存放在内存中,它们在系统的控制下,可相互穿插、交替地在CPU上运行:当A程序因请求I/O操作而放弃CPU时,B程序就可占用CPU运行,这样 CPU不再空闲,而正进行A I/O操作的I/O设备也不空闲,显然,CPU和I/O设备都处于“忙”状态,大大提高了资源的利用率,从而也提高了系统的效率,A、B全部完成所需时间 Linux笔记 Day03---(操作系统发展史和常用命令)_第5张图片
多道程序设计技术不仅使CPU得到充分利用,同时改善I/O设备和内存的利用率,从而提高了整个系统的资源利用率和系统吞吐量(单位时间内处理作业(程序)的个数),最终提高了整个系统的效率。

单处理机系统中多道程序运行时的特点:

  • 多道:计算机内存中同时存放几道相互独立的程序;
  • 宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了各
    自的运行,但都未运行完毕;
  • 微观上串行:实际上,各道程序轮流地用CPU,并交替运行。

多道程序系统的出现,标志着操作系统渐趋成熟的阶段,先后出现了作业调度管理、处理机管理、存储器管理、外部设备管理、文件系统管理等功能。

多道批处理系统

20世纪60年代中期,在前述的批处理系统中,引入多道程序设计技术后形成多道批处理系统(简称:批处理系统)。
它有两个特点:
(1)多道:系统内可同时容纳多个作业。这些作业放在外存中,组成一个后备队列,系 统按一定的调度原则每次从后备作业队列中选取一个或多个作业进入内存运行,运行作业结束、退出运行和后备作业进入运行均由系统自动实现,从而在系统中形成一个自动转接的、连续的作业流。
(2)成批:在系统运行过程中,不允许用户与其作业发生交互作用,即:作业一旦进入系统,用户就不能直接干预其作业的运行。
批处理系统的追求目标:提高系统资源利用率和系统吞吐量,以及作业流程的自动化。
批处理系统的一个重要缺点:不提供人机交互能力,给用户使用计算机带来不便。虽然用户独占全机资
源,并且直接控制程序的运行,可以随时了解程序运行情况。但这种工作方式因独占全机造成资源效率
极低。
一种新的追求目标:既能保证计算机效率,又能方便用户使用计算机。 20世纪60年代中期,计算机技术和软件技术的发展使这种追求成为可能。

分时系统

由于CPU速度不断提高和采用分时技术,一台计算机可同时连接多个用户终端,而每个用户可在自己的终端上联机使用计算机,好象自己独占机器一样。
分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。
若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好象他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。
具有上述特征的计算机系统称为分时系统,它允许多个用户同时联机使用计算机。
Linux笔记 Day03---(操作系统发展史和常用命令)_第6张图片
特点:
(1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作。
(2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方式,明显地有别于批处理系统,因而,分时系统又被称为交互式系统。
(3)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。
(4)及时性。系统可对用户的输入及时作出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。

分时系统的主要目标:对用户响应的及时性,即不至于用户等待每一个命令的处理时间过长。
分时系统可以同时接纳数十个甚至上百个用户,由于内存空间有限,往往采用对换(又称交换)方式的存储方法。即将未“轮到”的作业放入磁盘,一旦“轮到”,再将其调入内存;而时间片用完后,又将作业存回磁盘(俗称“滚进”、“滚出“法),使同一存储区域轮流为多个用户服务。
多用户分时系统是当今计算机操作系统中最普遍使用的一类操作系统。

实时系统

虽然多道批处理系统和分时系统能获得较令人满意的资源利用率和系统响应时间,但却不能满足实时控制与实时信息处理两个应用领域的需求。于是就产生了实时系统,即系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。

实时系统可分成两类:

实时控制系统。当用于飞机飞行、导弹发射等的自动控制时,要求计算机能尽快处理测量系统测得的数据,及时地对飞机或导弹进行控制,或将有关信息通过显示终端提供给决策人员。当用于轧钢、石化等。工业生产过程控制时,也要求计算机能及时处理由各类传感器送来的数据,然后控制相应的执行机构。
实时信息处理系统。当用于预定飞机票、查询有关航班、航线、票价等事宜时,或当用于银行系统、情报检索系统时,都要求计算机能对终端设备发来的服务请求及时予以正确的回答。此类对响应及时性的要求稍弱于第一类。
实时操作系统的主要特点:
(1)及时响应。每一个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。
(2)高可靠性。需采取冗余措施,双机系统前后台工作,也包括必要的保密措施等。

操作系统发展图谱

Linux笔记 Day03---(操作系统发展史和常用命令)_第7张图片

二、Linux系统

(一)发展历程

我们知道Linux是在计算机上运行的,所以说Linux是一组软件,问题是这个软件是操作系统还是应用程序,他可以在那类计算机硬件上运行,来源于哪里?而且一直说他是一款免费的软件,什么是Linux?
计算机主机就是一堆硬件组成的,为了有效的控制这些硬件资源,于是产生了操作系统,操作系统有效的控制硬件资源的分配,并提供计算机运行所需要的功能外,为提供给程序设计师更容易开发软件的环境,操作系统还会提供一套完整的系统接口为程序开发者使用。
Linux笔记 Day03---(操作系统发展史和常用命令)_第8张图片
Linux就处于内核与系统调用接口这两层,所以说Linux是一个操作系统。
要了解Liunx系统发展就不得不提另外一个操作系统Unix,如果稍微有了解的同学知道Linux的核心是由Linus Torvalds在1991年的时候开发的,并放在网上供大家下载使用,后来大家觉得这个小东西短小精悍,慢慢很多的技术大牛开始投入研发,才有了现在我们使用的Linux,他为什么要开发这个内核呢?

1969年以前:Multics一个伟大的梦想,Bell,MIT,GE联合开发
早起的主机只能提供终端机,而且只有输入输出功能,本身是无法安装软件,并且最大只能提供30个终端,为了增加功能,1965年前后由贝尔实验室( BELL)加入了麻省理工学院(**MIT)以及通用电气(GE)合作的计划 ——该计划要建立一套多使用者(multi-user)、多任务(multi-processor)、多层次(multi-level)的MULTICS操作系统,想让大型主机支持 300 台终端,1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究后续,相继都退出了。
1969 年:Ken Thompson的 file server system
Thompson是Multics计划中的一员,在Multics项目结束后,因为自己的需求,他自己开发了一个小的操作系统,大概花费1个月的时间使用汇编语言写好了,由于系统比原来计划的Multics系统简化不少,被同事戏称为Unics,这就是Unix系统的原型。
1973年:Unix正式诞生,Ritchie等人以C语言写出第一个正式Unix核心
1977年:Unix分支–BSD的诞生
1979年:宣告版权
1984年:x86架构Minix开始研发,GNU计划于FSF基金会成立
因为AT&T(通用电气)的政策改变,在 Version 7 Unix 推出之后,发布新的使用条款,将 UNIX 源代码私有化,在大学中不能再使用 UNIX 源代码,Andrew S. Tanenbaum(塔能鲍姆)教授为了能在课堂上教授学生操作系统运作的细节,决定在不使用任何 AT&T 的源代码前提下,自行开发与 UNIX 兼容的操作系统,以避免版权上的争议
以小型 UNIX(mini-UNIX)之意,将它称为MINIX.
Richard Mathew Stallman在1984年发起GNU计划,现在我们使用的很多自由软件或者开源软件,计划直接或者间接受益于GNU计划。
GNU计划(GNU’s Not UNIX):建立一个自由,开放的Unix操作系统

GNU的通用公共许可证(GNU General Public License)
GPL:GNU通用公共许可证。在自由软件所使用的各种许可证之中,最为人们注意的也许是通用性公开许可证(General Public License,简称GPL)。GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。
Linux笔记 Day03---(操作系统发展史和常用命令)_第9张图片
BSD协议、Apache协议、LGPL协议
Linux笔记 Day03---(操作系统发展史和常用命令)_第10张图片
1991年:Linus Torvalds的Linux诞生

(二)Linux版本及企业选择

Linux的核心版本号如下:
3.10.0-123.e17.x86_64
主版本.次版本.释出版本-修改版本
奇数、偶数版本分类
在2.6.x版本之前,核心的发展分为两个阶段,并给予不同的核心编号

  • 主、次版本号为奇数:发展中版本(development)
    如:2.5.xx
  • 主、次版本号为偶数:稳定版本(stable)
    如:2.6.xx
    主线版本、长期维护版本
    在3.0版本开始之后,不在区分奇偶数版本,所以在使用3.0以后的版本需要选择长期支持版本才行

Linux发行版本
Linux发行版(也被叫做GNU/Linux发行版)是基于Linux内核的操作系统。Linux发行版通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。现在有超过300个Linux发行版(Linux发行版列表)。大部分都正处于活跃的开发中不断地改进。
比较著名的版本有:
1.RedHat Linux,最早的Linux发行版本之一,在全球拥有最高的市场占有率。
在这里插入图片描述
2.CentOS,(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux
发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由
于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise
Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件,当前已被红帽公司收购。
3.Debian Linux,Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。
4.Fedora Core,Fedora Core是Red Hat的开源项目。
5.Ubuntu ,Ubuntu是基于Debian的unstable版本加强而来
6.Gentoo
7.openSUSE

三、命令

(一)命令的语法结构

[root@admin ~]# command [-option] parameter1 parameter2 ..
				  命令     选项       参数1      参数2
上述命令详解如下:
1、一行命令中,第一个输入的部分绝对是命令,或者可以执行的文件
2、command是命令的名称
3、[-option]中并不一定存在,当要加入选项时,通常情况下会带-号有的会带--,作用是影响命令的执行结果
-:短选项
--:长选项
4、parameter1 parameter2 ..是选项后面的参数,或者是命令的作用对象
5、命令、选项、参数之间是以空格来区分的,不论几个空格都视为一个,所以空格是很重要的提示符,初学者容易忽略。
6、当写完整个命令后,敲回车键执行命令

(二)命令执行过程:

发起一命令:请求内核将某个二进制程序运行为一个进程;
我们键入一个命令实际上就是执行了一个程序,在这个过程中从回车之后从程序转换成了进程,从静
态转换成动态运行,所谓动态就是有生命周期,ls执行之后,进程就不存在了,但是静态的命令还是存在的,只要你不去删除他,就一直存在于文件系统的指定路径下面.
程序–> 进程
静态–> 动态(有生命周期)
命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件
多数系统程序文件都存放在:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin
普通命令:/bin, /usr/bin, /usr/local/bin
管理命令:/sbin, /usr/sbin, /usr/local/sbin
注意:并非所有的命令都有一个在某目录与之对应的可执行程序文件
执行命令的本质实际上是运行一个二进制文件(程序),启动一个线程,命令执行完毕,进程结束。
所以每个命令对应一个文件,可以使用 find / -name 命令名 #查找该命令文件存放位置,也可以使用
which 命令名 来查看。

[root@admin ~]# find / -name ls
/usr/bin/ls
[root@admin ~]# which ls
/usr/bin/ls

所以,执行 ls 等价于执行 /usr/bin/ls

[root@admin ~]# ls
anaconda-ks.cfg
[root@admin ~]# /usr/bin/ls
anaconda-ks.cfg
[root@admin ~]# 

执行命令时,是通过加载环境变量查找命令文件位置的。
在Linux中,PATH是环境变量,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行。

输入命令echo $PATH,其中echo表示“显示”的意思,而PATH前面的$表示后面接的是变量,所以就会显示出当前的PATH了。

[root@admin ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@admin ~]# 

安装linux系统时,已经默认在PATH中写进了以上这些路径。

了解了我们的命令语法结构和命令运行过程,接下来我们就开始执行几个简单的命令:

(三)命令

1.date命令

功能:显示和设置系统日期和时间
格式: date [选项] 显示时间格式(以+开头,后面接格式)
①date 显示系统当前时间

[root@admin ~]# date
2020年 07月 04日 星期六 22:14:26 CST

说明:CST (时区缩写),CST可视为美国、澳大利亚、古巴或中国的标准时间。
date "+%Y-%M-%D %H:%M:%S" 以指定格式显示系统当前时间
注意:如果指定的格式中包括年月日和时分秒,那么就一定要加上双引号,如果仅指定年月日或者仅指定时分秒可以不用加双引号

[root@admin ~]# date "+%Y-%m-%d %H:%M:%S"
2020-07-04 22:19:11

date -d parameter 获得相对日期

#显示相对于现在时间的明天的时间,参数可以为tomorrow或者 next-day
[root@admin ~]# date
2020年 07月 04日 星期六 22:26:55 CST
[root@admin ~]# date -d tomorrow
2020年 07月 05日 星期日 22:27:04 CST
[root@admin ~]# date -d next-day
2020年 07月 05日 星期日 22:31:57 CST
#还可以指定显示格式
[root@admin ~]# date -d tomorrow +%Y-%m-%d
2020-07-05
[root@admin ~]# date -d next-day +%Y-%m-%d
2020-07-05
#当然,你也可以利用date命令查询指定日期的星期,和日历一样
[root@admin ~]#date -d 20300303
2030年 03月 03日 星期日 00:00:00 CST
[root@admin ~]#date -d Nov11    #11月11日
2020年 11月 11日 星期三 00:00:00 CST
#显示三天后的时间
[root@admin ~]# date -d +3day
2020年 07月 07日 星期二 22:34:51 CST
#显示三天前的时间
[root@admin ~]# date -d -3day
2020年 07月 01日 星期三 22:35:49 CST
#同样可以指定格式
[root@admin ~]# date -d -3day +%Y-%m-%d
2020-07-01
#注意:这里如果指定的格式中包括年月日和时分秒,那么就一定要加上双引号
[root@admin ~]# date -d -3day "+%Y-%m-%d %H:%M:%S"
2020-07-01 22:38:07

date -s 时间字符串 设置时间
需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。

Ⅰ.将当前日期修改为2030年6月6日(仅修改年月日)

[root@admin ~]#date
2020年 07月 05日 星期日 09:32:22 CST
[root@admin ~]#date -s 20300606			
2030年 06月 06日 星期四 00:00:00 CST
[root@admin ~]#date
2030年 06月 06日 星期四 00:00:44 CST

Ⅱ.将当前时间修改为13时14分15秒(仅修改时分秒)

[root@admin ~]#date
2030年 06月 06日 星期四 00:03:14 CST
[root@admin ~]#date -s 13:14:15
2030年 06月 06日 星期四 13:14:15 CST
[root@admin ~]#date
2030年 06月 06日 星期四 13:14:17 CST

Ⅲ.将当前时间修改为2050年5月5日5时5分5秒(同时修改年月日和时分秒)

[root@admin ~]#date
2030年 06月 06日 星期四 13:16:13 CST
[root@admin ~]#date -s "20500505 5:5:5"         #也可以这样写:#date -s "2050-05-05 5:5:5"
2050年 05月 05日 星期四 05:05:05 CST  
[root@admin ~]#date
2050年 05月 05日 星期四 05:05:08 CST

特别注意:当仅修改年月日时或者仅修改时分秒时可以不加双引号,但要是同时修改年月日和时分秒的话必须加上双引号,中间要有空格隔开。

上述修改只是修改了linux的系统时间,CMOS中的时间可能还没有改变,所以为了保险,需要使用 clock -w 把当前修改后的系统时间写入到CMOS中

系统时间和CMOS时间的关系。系统时间是由linux操作系统来维护的;CMOS时间是CMOS芯片保存的时间。系统启动时,操作系统将从CMOS读出时间记录为系统时间,同时操作系统也会自动每隔一段时间将系统时间写入CMOS中。如果使用date命令修改系统时间后马上重启电脑,操作系统还没有将系统时间同步到CMOS,这样开机后就还是没有修改前的时间了,所以为了保险起见,最还还是手动使用命令 clock 将系统时间同步到CMOS中。

计算机元年:综合当时UNIX的发展历程,取1970年1月1日0时0分0秒做为计算机元年,用于计算机计时的开始。

2.cd命令

格式:cd 目标工作文件目录路径
功能:切换到指定目录
① cd /etc/sysconfig 切换到 /etc/sysconfig目录下

[root@admin ~]# cd /etc/sysconfig
[root@admin sysconfig]# pwd
/etc/sysconfig

② cd ~ 跳转到当前用户的家目录
root用户:相当于 cd /root

[root@admin sysconfig]# cd ~
[root@admin ~]# pwd
/root

普通用户:相当于 cd /home/当前用户名

[dxk@admin bin]$ cd ~
[dxk@admin ~]$ pwd
/home/dxk

③cd - 返回进入此目录之前所在目录

[root@admin ~]# pwd
/root            #当前在/root下
[root@admin ~]# cd /etc/sysconfig/network-scripts      #当前在/root目录下,使用绝对路径直接进入/etc/sysconfig/network-scripts目录下
[root@admin network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@admin network-scripts]# cd -   # 返回进入此目录之前所在目录,在进入这个目录之前的所在目录是/root,所以返回到/root下
/root
[root@admin ~]# pwd
/root
[root@admin ~]# cd -     #刚才是从/etc/sysconfig/network-scripts目录下进入到/root目录下,所以返回进入此目录之前所在目录就是/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts

④cd … 返回上一级目录

[root@admin sysconfig]# pwd
/etc/sysconfig
[root@admin sysconfig]# cd ..
[root@admin etc]# pwd
/etc
[root@admin etc]# cd ..
[root@admin /]# pwd
/
#/目录(根目录)是系统的一级文件结构,不能再返回上一级了

⑤cd
直接使用cd回车,是进入用户目录

Ⅰ.root用户的主目录是/root

[root@admin network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@admin network-scripts]# cd
[root@admin ~]# pwd
/root

Ⅱ.普通用户的主目录是/home/用户名

[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd
[dxk@admin ~]$ pwd
/home/dxk

注意:家目录和主目录一般是相同的

⑥cd . 返回当前目录

[dxk@admin ~]$ cd /bin
[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd .
[dxk@admin bin]$ pwd
/bin
[dxk@admin bin]$ cd ..
[dxk@admin /]$ pwd
/
[dxk@admin /]$ cd .
[dxk@admin /]$ pwd
/

cd 后可跟相对路径也可跟绝对路径。

3.重启

①shutdown -r now
②init 6
③reboot

4.关机

①shutdown -h now
②init 0
③poweroff

5.ls命令

ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似。当执行ls命令时,默认显示的只有非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示。当不加参数时,默认列出当前目录的列表信息。
用法:ls [参数] [目录名]
①ls -a 显示所有的文件,包括隐藏文件(以.开头的文件)

[dxk@admin ~]$ ls
[dxk@admin ~]$ ls -a
.   .bash_history  .bash_profile  .bashsrc
..  .bash_logout   .bashrc        .viminfo

ls -a /usr 查看/usr目录下的所有文件信息

[dxk@admin /]$ ls -a /usr
.   bin  games    lib    libexec  sbin   src
..  etc  include  lib64  local    share  tmp

② ls -l 查询当前路径的文件的属性、大小等详细信息

[dxk@admin usr]$ ls -l
总用量 104
dr-xr-xr-x.  2 root root 24576 7月   1 16:28 bin
drwxr-xr-x.  2 root root     6 4月  11 2018 etc
drwxr-xr-x.  2 root root     6 4月  11 2018 games
drwxr-xr-x.  3 root root    23 6月  29 16:43 include
dr-xr-xr-x. 27 root root  4096 6月  29 16:48 lib
dr-xr-xr-x. 40 root root 20480 7月   1 16:28 lib64
drwxr-xr-x. 21 root root  4096 6月  29 16:53 libexec
drwxr-xr-x. 12 root root   131 6月  29 16:36 local
dr-xr-xr-x.  2 root root 12288 6月  29 16:53 sbin
drwxr-xr-x. 77 root root  4096 7月   1 16:28 share
drwxr-xr-x.  4 root root    34 6月  29 16:36 src
lrwxrwxrwx.  1 root root    10 6月  29 16:36 tmp -> ../var/tmp

第一列由10个字符组成,第一个字符表示文件的类型:

  • -表示普通文件
  • d表示目录
  • l表示链接文件
  • c表示字符设备文件
  • b表示块设备文件

第一列剩下9个字符表示文件或目录的访问权限:
rwx 读、写和执行,相应的位置写上字符表示具有相应的权限,-表示没有读或写或执行的权限

  • 前三位表示文件所有者所具有的权限
  • 接下来三位表示文件的所属成员具有的权限
  • 最后三位表示其他人对文件的权限
    在这里插入图片描述
  • 第二列(蓝色)数字表示文件或目录所具有的链接个数
  • 第三列(红色)表示文件或目录的的所有者
  • 第四列(粉色)表示文件或目录的所属组
  • 第五列(紫色)数字表示文件或目录的大小,单位是字节
  • 第六列(绿色)表示文件或目录最后一次修改的时间
  • 第七列(白色)表示文件或目录的名字

ls -l 路径 查看指定路径下的文件信息
ls -l 也可以有这样合并的写法 ll ,效果是一样的

[root@admin ~]# ls -l
总用量 8
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
-rwxrwxrwx. 1 root root   19 7月   5 22:14 bin
[root@admin ~]# ll
总用量 8
-rw-------. 1 root root 1588 6月  29 17:12 anaconda-ks.cfg
-rwxrwxrwx. 1 root root   19 7月   5 22:14 bin
[root@admin ~]# 
[dxk@admin home]$ ls -l
总用量 0
drwx------. 2 Bob Bob  62 7月   3 09:45 Bob
drwx------. 2 dxk dxk 115 7月   2 22:18 dxk
drwx------. 2 Bob Bob  62 7月   3 09:42 eddydel
[dxk@admin home]$ ll
总用量 0
drwx------. 2 Bob Bob  62 7月   3 09:45 Bob
drwx------. 2 dxk dxk 115 7月   2 22:18 dxk
drwx------. 2 Bob Bob  62 7月   3 09:42 eddydel

③ls -d 不展开目录,只显示目录自身,一般与-l配合使用以显示目录自身的属性信息(只显示当前目录的属性信息)

[root@admin etc]# ls -ld   #显示当前目录本身的属性信息
drwxr-xr-x. 75 root root 8192 7月   5 10:07 .
[root@admin etc]# ls -ld /etc/sysconfig    #显示指定目录本身的属性信息
drwxr-xr-x. 6 root root 4096 6月  29 17:12 /etc/sysconfig

[root@admin ~]#ls -ld /tmp/*
等同于:
[root@admin ~]#cd /tmp
[root@admin tmp]# ls -l

④ls -h 一般和-l联合使用 ls -lh
显示文件具体信息并将文件大小根据实际情况调整进行显示,不一定是用用默认的byte做单位。而ls -l 显示的文件大小单位只能是byte

6.echo命令

echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。

①打印变量的值
echo $变量名:用于显示指定变量

[dxk@admin ~]$ echo $PS1
[\u@\h \W]\$

②输出指定字符串

[dxk@admin ~]$ echo "Welcome to my CSDN"
Welcome to my CSDN

7.cat命令

将一个文件的内容连续打印在屏幕上
格式:cat [-bETnv]

选项与参数:
-b:列出行号,仅针对非空白行做行号显示,空白行不标行号
-E:将结尾的换行符$显示出来
-T:将[tab]按键以^I显示出来
-n:打印出行号,连同空白行也会有行号
-v:列出一些看不出来的特殊字符

①查看/etc/issue文件的内容

[root@admin ~]# cat /etc/issue
\S
Kernel \r on an \m

②查看/etc/issue文件的内容同时打印行号(包括空白行的行号)

[root@admin ~]# cat -n /etc/issue
     1	\S
     2	Kernel \r on an \m
     3	

③查看/etc/issue文件的内容同时打印行号(不显示空白行的行号)

[root@admin ~]# cat -b /etc/issue
     1	\S
     2	Kernel \r on an \m

tac命令(反向列示)
tac刚好是将cat反写过来,它的功能和cat相反,cat是由第一行到最后一行连续显示在屏幕上,二tac则是由最后一行到第一行反向在屏幕上显示出来 ,此命令没有参数

[root@admin ~]# tac /etc/issue

Kernel \r on an \m
\S

8.touch命令

修改文件时间或创建新文件
格式:touch [-acdmt] 文件

选项与参数:
-a:仅自定义access time
-c:仅修改文件的时间,若该文件不存在则不建立新文件
-d后面可以接欲定义的日期而不用目前的日期,也可以使用–date=“日期或时间”
-m仅修改mtime
-t后面可以接欲定义的时间而不用目前的时间,格式为[YYYYMMDDhhmm]

①建立一个空文件

[dxk@admin ~]$ ls
[dxk@admin ~]$ touch MyCSDN
[dxk@admin ~]$ ls
MyCSDN
[dxk@admin ~]$ ls -l
总用量 0
-rw-rw-r--. 1 dxk dxk 0 7月   5 15:35 MyCSDN
[dxk@admin ~]$ date
2020年 07月 05日 星期日 15:36:09 CST

②将某个文件日期自定义为目前(修改时间mtime与读取时间atime)

[dxk@admin ~]$ touch mycsdn
[dxk@admin ~]$ date
2020年 07月 05日 星期日 15:43:34 CST
[dxk@admin ~]$ ll
总用量 0
-rw-rw-r--. 1 dxk dxk 0 7月   5 15:43 mycsdn
[dxk@admin ~]$ touch -d "+3 day" mycsdn
[dxk@admin ~]$ ll
总用量 0
-rw-rw-r--. 1 dxk dxk 0 7月   8 2020 mycsdn

9.find命令

查找文件
格式:find [PATH] [option] [action]

参数:
-name filename:查找文件名称为filename的文件
-type TYPE:查找文件类型为TYPE的,类型主要有:一般正规文件(f),设备文件(f),目录(d),链接文件(l),socket(s),及FIFO§等属性

find / -name pwd 在/目录下找出文件名为pwd的文件

[root@admin ~]# find / -name pwd
/usr/bin/pwd

②找出/run目录下,文件类型为socket的文件名有哪些
find /run -type s

[root@admin ~]# find /run -type s
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket
/run/lvm/lvmpolld.socket
/run/lvm/lvmetad.socket
/run/udev/control
/run/systemd/shutdownd
/run/systemd/private
/run/systemd/journal/socket
/run/systemd/journal/stdout
/run/systemd/cgroups-agent
/run/systemd/notify

10.which命令

我们知道在命令行模式当中,连续输入两次[Tab]按键就能够知道用户有多少命令可以执行。那么这些命令的完整文件放在哪里?举例来说,ls这个常用的命令放在哪里?可以通过which来查找。
which(查找【可执行文件】)
which [-a] command
which cd 查找cd这个命令的完整名

[root@admin ~]# which cd
/usr/bin/cd

11.chmod命令

功能:文件权限的修改
Linux文件的基本权限由9个,分别是拥有者(ownner)、所属群组(group)、其他人(others)三种身份各有自己的读(read)、写(write)、执行(execute)权限。文件的权限字符为【-rwxrwxrwx】,这9个权限是三个三个一组。权限的设置方法有两种:数字或是符号来进行权限的修改,这里不做具体讲解。

#对文件mycsdn设置全部人可执行权限属性
[dxk@admin ~]$ ls
mycsdn
[dxk@admin ~]$ chmod -x mycsdn 

12.mv命令

移动文件与目录、或重命名

选项与参数:
-f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i:若目标文件已经存在时,就会询问是否覆盖
-u:若目标文件已经存在时,且source比较新,才会更新(update)

①将文件移动到另一个目录下

[root@admin /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
[root@admin /]# touch mycsdn
[root@admin /]# ls
bin   dev  home  lib64  mnt     opt   root  sbin  sys  usr
boot  etc  lib   media  mycsdn  proc  run   srv   tmp  var
[root@admin /]# mv mycsdn /usr/local/bin
[root@admin /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
[root@admin /]# cd /usr/local/bin
[root@admin bin]# ls
mycsdn

②将文件mycsdn重命名为hello

[root@admin bin]# ls
mycsdn
[root@admin bin]# mv mycsdn hello
[root@admin bin]# ls
hello

13.查看发行版本和内核版本

①uname -r 显示操作系统的内核版本

[root@admin bin]# uname -r
3.10.0-1127.el7.x86_64

②uname -a :显示系统内核名称、节点名称、操作系统的发行版号、内核版本、机器硬件架构(CPU)名、处理器类型、硬件平台、操作系统

[root@admin bin]# uname -a
Linux admin 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

系统:Linux ( uname -a 查看)
节点名称:admin( uname -n 查看)
操作系统的内核版本:3.10.0-1127.el7.x86_64( uname -r 查看)
内核版本:#1 SMP Tue Mar 31 23:36:51 UTC 2020 ( uname -v 查看)
机器硬件架构(CPU)名:x86_64( uname -m 查看)
处理器类型:x86_64( uname -p 查看
硬件平台: x86_64( uname -i 查看)
操作系统:GNU/Linux( uname -0 查看)

cat /etc/redhat-release 查看发行版本

[root@admin ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

14.help命令

功能:help命令用于显示shell内部命令的帮助信息。
help命令只能显示shell内部命令的帮助信息,而linux系统中绝大多数命令是外部命令,所以help命令的作用非常有限。而对于外部命令的帮助信息可以使man命令或者info命令查看。

格式
查看内部命令的用法:help [参数] 内部命令
查看外部命令的用法:命令 --help

常用选项:
-d 输出每个命令的简短描述
-s 输出短格式的帮助信息
-m 以伪man手册的格式显示帮助信息

①显示cd命令的帮助信息

[root@admin bin]# help cd

②以短格式显示cd命令的帮助信息

[root@admin bin]# help -s cd
cd: cd [-L|[-P [-e]]] [dir]

③输出cd命令的简短描述

[root@admin bin]# help -d cd
cd - Change the shell working directory.

④ 以伪man手册格式输出cd命令的帮助信息

[root@admin bin]# help -m cd

⑤ 查看外部命令cat的用法

[root@admin bin]# cat --help

四、自定义命令

1.自定义一个hello命令使其具有输出字符串"Hello Linux !"的功能

①创建一个文件并在文件内写入命令 echo Hello Linux !(以root身份)

[root@admin ~]# vim hello
echo Hello Linux !
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
~                                                                     
:wq         

②给该文件设置可执行权限

[root@admin ~]# chmod 777 hello   #这里我设置了所有用户均可对该文件实施读、写和执行操作权限

③那么此时该命令便可以执行了,但是有一定要求:在当前目录可以用相对路径执行也可以用绝对路径执行,在其他目录的话只能用绝对路径执行

[root@admin ~]# vim hello
[root@admin ~]# chmod 777 hello
[root@admin ~]# pwd
/root
[root@admin ~]# ./hello        #  ./是当前目录下,在当前目录(即与hello文件所在同一目录下)下可以这样执行,当然也可以用/root/hello来执行
Hello Linux !
[root@admin ~]# /root/hello       # 在当前目录下,用绝对路径方式执行
Hello Linux !
[root@admin ~]# cd /etc/sysconfig         #在其他目录(不是hello文件所在的目录)必须用绝对路径取执行
[root@admin sysconfig]# /root/hello
Hello Linux !

④但是我们发现自定义的命令不能像cd ,ls 等命令一样,只需要输入文件名便可执行。
在我们理解了命令的执行过程和变量$PATH之后,我们现在也可以做到了:将该文件 hello移动到写入 $PATH 变量中的目录/usr/local/bin下,其他目录则不行

写入 $PATH 变量中的目录有:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@admin sysconfig]# cd ~
[root@admin ~]# ls
anaconda-ks.cfg  hello
[root@admin ~]# mv hello /usr/local/bin  #首先要确保hello文件在此目录下,才能这样执行

⑤这样就可以在任意位置只输入文件名hello便可执行,下面我们来试试:

[root@admin ~]# hello
Hello Linux !
[root@admin ~]# cd /etc
[root@admin etc]# hello
Hello Linux !
[root@admin etc]# cd /etc/sysconfig
[root@admin sysconfig]# hello
Hello Linux !

2.自定义一个setip命令

那么有了以上的经验我们就可以自己定义命令了,这样就可以省掉许多操作,提升工作效率。
比如我们可以自定义一个名为setip的命令,功能是直接实现修改ip地址。这样我们就不用敲很长的代码,通俗来讲:setip=vim /etc/sysconfig/network/scripts/ifcfg-ens32(这里我的网卡配置文件为ens32,其他人可能有所不同,可以自己查看好再写)
我是这样写的:

[root@admin ~]# vim setip
#以下是在 setip文件内写入的命令
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens32     #这里我分开写了,当然大家也可以写成一句:vim/etc/sysconfig/network-scripts/ifcfg-ens32
:wq
[root@admin ~]# chmod 777 setip
[root@admin ~]# mv setip /usr/local/bin
[root@admin ~]# setip
[root@admin ~]# cd /etc
[root@admin etc]# setip

理解:在自定义命令时,那我们就可以在自定义的文件内写入很多条命令,就可以执行很多的功能了,类似于脚本,当然这是我的理解。

是不是很有意思呢,还在等什么,快动手去做吧 just do it !

你可能感兴趣的:(Linux笔记 Day03---(操作系统发展史和常用命令))