您的位置:首页 > 运维架构 > Linux

Linux笔记 Day02---(Linux基础入门)

2020-07-15 06:07 281 查看

Linux笔记 Day02

文章目录

  • 二、Linux基础入门
  • 三、命令初识
  • 一、计算机基础知识

    (一)认识计算机

    美籍匈牙利科学家冯·诺依曼最新提出程序存储的思想,并成功将其运用在计算机的设计之中,根据这一原理制造的计算机被称为冯·诺依曼结构计算机。因此冯·诺依曼又被称为“现代计算机之父”。
    冯·诺依曼计算机使用冯诺依曼体系机构的电子数字计算机。1945年6月,冯·诺依曼提出了在数字计算机内部的存储器中存放程序的概念(Stored Program Concept),这是所有现代电子计算机的模板,被称为“冯· 诺依曼结构”,按这一结构建造的电脑称为存储程序计算机(Stored Program Computer),又称为通用计算机。
    冯·诺依曼计算机主要由运算器、控制器、存储器和输入输出设备组成,它的的特点是:程序以二进制代码的形式存放在存储器中;所有的指令都是由操作码和地址码组成;指令在其存储过程中按照执行的顺序进行存储;以运算器和控制器作为计算机结构的中心等。
    冯诺依曼计算机广泛应用于数据的处理和控制方面,但是存在一定的局限性。
    关于计算机的硬件组成部分,观察我们自己的计算机来看大致可以分为三部分:

    • 输入单元:键盘、鼠标、触摸板等
    • 主机单元:CPU、主板、主存储器等
    • 输出单元:屏幕、打印机等
      目前所接触到的计算机都遵循冯诺依曼体系: 计算机主要分为五大部件组成:
      CPU中的控制器、运算器、输入单元、输出单元、主存储器

      1、运算器 运算器是计算机对数据进行加工处理的中心,对二进制数码进行算术运算或者逻辑运算计算机的运算速度通常是指每秒钟能够执行加法指令的数目。通常用百万次/每秒(MIPS)来表示。 双核就是指CPU上集成了两个运算核心。
      2、控制器 控制器是计算机的控制中心,由它指挥各个部件自动,协调地工作。 运算器+控制器=中央处理器(CPU)
      3、存储器 存储器是计算机中存放所有数据和程序的记忆部件,它的基本功能是指按照指定的地址存入或者读取信息 内存储器,简称内存,CPU可以直接访问其里的数据 。a、只读存储器ROM b、随机存储器RAM c、高速缓冲存储器CACHE 外存储器,简称外存或者副存,如硬盘 U盘 光盘 软盘。
      **4、输入设备功能:**向计算机输入命令、程序、数据等信息,把这些信息转换为计算机能识别的二进制代码如:键盘,鼠标,扫描仪,手写板,照相机,等等
      **5、输出设备功能:**将计算机处理后的各种内部格式信息转换为人们能识别的形式表达出来 如:显示器,打印机,绘图仪,音响等等。

    (二) 计算机组成原理

    1.CPU的架构
    精简指令集(Reduced Instruction Set Computer,RISC)
    微指令集较为简洁,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能很好,如果要完成复杂 的工作,则需要多个指令来完成。ARM是精简指令集的代表
    复杂指令集(Complex Instruction Set Computer,CISC)
    CISC在微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每个指令的长度并不相 同,因为指令的执行较为复杂的所以每条指令花费的时间较长,但是可以处理的工作较为丰富。X86是复杂指令集的代表
    2.计算机上的计算单位
    我们的日常生活中常见的十进制,计算机的运行计算基础就是基于二进 制来运行,可以简单的理解为:1代表通电(开),0代表断电(关),只是 用二进制执行运算,用其他进制表现出来。十六进制常见于内存地址,注册表regedit,MAC地址等。 而计算机中八进制比较少见不常用,一般用于某 些编程语言。
    对于计算机而言,它只认识0与1,0/1这个二进制单位我们称为bit,对于存储数据时,不论数据块大小是多少, 最小的存储单位是8个bit,因此定义了byte这个单位。
    1 Byte=8bits
    byte还是太小了,不容易判断数据的大小,有了后面的K,M,G,T,P等单位,1K代表1024byte,1M代表1024K。

    计算机本身使用的就是二进制,但是使用起来很不方便的,十六进制或八进制可以很好的解决这个问题(换算的 时候1位十六进制数可以用4位二进制数 代替,1位八进制数可以用3位二进制数代替)。因为进制越大,数的表达长度也就越短,例如:二进制数111111111111用十六进制表示为FFF,这样 更简短,比较节省空间,方便读,也方便记。
    (1)数制的概念
    数的表示规则,通常按进位原则进行计数,称为进位计数数制,人们通常采用的数制有十进制、二进制、八进制和十六进制。数制的表示主要包括三个基本要素:数码、基数和位权。 数码:是指数制中表示基本数值大小的不同数字符号 基数:是指数制所使用的数码的个数,如R机制表示有R个基本符号,其基数就为 R


    (2)不同数值之间的转换
    ①二进制、八进制、十六进制数转化为十进制数 方法:用按位权展开相加法

    ②十进制数转化为二进制数
    方法:整数部分采取“除2取余法”,从下往上取,小数部分采取“乘2 取整法”,从上往下取
    ③十进制整数→八进制
    方法:“除8取余” 十进制整数→十六进制方法:“除16取余” 十进制小数→八进制小数方法:“乘8取整” 十进制小数→十六进制小数方法:“乘16取整”
    ④二进制、八进制、十六进制之间的相互转化
    二进制数转换为八进制数:三位一组,不足补零。 注意:整数部分:前补零,小数部分:后补零 。八进制数转换为二进制数:八进制数每位展开成二进制数的三位。 二进制数转换为十六进制数:四位一组,不足补零。十六进制转换为二进制:十六进制每位展开成二进制数的四位。八进制和十六进制之间的相互转换可以通过先转换为二进制再进一步转换。

    (三)内存

    1. 内存是计算机系统的主存储器
    内存作为1个存储数据的存在, 有1个很重要的特性, 就是内存里的数据能被cpu直接访问。
    cpu能不能直接访问硬盘的数据?答案是不能。 只能通过把硬盘的数据先放到内存里,然后再从内存里访问硬盘的数据。我们平时玩游戏碰上读图loading 进度条的这个过程, 就是把数据从硬盘读到内存的过程啊。读完条后地图的数据就在内存中了。
    所以内存才是计算机系统的主存储器, 而硬盘是被分到跟光盘…u盘一类都是外部存储器。
    2. 内存的基本结构
    内存里存放的数据是什么呢? 其实也是只是存放0或者1这两个二进制数字啊, 所以内存里实际上有海量的小格子,每1个格子是1个bit,就只能存放1个数字(0或者1), 那么数值255需要几个格子来放呢? 就是8个格子, 1 个字节byte。
    内存里的格子数量非常巨大, 如果cpu要读出某个指定的数据, 怎么去找呢?1个1个格子去遍历? 遍历虽然实现简单, 但是在海量数据面前简直是自杀行为。所以实际上内存是把8个8个bit排成1组, 每1组成为1个单位, 大小是1byte(字节), cpu每一次只能访问1个byte, 而不能单独去访问具体的1个小格子(bit),1个byte字节就是内存的最小的IO单位。也就是说内存是由8个 8个小格(bit)组成的1个字节单位(byte)排列组成的。
    其实大部分数据都会作为各种数据类型存放在内存内,而各种数据类型所占的字节大小也是不同的,char字符类型占1个字节, int类型和unsigned int类型占4个字节byte.
    3. 引入内存地址概念。
    即使我们把内存分成了以字节为单位的结构, 但是实际上内存里还是有非常多的字节的,例如64MB内存就有64 × 1024 × 1024 个字节!
    如果cpu要查找1个变量, 还是要1个个字节去找到话…还是1个很浪费时间的行为,所以为了避免去遍历内存, 计算机系统就引入了内存地址这个概念。
    举个例子, 内存就是一栋大楼, 而内存里每1个字节就是大楼的每个房间, 而内存地址就是房间的门牌号码了. 如果没有门牌号码,我们去访问某个住在大楼的人是十分困难的, 只能从1楼开始每个房间去敲门。如果那个人住在顶楼?而如果你知道那个人的门牌号码, 就可以直接定位他的位置找到他,。
    内存也一样, 计算机操作系统会给内存每1个字节分配1个内存地址, cpu只需要知道某个数据类型的地址, 就可以直接去到指定的内存位置去提取数据。
    4. 直接寻址技术
    举例说明,假如你知道你要找的人住在那栋大楼的26楼 2601, 但是你还是需要从1楼走到26楼去找他,,这个过程还是需要很大代价。
    但是如果你具有了直接寻址技术,就能直接到26楼2601门前,如果你要找的下1个人在1楼,又能从26楼直接到1 楼。 而直接寻址技术已经成为当代计算机软硬件的标准技术之一, 也就是说只要cpu知道要访问数据的内存地址, 就能直接到内存的对应位置去访问数据。
    5. 内存地址的表示方式
    跟门牌号一样, 其实内存地址也是由1个2进制数字来表示的. 每1个地址对应内存里的1个byte字节, 如果地址的值加1, 那么这个地址就对应下1个字节。
    那么内存地址的长度是多少呢? 在32位操作系统中, 内存的地址就是32位的2进制数,那么假如32位系统的某个内存地址是: 0000 1111 1111 0000 1111 0000 1111 0000 那么它可以用十六进制表示成: 0 F F 0 F 0 F 0
    也就是 Ox0ff0f0f0,前面Ox代表十六进制,它实际上是1个二进制的数字啊. 不过计算机里面所有的东西都是二进制。
    6. 内存地址的数量决定cpu能访问的内存大小
    上面说了, 既然32位系统里内存地址长度是32位的. 所以32位的地址范围就是从 0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 (Ox00000000 ~ OxFFFFFFFF), 这里有几个地址? 明显是有 2^32 个. 那么2^32是多少个? 2^32 = 4 * 1024(G) * 1024(M) * 1024(K) = 4294967296 , 就是4G ,而每1个地址对应1个1个字节, 容量就是1byte, 所以2^32个地址就总共能对应应4GB 的内存容量, 这里的B指的是byte 字节。
    假如你给32位的系统配上了8GB的内存, 操作系统最多也只能给其中4GB 分配地址,其余 4GB是没有地址, 因为地址不够用,所以32位系统最多支持4GB内存就是这样的。 那么64位系统呢, 对应地, 64位系统的内存地址是64位的二进制数,0000 …64个0 ~ 1111 …64个1, 用十六进表示就是从Ox0000000000000000 ~ OxFFFFFFFFFFFFFFFF , 每个地址的长度比32位的长度多1倍! 而64位系统总共有多少个地址?
    2^64 = 2^34 * 2^10(G) * 2^10(M) * 2^10(K) 也就是17179869184 G(4G × 4G)个地址,也就是说理论上64位系统配上64位cpu理论上支持17多亿GB的内存, 当然这个只是理论, 实际上现在的普通电脑主板能支持16GB都不错了。
    7. 关于指针
    指针是用来存放内存地址的, 那么对于32位系统来讲, 内存地址是1个32位长度的2进制数, 而每1 个内存单位长度只有1byte = 8bit(位), 所以1个指针 就需要4byte的内存来存放该指针的内容(1个内存地址) 。所以 我们定义1个指针 int *p; 然后求sizeof§ 是返回4的, 4字节。而对于64位系统来讲, 内存地址是64位的2进制数, 所以sizof§就返回8了, 共需要8个内存单位去存放 64位系统的1个指针!

    二、Linux基础入门

    (一)Linux远程链接

    我们安装的Linux服务器都是在VMware中运行,不知道大家有没有觉得不方便,每次需要Ctrl+Alt切换到真机,在我们今后的工作中,我们的服务器都是在企业自己的机房,而且连接服务器数量会很多,我们需要通过一定的工具来帮助我们连接服务器。
    常见的ssh工具有SecureCRT,Xshell,MobaXterm等。
    这里我们以Xshell为例,官网上不是免费的,可以到网上下载破解版,下载好后直接安装,没有什么特殊要求,傻瓜式安装。
    1.下载好后打开是这样的:

    2.我们在VMWARE中打开打开自己的虚拟机登陆进去后执行 ip a 命令,查看自己的ip。
    如果网卡没配置好,参照上篇博客。

    3.在Xshell中输入命令 ssh 192.168.126.4(这里就是上面提到所要连接的虚拟机的ip地址),回车执行。如下:
    注意:我们的虚拟机要全程处于开机状态,不能关闭。
    4.接下来我们输入所要连接虚拟机的用户名(也就是自己在登陆虚拟机时输入的用户名,这里以root用户为例),输入好后点击【确定】。这时会弹出一个窗口,输入登录该用户时的密码后,点击【确定】。


    登陆成功,如下:

    下面我们就可以很方便的输入命令进行各种操作了。

    注:如果我们以普通用户身份连接,可以采用如下方式进行连接:
    在Xshell中输入 ssh 普通用户名@ip地址 回车执行(我们这里以用户dxk为例) ,如下:

    而后会弹出输入密码窗口,输入密码点击【确定】,即可登录。

    登陆成功:

    (二) Linux bash初识


    Shell的介绍
    通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备共同组成的,而能够让机箱内各种 硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内核对计算机正常稳定的运行来讲可真的是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于“系统调用接口”开发出的程序/服务来管理计算机,这样一层层环环相扣来满足咱们的日常工作需要,如上图所示。
    Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核 去执行。
    实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程 语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比 如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
    我们可以使用SHELL实现对Linux系统的大部分管理例如: 文件管理、用户管理、权限管理、磁盘管理、软件管理、网络管理……
    shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种

    • Bourne SHell(sh)

    • Bourne Again SHell(bash)

    • C SHell(csh)

    • KornSHell(ksh)

    • zsh
      各个shell的功能都差不太多,在某些语法的表达方面有些区别,Linux预设就是bash。这里主要介绍bash
      bash
      bash命令是sh命令的超集大多数sh脚本都可以在bash下运行,bash主要有如下这些功能
      bash功能

    • 记录历史命令:bash可以记录曾经的命令,保持在~/.bash_history文件中,只保存上次注销登录之后的命令

    • tab键自动补全:使用tab见可以自动补全命令或者目录

    • alias命令别名:可以使用alias ll='ls -al’来设置命令的别名

    • 工作控制:可以将某些任务放在后台去运行

    • 程序脚本:可以执行shell脚本文件

    • 通配符:在查找相关文件或者执行相关命令时,可以使用通配符

    • 内建命令type:可以使用type 命令来查看某个命令是否为内建在bash当中的命令
      bash变量
      bash中变量有两种,分别是环境变量和自定义变量,可以理解为全局变量和局部变量,在理解他们的区别前,需要知道副程序和子程序。举个例子,当前的bash我们称之为父程序,而在这个bash下执行的任何程序,都称之为子程序。那全局变量和局部变量的区别就是,全局变量在子程序中仍然有效,局部变量只在当前程序中生效。(注意,一旦退出父程序这个bash的话,无论是全局变量还是局部变量都失效了,再次打开bash时,该变量是不存在的)
      变量的设定
      变量的设定有几个规则,这里列举如下:

    • 设定变量通过=来链接,例如name=myCSDN,两边不能有空格,如果有空格的话,需要用引号

    • 变量名只能是英文名和数字,只能是英文开头

    • 如果变量内容被引号扩起来的话,双引号和单引号是有区别的

    • 双引号里面的特殊字符,会保持原有的特性。

    • 单引号里面的特殊字符,只会是字符

    • 使用 \ 将特殊字符转换为一般字符

    • 使用 “ 这个符号扩起来的命令会先计算这个命令里面的内容,这个指令等价于$()

      变量的查看
      查看单个命令的内容,可以使用echo命令,使用echo $变量名就可以查看变量内容,另外如果要查看所有变量有3个命令,分别是如下几个命令,每个命令又有区别。

    • echo $变量名:用于显示指定变量

    • env:用来查询环境变量

    • set:显示shell变量,包括私有变量与用户变量,不同的shell有不同的私有变量,在shell中设置变量之后,可以通过set查到

    • export:显示当前导出成用户变量的shell变量,也是用来查询环境变量的,shell的私有变量不会出现
      Bash shell的操作环境
      在shell中设置的变量,无论是环境变量还是自定义变量,在bash中注销登录之后,就失效了。下次登录时,是没有这些变量的,如果想要这些变量永久生效,是需要如下配置文件的,bash在启动时,会读取这个配置文件,来设置当前shell的各种变量。shell分为两种,分别是login shell和nonlogin shell,这里先说login shell;login shell是需要输入用户名和密码的,一般情况下,login shell在登录之后,会去读取两个文件,来设置当前shell的环境变量,分别是

    1. /etc/profile:这个配置文件是默认配置文件,是系统整体的设置
    2. /.bash_profile或者/.bash_login或者~/.profile:这个是用户的自定义设置文件

    说明:shell在读取/etc/profile中的文件之后,会去读取用户自定义的设置文件,按照顺序读取上文中所说的自定义设置文件,只要找到其中任何一个,就不再继续。在用户自定义的配置文件中,都会调用~/.bashrc这个文件,来配置当前的这个shell

    注意:/etc/profile或者~/.bash_profile都是在登录的时候才去读取,如果将自己的一些设置到这些文件之后,一般都需要重新登录一次shell才会生效,也可以使用source这个命令,来读取配置文件的内容到当前的这个shell。

    (三) Linux终端与控制台

    1.终端Terminal
    (1)什么是终端?
    终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括显示器键盘套件,打印机打字机套件等。
    (2)终端的本质。
    其实根本上也就一句话,能接受输入,能显示输出,就这就够了,不管到了什么时代,终端始终扮演着人机接口的角色,所谓Terminal,即机器的边缘!
    只要能提供给计算机输入和输出功能,它就是终端,而与其所在的位置无关
    2.控制台Console
    (1)什么是控制台
    显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
    另外,对于那些专门用来模拟终端设备的程序,我们也可以称之为控制台Console,像gnome-terminal,urxvt,mlterm,xterm等软件,都可以称之为控制台,
    总结:控制台是终端的特例,是终端的真子集,它是虚拟的终端。

    (2)终端与控制台的区分
    物理终端:直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,一般是多台服务器共享一套终端,简称KVM(Keyboard键盘,video显示器,mouse鼠标)

    虚拟终端(tty):附加在物理终端之上,用软件方式虚拟实现,CentOS默认启用6个虚拟终端,可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1–6], 对应的文件是/dev/tty#。 系统默认是有7个虚拟终端(即6个文本模式终端1个图形化模式终端),也可以有多个,需要进行相应的设置。
    可以通过tty命令来查看当前的虚拟终端号。tty是teletype writer的简称。

    虚拟终端之间没有区别,是为了方便用户登录而设计的,比如:你用某个用户使用tty1登录,可以用另一个用户使用tty2登录。也可以使用同一个用户在不同的虚拟终端之间来回切换 进行其他操作。
    切记,在用远程连接工具中不能切换,只能在vmware中打开虚拟机使用Alt+CtrlF[1–6]快捷键进行切换。

    图形模式终端快捷键:
    CentOS 6:Ctrl+Alt+F7
    CentOS 7:在哪个虚拟终端启动,即图形化虚拟终端位于当前终端,一般在第一个终端。其余6个为文本模式虚拟终端;

    伪终端(pty):两种应用场景,

    • 第一在图形界面下打开的命令行接口,我们经常使用Ctrl+Alt+T打开的那个实际上就是一个 伪终端
    • 第二基于ssh协议或telnet协议等远程打开的命令行界面,是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。
      用Xshell远程连接虚拟机后,输入tty命令,则显示:

      如果通过远程连接工具多窗口连接同一个虚拟机,则每个窗口对应一个伪终端,所以伪终端可以有多个不受限制。

    串行终端ttyS:与机器的串口对应,每一个串口对应一个串行终端,串口对应的是物理终端。在当前终端再运行下一个终端

    区别当前系统是哪种终端:
    使用命令tty,表示当前终端对应的设备文件,(以下井号表示数字)
    
    1、结果显示:/dev/pts/#  表示伪终端
    2、结果显示:/dev/tty#   表示虚拟终端
    3、结果显示:/dev/console 表示物理终端(控制台)
    4、结果显示:/dev/ttys#  表示串行终端

    同一用户登入系统,对应着不同体系/设备,属于不同进程下的用户,有设备就有对应的设备文件。
    命令:who 查看系统登入的所有用户及其信息。

    (四) 命令行及命令提示符

    Linux命令行即非图形化界面的模式,我们称之为命令行模式,也称为文本模式。由于在命令行模式下,所有的显示都是以代码显示的,要理解命令行模式,首先要知道命令提示符。
    命令提示符是指再操作系统中,提示进行命令输入的一种工作提示符。
    在我们启动系统后会进入到一个登陆界面:

    上面的内容:
    1、CentOS Linux 7 (Core)
    显示当前Linux的名称(CentOS)与版本(7)
    2、Kernel 3.10.0-1127.e17.x86_64 on an x86_64
    显示LInux核心的版本( 3.10.0-1127.e17.x86_64),并且运行在 x86_64系统上
    3、admin login:root
    amin 是主机名,我们使用root账号来登录,root用户在Linux系统中代表无穷的权利。
    4、Passwd
    这一行是在输入root敲回车后才会出现,而且输入密码时不会有任何显示,所以不要以为自己键盘坏了。
    5、Last login:Thu Ju1 2 11:03:37 from 192.168.126.1
    在输入正确密码登录后,系统会显示上一次的登录信息
    6、[root@admin ~]#
    这一行是正确登录之后显示出来的命令行模式,在[]内,最左边的root表示当前登录用户,@之后的admin是主机名,最右侧的~指的是当前用户所在的目录,#则是我们讲的命令提示符
    以上内容中前两行内容来源于/etc/issue文件

    根目录与家目录的理解:
    ①~ 代表是home目录,也就是家目录, / 代表的是根目录
    ②用户登录后在家目录可用pwd命令查看,普通用户为 /home/用户名,root用户为/root
    ③根目录是在最顶端的目录(因为已经不能cd…到上一级目录了 )
    ④根目录是所有用户的都可以操作的,家目录用户才有权限操作(管理员可以分配权限)

    在LInux系统中,命令提示符有两种
    [root@admin ~]# ------->root用户提示符
    [dxk@admin ~]$ ------->普通用户提示符
    在上面讲的第6条中[root@admin ~]内容是可以自定义显示的:

    []中的内容是由环境变量$PS1来控制的
    PS1的相关选项参数如下:
    \d :#代表日期,格式为weekday month date,例如:“Mon Aug 1”
    \H :#完整的主机名称
    \h :#仅取主机的第一个名字
    \t :#显示时间为24小时格式,如:HH:MM:SS
    \T :#显示时间为12小时格式
    \A :#显示时间为24小时格式:HH:MM
    \u :#当前用户的账号名称
    \v :#BASH的版本信息
    \w :#完整的工作目录名称
    \W :#利用basename取得工作目录名称,所以只会列出最后一个目录
    # :#下达的第几个命令
    $ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$
    #可以根据自己的需要去自定义修改
    例如:添加显示时间,命令为:[dxk@admin ~]#PS1="[\u@\h \t \W]$" 执行后:

    需要什么样的格式,根据上面的参数对照进行相应的设置即可(参数位置也可以改变)

    注意:普通用户和root用户均可以以此方式修改提示符格式,但是这样只是临时性的修改,当用户退出后就会失效。
    若想永久保存这种格式则需要把设置的命令写入到环境变量文件中

    环境变量文件加载顺序:
    /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc]

    下面我们将根据需要的命令提示符格式将PS1变量写入环境变量文件~/.bashrc 中:
    ①在我们当前目录~(家目录)下,执行命令 ls -a,找到环境变量文件.bashrc

    ②安装vim编辑器,在当前虚拟机上以root身份登陆并执行命令yum install vim -y (如果已安装过则跳过该步)


    ③安装完毕后,则接着登录到步骤一用户中,执行命令vim .bashrc

    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi
    
    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=
    
    # User specific aliases and functions
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ".bashrc" 11L, 231C

    ④将PS1变量写入此文件中并保存退出

    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi
    
    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=
    
    # User specific aliases and function
    
    PS1="[\u@\h \t \W]\$"
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    :wq

    ⑤执行命令source .bashrc 加载.bashrc文件

    [dxk@admin ~]$ source .bashrc
    [dxk@admin 16:27:37 ~]$

    这样就配置好了,即使退出也不会失效。

    (五)bash的个性化设置

    PS1中常用的颜色格式为:[\e[F;Bm],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47
    颜色如下:
    0 重新设置属性到缺省设置
    1 设置粗体
    2 设置一半亮度(模拟彩色显示器的颜色)
    4 设置下划线(模拟彩色显示器的颜色)
    5 设置闪烁
    7 设置反向图象
    22 设置一般密度
    24 关闭下划线
    25 关闭闪烁
    27 关闭反向图象
    30 设置黑色前景
    31 设置红色前景
    32 设置绿色前景
    33 设置黄色前景
    34 设置蓝色前景
    35 设置紫色前景
    36 设置青色前景
    37 设置白色前景
    38 在缺省的前景颜色上设置下划线
    39 在缺省的前景颜色上关闭下划线
    40 设置黑色背景
    41 设置红色背景
    42 设置绿色背景
    43 设置黄色背景
    44 设置蓝色背景
    45 设置紫色背景
    46 设置青色背景
    47 设置白色背景
    49 设置缺省黑色背景
    1.这里我们设置字体颜色为红色,背景颜色为绿色:
    将PS1="[[\e[31;42m] \u@\h \t \W]$"写入到家目录下的 .bashrc 中去(方法同上)

    2.假设现在我们有这样的需求,如果要区分开root用户和普通用户(即要求root用户登陆的时候命令行的显示格式和普通用户登陆的时候不相同,则需要怎么怎么配置呢?)
    环境变量文件加载顺序:
    /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc]
    快捷键:按 Shift键+g键 可以直接定位到文档最后一行,再按 o键 便可直接在下一行进行插入编辑操作。
    这里我们演示如果是root用户则显示格式为:字体颜色为黄色,背景色为紫色,提示符为 > ;如果是非root用户则显示格式为:字体颜色为绿色,背景色为蓝色,提示符为 >>
    ①将命令写入/etc/profile文件内(这里必须是以root身份写入)
    注:这里为什么不和上面一样将PS1写到~/.bashrc文件中,是因为这里的 ~ 表示当前用户的家目录,所以如果继续写道~/.bashrc文件中,那么这个文件只在该用户登陆的时候加载,其他用户登陆的时候不会去加载,所以这里我们需要将变量PS1写入到一个所有用户都会去读取到的一个文件中,就是/etc/profile这个文件了。

    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
    else
    umask 022
    fi
    
    for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
    if [ "${-#*i}" != "$-" ]; then
    . "$i"
    else
    . "$i" >/dev/null
    fi
    fi
    done
    
    unset i
    unset -f pathmunge
    if [ $USER == "root" ]; then
    export PS1="[\[\e[33;45m\]\u@\H \w]> "
    else
    export PS1="[\[\e[32;44m\]\u@\H \w]>> "
    fi
    :wq

    ②加载此文件

    [root@admin ~]# source /etc/profile

    ③显示效果为

    以下是root用户的显示效果:

    以下是非root用户登陆的效果:
    (非root用户登陆进去后建议先执行命令source /etc/profile 进行文件加载)

    3.下面我们将这段命令写入 /etc/profile 文件中,看看效果是什么样的?(如果此文件中有之前配置PS1变量的命令,要么删掉,要么注释掉,以便更好的观察效果)

    if [ $USER == "root" ];then
    PS1='[\[\e[31m\]\u\[\e[m\]@\[\e[33m\]\H \[\e[m\]\w]\$'
    else
    PS1='[\[\e[32m\]\u\[\e[m\]@\[\e[33m\]\H \[\e[m\]\w]\$'
    fi

    执行后结果如下:
    root用户的命令行及命令提示符显示为:

    非root用户的命令行及命令提示符显示为:

    4.再将下面这段命令写入 /etc/profile 文件中,看看效果(同样的如果此文件中有之前配置PS1变量的命令,要么删掉,要么注释掉,以便更好的观察效果)

    if [ $USER == "root" ];then
    PS1='\[\e[35m\]|\#|\[\e[m\][\[\e[31m\]\u\[\e[m\]@\[\e[33m\]\H \[\e[m\]\w]\$'
    else
    PS1='\[\e[35m\]|\#|\[\e[m\][\[\e[32m\]\u\[\e[m\]@\[\e[33m\]\H \[\e[m\]\w]\$'
    fi

    执行后结果如下:
    root用户的命令行及命令提示符显示为:

    非root用户的命令行及命令提示符显示为:

    这时候我们发现,3和4的显示格式差别是:4中对于用户所执行的命令条数可以记录下来。

    综上所述:
    ①我们可以对命令行中各个参数(用户名,主机名,目录,提示符,时间,命令等等)都可以设置很多显示格式,一个参数也可以设置多种属性,各个参数的位置也可以改变。
    ②如果是直接在命令行对变量PS1进行修改的话,一旦退出登陆便会失效。要想永久生效必须写入对应的环境变量配置文件中。这里要注意的是如果是写到对应用户家目录下的
    .bashrc 文件中,则对其他用户是不生效的,因为此文件只属于该用户,其他用户不会加载此文件。
    ③对于环境变量文件的加载顺序/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc]
    (加载顺序最左边先加载)要格外注意,不能搞错顺序,如果在每个环境变量文件中都对变量PS1进行不同的配置,那么最后加载的环境变量文件也就是[/etc/bashrc],文件会覆盖之前所有的PS1变量。

    是不是很有意思呢,想有个性化的设置,快按照以上方法去做吧。

    三、命令初识

    1.tty

    tty命令用于打印标准输入的文件名称(print the file name of the terminal connected to standard input,打印与标准输入连接的终端设备的文件名称)。在Linux系统中,终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写,Teletype是最早出现的一种终端设备,很像电传打字机,是由Teletype公司生产的。在Linux系统中,终端设备非常重要,没有终端设备,系统将无法向用户反馈信息,Linux中包含控制台、串口和伪终端3类终端设备。
    使用示例:
    ①在控制台终端(虚拟终端)上执行tty

    [root@admin ~]# tty
    /dev/tty1

    ②在伪终端上执行tty

    [root@admin ~]# tty
    /dev/pts/1

    2.pwd

    pwd是Print Working Directory的缩写,其功能是显示当前所在工作目录的全路径。主要用在当不确定当前所在位置时,通过pwd来查看当前目录的绝对路径。
    使用示例:

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

    3.用户操作命令

    (1)创建用户命令useradd
    可用来建立用户账号,账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中,使用权限是超级用户

    useradd 用户名       #创建新用户
    passwd 用户名		#给这个新用户设置密码

    同样,在超级身份权限下可以使用passwd命令给用户修改密码。
    注意:创建好的用户如果没有设置密码,这个用户是不能登录的,需要使用passwd命令修改密码。密码中不能包含用户名,且输入密码的时候屏幕不会有任何显示,需要输入两次。
    使用示例

    [root@admin ~]# useradd Bob
    [root@admin ~]# passwd Bob
    更改用户 Bob 的密码 。
    新的 密码:
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。

    (2)删除用户命令userdel
    ①只删除用户:
    userdel 用户名

    ② 删除用户的时, 连同用户在/home下的主目录一块删除:
    #userdel -r 用户名
    注意 : 如果创建时, 主目录已经存在,即主目录不属于当前要删除的用户,则无法删除主目录

    (3) 用户切换和退出系统
    ① 切换用户命令(su是switch user的缩写,表示用户切换)
    su 用户名

    ②退出系统

    [dxk@admin ~]$ exit

    说明: 还有其他退出系统的方法,但上面一种是最安全的。

    4.关机重启命令

    (1)关机shutdown
    shutdown命令安全地将系统关机。
    立刻关机 shutdown -h now

    [dxk@admin ~]$ shutdown -h now

    (2)重启reboot
    reboot命令用来重新启动正在运行的Linux操作系统。

    [dxk@admin ~]$ reboot

    5.echo命令

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

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

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

    ②输出指定字符串

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

    6.vim编辑器

    vim是一个富文本编辑器,是vi编辑器的扩展版本,它可以用来编辑各种文本,尤其是能编辑程序,它和vi相比有很多的优点,可以多次撤销,可以同时打开多个 窗口进行编辑,语法高亮,命令行编辑,在线帮助,可视化选择,等等
    vim 文件名
    用法基本和vi类似

    7.ls 命令

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

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

    8.source命令

    通知当前shell读入路径为filename的文件并依次执行文件中的所有语句。通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

    source filename           # filename必须是可执行的脚本文件

    当我们在/etc/profile文件中配置了环境变量$PS1后,需要使之立即生效,需要使用到:

    [dxk@admin ~]$ source /etc/profile

    9.yum 命令

    yum是一个基于rpm的包管理工具,很多时候,方便我们去安装和删除一些软件,不必像安装源码包那样繁琐,有时候还要解决安装的依赖等。

    用法:
    yum  install    软件名称             #安装软件

    安装vim编辑器:

    [root@admin ~]# yum install vim

    注意:①yum命令只有超级用户可以使用。普通用户的话,必须要赋给用户sudo执行yum的root权限。
    ②要想使用yum命令正常安装软件包必须正确的配置网卡,并使之能连上internet。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: