LINUX学习手册

本文详细介绍了Linux系统的基础知识,包括文件系统、常用命令、分区管理、文件系统类型、Shell脚本编程等内容。重点讲解了如何创建、挂载、管理分区,以及如何使用Bash进行文件处理、权限管理、脚本编写等操作。此外,还讨论了Linux中的NTFS文件系统支持和Shell的基本功能,如历史命令、别名、输入输出重定向等。

目录

一、Linux系统简介

Linux各个文件的用途

三、Linux常用命令

1、目录文件处理命令

2、权限管理命令

八、文件系统管理

1、分区与文件系统

2、文件系统常用命令

3、文件挂载

4、NTFS文件系统

5、fdisk手动分区

6、分区自动挂载与fstab文件修复

7、新建swap分区

九、Shell基础与编程

(一)Shell简介

(二)Shell的脚本执行方式

1、echo输出命令        

2、脚本程序编写

3、脚本执行方式

(三)Bash的基本功能

1、历史命令与命令补全

2、命令别名与快捷键

3、输入输出重定向

4、多命令顺序执行与管道符

5、通配符与其它特殊符号

(四)Bash变量

1、Bash变量简介

2、用户自定义变量(本地变量)


一、Linux系统简介

Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移走,使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。

Linux的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令硬件软件设备、操作系统进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。同时这也是Linux与Windows的区别。

Linux的另一个特点是完全免费,但这种说法更的是指的Linux内核,而市面上使用的Linux发行版本是由不同厂商拿到Linux内核后进行二次开发的版本,并不是全部的发行版本都是免费的。

Linux主要的发行版本有:

 

 其中redhat(红帽子)就不是免费的,而CentOS就是一个完全免费的Linux发行版本。ubuntu更多的应用在嵌入式Linux领域,CentOS广泛应用在服务器领域。

对于新手学习,可以选择一个免费的Linux发行版本,不管是哪种发行版本,它使用的Linux内核都是一样的,只要学会了Linux的内核,市面上任何发行版本,都可以很快上手使用!

Linux各个文件的用途

根目录下的文件

根目录,包含了几乎所的文件目录。
/boot该目录默认下存放的是Linux的启动文件和内核
/bin该目录中存放Linux的常用命令
/sbin该目录用来存放系统管理员使用的管理程序
/var该目录存放那些经常被修改的文件,包括各种日志、数据文件
/etc该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。
/dev该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目录没有区别。
/mnt临时将别的文件系统挂在该目录下。
/root超级用户的家目录。
/home普通用户的家目录
/usr用户的应用程序和文件几乎都存放在该目录下。
/lib该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库。
/opt第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的,但如果你一旦把它删除了,以后在安装此类软件时就有可能碰到麻烦。
/tmp用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。
/proc可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里。
/misc可以让多用户堆积和临时转移自己的文件。
/lost+found该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
/media挂载的媒体设备目录

Linux中文件颜色的含义:蓝色为文件夹,绿色为可执行文件,浅蓝色为链接文件,红框文件是加了SUI权限的文件,红色为压缩文件,褐色为设备文件。

/etc目录下的文件(学习过程中遇到的)

/etc/passwd用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其
他信息。
/etc/group用户组数据库,包括组的各种数据。
/etc/shadow用户的密码库,存放用户的密码信息

三、Linux常用命令

1、目录文件处理命令

ls 显示目录文件 

        -a 显示所有文件,包括隐藏文件(隐藏文件前面带有“.”) -l 详细信息显示 -d 查看目录属性 -ld 以详细信息显示的方式查看目录属性

mkdir 创建新目录 

        -p 递归创建   mkdir默认只能在已经存在的目录中创建新目录,而加上-p选项 递归创建目录,就可以实现在每一级都自动创建目录,知道自己要创建的最终那一级目录。

cd 切换目录

        切换到自己想在的目录, 其中 . 代表当前目录  .. 代表上一级目录  ~ 代表root的家目录

rmdir 删除空目录

pwd 显示当前目录

cp 复制目录文件

       cp [选项] [原文件或目录] [目标目录] 

        -r 复制目录 -p 保留文件属性 -rp 复制目录的同时保留目录属性

mv 剪切文件/给文件改名

        mv [原文件或目录] [目标目录]

        将原文件还剪切到原目录就是改名

touch 创建空文件

cat 显示文件内容

        -n 显示行号

tac 显示文件内容

        与cat显示的内容是相反的,cat是正序,tat就是倒序

more 分页显示文件内容(只能向下翻页)

        空格 / f 翻页     Enter   换行    q或Q 退出

less 分页显示文件内容(可上下翻页)

        less显示的内容还可使用 /关键词 的方式在文件中搜索关键词,并使用 n 切换下一个

head 显示文件前面几行

        -n [数字]  指定显示的行数      不指定的话默认会显示10行内容

tail 显示文件后面几行

        -n [数字]  指定显示的行数     -f 动态显示文件末尾内容  不指定的话默认会显示10行内容

-n [数字]  指定显示的行数      不指定的话默认会显示10行内容

ln 生成链接文件

        ln [选项] [原文件] [目标文件]   -s 生成软链接 不加选项生成硬链接

软连接文件就相当于windows中的快捷方式,硬连接文件相当于对原文件的拷贝+同步更新

硬链接通过i节点识别,硬链接与原文件共用一个i节点

硬链接不能跨分区,不能针对目录使用

2、权限管理命令

八、文件系统管理

1、分区与文件系统

分区类型

主分区:最多只能分四个
扩展分区:只能有一个,也算作主分区的一种 ,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
逻辑分区:逻辑分区是在扩展分区中划分的, 如果是IDE硬盘,Linux最多支持59个逻辑分区 ,如果是SCSI硬盘Linux最多支持11个逻辑分区


每个分区都要有自己的设备文件名/分区号,1、2、3、4这四个分区号只能给主分区或扩展分区使用,而不能给逻辑分区使用。其中sda6中的sd代表SATA硬盘接口,hd代表IDE硬盘接口,abcd代表第几块硬盘,1234代表主分区,5678代表逻辑分区。

分区的设备文件名
主分区1/dev/sda1
主分区2/dev/sda2
主分区3/dev/sda3
扩展分区/dev/sda4
逻辑分区1/dev/sda5
逻辑分区2/dev/sda6
逻辑分区3/dev/sda7

文件系统

Linux是一种兼容性很高的操作系统,支持的文件系统的格式很多,大体可以分为几类:
(1)磁盘文件系统
        指本地主机中实际可以访问到文件系统,或者说可以驻留在磁盘上的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。

        常见文件系统格式有:EXT3、EXT4、VFAT、FAT、FAT16、FAT32、NTFS等;其中,NTFS是Windows目前主流的文件系统,作为电脑磁盘的主要文件系统格式。

  • ext2:是ext文件系统的升级版本,Red Hat Linux7.2版本以前的系统默认都是ext2 文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件(1TB=1024GB=1024*1024KB)
  • ext3: ext3文件系统是ext2文件系统的升 级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性 。支持最大16TB的分区和最大2TB的文件
  • ext4:它是ext3文件系统的升级版。ext4 在性能 、伸缩性和可靠性方面进行了大量改进。它的变化可以说是翻天覆地的,比如向下兼容 EXT3、最大1EB文件系统和16TB文件、无限数 量子目录、Extents连续数据块概念、多块分配 、延迟分配、持久预分配、快速FSCK、日志校 验、无日志模式、在线碎片整理、inode增强、 默认启用barrier等。是CentOS 6.3的默认文件系统(1EB=1024PB=1024*1024TB)

(2)网络文件系统
        指可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见的文件系统格式有:NFS、Samda等;
(3)虚拟文件系统
        指不驻留在磁盘上的文件系统,同时也是比较抽象难以理解的部分,虚拟文件系统(VFS)是物理文件系统(上述的文件系统都属于物理文件系统)与服务应用之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。

2、文件系统常用命令

  • df [选项] [挂载点]  文件系统查看命令
    • -a 显示所有的文件系统信息,包括特殊文件系统,如 /proc、/sysfs
    • -h 使用习惯单位显示容量,如KB,MB或GB等
    • -T 显示文件系统类型
    • -m 以MB为单位显示容量
    • -k 以KB为单位显示容量。默认就是以KB为单位
  • du [选项] [目录或文件名]  统计目录或文件大小
    • -a 显示每个子文件的磁盘占用量。默认只统计 子目录的磁盘占用量
    • -h 使用习惯单位显示磁盘占用量,如KB,MB 或GB等
    • -s 统计总占用量,而不列出子目录和子文件的 占用量

一般不用du统计文件大小,可以直接使用ls -l看到文件有多大,但ls -l 不能统计目录的大小,显示的只是目录下文件名占用了多少空间。

        du命令与df命令的区别

        (1)df命令是从文件系统考虑的,不光要考虑 文件占用的空间,还要统计被命令或程序占用的空间最常见的就是文件已经删除 ,但是程序并没有释放空间)

        (2)du命令是面向文件的,只会计算文件或目录占用的空间。

  • fsck [选项] [分区设备文件名]   文件修复命令
    • -a: 不用显示用户提示,自动修复文件系统
    • -y:自动修复。和-a作用一致,不过有些文件系统只支持-y
  • dumpe2fs [分区设备文件名]  显示磁盘状态

3、文件挂载

        Linux中所有的可存储设备,比如U盘,光盘,移动硬盘都需要挂载之后才能正常使用,只不过硬盘的挂载是系统自动运行,不需要手动挂载。

        挂载就是将设备文件名与挂载点(盘符)联系起来才能通过访问盘符来访问这个硬件设备,将设备与挂载点连接起来的过程就叫做挂载。

挂载命令

  • mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
    • -t 文件系统:加入文件系统类型来指定挂载的类型,如果文件系统是硬盘,分区就写ext3、ext4 ,如果是光盘,就写iso9660
    • -L 卷标名: 挂载指定卷标的分区,而不是安装设备文件名挂载
    • -o 特殊选项:可以指定挂载的额外选项

   mount的一些用法 

  • mount 查询系统中已经挂载的设备
  • mount -l 查询系统中已经挂载的设备并会显示卷标名称
  • mount –a 依据配置文件/etc/fstab的内容,自动挂载

mount中可用的特殊选项:

参数说明
atime/noatime更新访问时间/不更新访问时间。访问分区文件时,是否更新文件 的访问时间,默认为更新
async/sync异步/同步,默认为异步
auto/noauto自动/手动,mount –a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
defaults定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec/noexec 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认 是exec允许
remount 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
rw/ro读写/只读,文件系统挂载时,是否具有读写权限,默认是rw
suid/nosuid具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有
user/nouser允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载 默认是不允许,只有root可以挂载分区
usrquota 写入代表文件系统支持用户磁盘配额,默认不支持
grpquota 写入代表文件系统支持组磁盘配额,默认不支持

挂载光盘

  • 挂载光盘命令
    • mount  /dev/sr0 /mnt/cdrom/
  • 卸载光盘命令
    • umount 设备文件名或挂载点

        示例

/mnt临时将别的文件系统挂在该目录下。

        mkdir /mnt/cdrom/ 建立挂载点
        mount -t iso9660 /dev/cdrom /mnt/cdrom/

挂载U盘

        fdisk –l 查看U盘设备文件名
        mount -t vfat /dev/sdb1 /mnt/usb/
        umount 设备文件名或挂载点(卸载U盘)

        查看U盘设备文件名不能使用远程工具。必须使用Linux本身,U盘与光盘不同,设备名不是固定的,挂载前要先查看正确的文件名。

        这里加上Vfat是指定文件系统,文件系统能够被Linux识别才能挂载访问,fat16分区识别为fat,fat32分区识别为vfat。Linux默认不支持NTFS文件系统。

4、NTFS文件系统

        Linux默认不支持NTFS文件系统,使用NTFS文件系统的移动硬盘是不能挂载使用的,要想在Linux中正确使用NTFS文件系统就需要进行手动挂载。Linux中绝大多数硬件都不需要手工按照驱动,系统会自动的给硬件按照驱动,但我们也可以手工安装驱动。

        在Linux中使用NTFS文件系统有两种方式:

        1、手工安装驱动,手工安装驱动需要内核来识别,我们重新把内核编译一遍,把NTFS驱动加入,就可以使用NTFS文件系统,但内核编译使用很少,并且编译工作量大,一般不使用。

        2、使用第三方插件。使用NTFS-3G插件来获得Linux对NTFS文件系统的支持

使用NTFS-3G插件的方法:

(1)下载NTFS-3G插件

        https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz
(2)使用文件传输软件将压缩包从windows传输到Linux

(3)解压        #tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz

  (4)  进入解压目录        #cd ntfs-3g_ntfsprogs-2013.1.13
  (5)安装NTFS-3G
       编译器准备。没有指定安装目录,安装到默认位置中    #./configure 
       编译               #make 
       编译安装        #make install
   (6)使用NTFS-3G插件挂载
        mount [-t ntfs-3g] [分区设备文件名] [挂载点]        这里文件系统类型固定使用ntfs-3g

5、fdisk手动分区

        我们一般使用fdisk命令手动对硬盘进行分区。使用fdisk命令进行分区的流程如下:

(1)没有空闲硬盘就用虚拟机添加一块新硬盘,虚拟机添加硬盘需要在关机下进行

(2)查看创建的新硬盘

        使用fdisk -l 命令,查询系统中有多少可以被识别的硬盘、U盘。

(3)使用fdisk命令对硬盘进行分区分区
         fdisk /dev/sdb         sdb后面不能加数字 因为此时硬盘还没有分区

fdisk命令执行后是通过交互界面进行分区,交互指令如下:

命令 说明
a设置可引导标记
b编辑bsd磁盘标签
c设置DOS操作系统兼容标记
d删除一个分区
l显示已知的文件系统类型。82为Linux swap分区,83为Linux分区
m显示帮助菜单
n新建分区
o建立空白DOS分区表
p显示分区列表
q不保存退出
s新建空白SUN磁盘标签
t改变一个分区的系统ID
u改变显示记录单位
v验证分区表
w保存退出
x附加功能(仅专家)

(4) 执行fdisk命令后要重启,分区才能有效,如果不想重启可以使用#partprobe命令重新读取分区表信息,但不总是有效,如果无效还是要重启。

(5) 格式化分区

        #mkfs -t ext4 /dev/sdb1

(6) 建立挂载点并挂载

        mkdir /disk1

        mkdir /disk5

        mount /dev/sdb1 /disk1/

        mount /dev/sdb5 /disk5/

注意:使用fdisk命令手工创建的分区在挂在后只是临时挂载,每次重新启动后挂载会失效,都需要手动挂载,若想实现自动挂载,需要将配置写入Linux系统配置文件中。

6、分区自动挂载与fstab文件修复

手动创建分区之后,使用mount命令进行手动挂载,但重启之后挂载会消失,要重新手动挂载。

要实现自动挂载,就是要写入系统配置文件/etc/fstab文件内

因为fstab文件在系统启动中极为重要,我们也要学习一下fstab文件的修复方法

/etc/fstab文件中各个字段的意义:

第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1 代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其 他数字代表检测的优先级,那么当然1的优先级比2高

将分区挂载信息写入/etc/fstab配置文件的步骤:

(1)使用vim编辑器打开/etc/fstab配置文件

(2)按照/etc/fstab配置文件中各个字段的意义,在底部加入要写入的分区挂载信息

(3) 在写入文件之后先不要着急重启,我们可以先用mount -a命令来实现系统自动重新挂载,如果出现错误会提示,不至于系统崩溃。

/etc/fstab文件修复方法
        如果一旦写错了,出现了报错,可以在开机显示之后出现一个让你输入root用户密码的界面,再输入密码之后,可以使用vim /etc/fstab进入fstab文件修改错误,如果出现文件只有只读权限,不能修改,强制保存也不行,退出文件,然后输入命令:mount -o remount,rw / ,重新把根分区挂载读写权限,就可以保存了,

该种fstab文件修复方式只能在根分区没有错误的情况下,在本机登陆,不能使用服务器或者远程连接的情况下才能修复。

7、新建swap分区

        swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。这种“拆东墙,补西墙”的方式应用于几乎所有的操作系统中。

#free        查看内存与swap分区使用状况

                 -m:将内存按MB字节显示


cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程
buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘, 减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程

新建一个swap分区的流程:

(1)#fdisk /dev/sdb                 新建一个分区 
        在fdisk的交互界面中将新建分区的分区ID改为82(82是swap分区对应的ID号)
(2)#mkswap /dev/sdb1         分区完之后需要格式化,这里不能使用mkfs进行格式化

(3)swapon /dev/sdb1            将新建立的分区加入swap分区


  如果不想用了,使用命令取消:swapoff /dev/sdb1 取消swap分区                                                 

swap分区开机自动挂载方法设置
(1)vi /etc/fstab                        打开fstab配置文件
(2)将swap分区的挂载信息输入fstab配置文件中
    注意:swap前面没有/,他不是根分区下的
(3)修改之后使用mount -a 命令来检测错误

九、Shell基础与编程

(一)Shell简介

什么是Shell?

        Shell是一个命令行解释器,它为用户提供 了一个向Linux内核发送请求以便运行程 序的界面系统级程序,用户可以用Shell来 启动、挂起、停止甚至是编写一些程序。
        Shell还是一个功能相当强大的编程语言, 易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

        我们用使用的Linux交互界面就是一个Shell。


Shell的分类

 Bourne Shell:从1979起Unix就开始使用 Bourne Shell,Bourne Shell的主文件名为 sh。

C Shell: C Shell主要在BSD版的Unix系 统中使用,其语法和C语言相类似而得名

Shell的两种主要语法类型有Bourne和C, 这两种语法彼此不兼容。Bourne家族主要 包括sh、ksh、Bash、psh、zsh; C家族主 要包括:csh、tcsh。

Bash: Bash与sh兼容,现在使用的Linux 就是使用Bash作为用户的基本Shell。

查看Linux支持的Shell的方法:
#/etc/shells
会显示:
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
这些都是Linux支持的Shell

(二)Shell的脚本执行方式

1、echo输出命令        

       echo [选项] [输出内容]
                -e: 支持反斜线控制的字符转换

控制字符作用
\\输出\本身
\a输出警告音
\b    退格键,也就是向左删除键
\c    取消输出行末的换行符。和“-n”选项一致
\e    ESCAPE键
\f    换页符
\n    换行符
\r    回车键
\t    制表符,也就是Tab键
\v    垂直制表符
\0nnn    按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh    按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

使用实例:

(1)echo -e “ab\bc”
        输出:ac 删除左侧字符
(2)echo -e "a\tb\tc\nd\te\tf"
        输出:
                a b c   

                d e f                \t是制表符(tab) \n是换行符
(3)echo -e “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
        输出:
                a b c
                d e f                 按照十六进制ASCII码也同样可以输出
(4)echo -e "\e[1;31m abcd \e[0m"
        输出:
                红色的abcd


        固定格式:\e[1 表示开启颜色区别 \e[0m 表示结束颜色区别 31m表示红色

        还有其他:
        30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,       

        37m=白色

2、脚本程序编写

新建脚本文件:#vim hello.sh
脚本文件内容:
#!/bin/Bash
#The first program
#Author: L78


echo -e ‘Hello World!’

注意:

#!/bin/Bash 这一条不能省略,它不是注释,是标识,它代表我以下写的程序是Shell,所有的Shell脚本都要写这样一句话。除了这一句,其他的#内容都是注释了

‘Hello World!’如果要加感叹号就得是单引号,如果没有感叹号才可以是双引号,这感叹号有意义。

3、脚本执行方式

编写好后的Shell脚本文件有两种执行方式:

(1)赋予执行权限,直接运行

        #chmod 755 hello.sh
        #./hello.sh

        所有程序必须用绝对路径或者相对路径执行

(2)通过Bash调用执行脚本
        #bash hello.sh
        bash命令不需要给脚本文件执行权限就可以执行脚本。


如果从Windows里面拷贝一个脚本到Linux 虽然有的时候格式一样但是还是会报错,这便是因为两个系统中脚本的格式不同,比如Windows中的回车在脚本中用^M$表示,而Linux中为$,(可以用cat -A [文件名] 来查询)所以需要转换,此时用到一个命令:dos2unix [文件名],转换后,Linux就可以执行,通过没有这个命令可以使用yum安装。

(三)Bash的基本功能

1、历史命令与命令补全

        #history [选项] [历史命令保存文件]      查看我们输入过的历史命令

                -c: 清空历史命令

                -w: 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

        历史命令默认会保存1000条,可以在环境 变量配置文件/etc/profile中进行修改,找到HISTSIZE=1000进行修改,随意修改到100000条都可以,修改之后重启使配置文件生效

历史命令的调用

(1)使用上、下箭头调用以前的历史命令
(2)使用“!n”重复执行第n条历史命令
(3)使用“!!”重复执行上一条命令
(4)使用“!字串”重复执行最后一条以该字 串开头的命令

        在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全,命令补全功能建议经常使用,好处很多。

2、命令别名与快捷键

        #alias 别名=‘原命令’             设定命令别名
        #alias 查询命令别名

命令执行时顺序

1 第一顺位执行用绝对路径或相对路径执行的命令。
2 第二顺位执行别名。
3 第三顺位执行Bash的内部命令。
4 第四顺位执行按照$PATH环境变量定义的 目录查找顺序找到的第一个命令。

删除别名
#unalias 别名

使命令别名永久生效的方法:
        #vim /root/.bashrc        修改配置文件/root/.bashrc

Bash中常用快捷键

快捷键    作用
ctrl+a    把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移 动到命令行开头时使用。
ctrl+e   把光标移动到命令行结尾。
ctrl+c    强制终止当前的命令。
ctrl+l    清屏,相当于clear命令。
ctrl+u  删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退 格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+k    删除或剪切光标之后的内容。
ctrl+y    粘贴ctrl+U或ctrl+K剪切的内容。
ctrl+r    在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入 搜索内容,就会从历史命令中搜索。
ctrl+d   退出当前终端。
ctrl+z    暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管 理章节详细介绍。
ctrl+s    

暂停屏幕输出

ctrl+q    恢复屏幕输出。

注意:ctrl+z 快捷键一定要谨慎使用,如果使用的多了,系统会占用大量存储空间来存放暂停的数据,用多了系统会变卡!!!

3、输入输出重定向

标准输入输出

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/sdtout1标准输出
显示器/dev/sdterr2标准错误输出

输出重定向
就是改变输出方向,比如由屏幕输出到文件,非常有用

类型 符号 作用
标准输出重定向        命令 > 文件以覆盖的方式,把命令的正确输出输 出到指定的文件或设备当中。
标准输出重定向        命令 >> 文件以追加的方式,把命令的 正确输出输出到指定的文 件或设备当中。
标准错误输出重定向       错误命令 2>文件 以覆盖的方式,把命令的 错误输出输出到指定的文 件或设备当中。
标准错误输出重定向        错误命令 2>>文件以追加的方式,把命令的错误输出输出到指定的文件或设备当中。

在输入报错文件中 2和>>必选连着写,中间不能有空格。

标准错误输出不常用

类型        符号作用
正确输出和错误输出同时保存    命令 > 文件 2>&1   以覆盖的方式,把正确输 出和错误输出都保存到同 一个文件当中。
正确输出和错误输出同时保存        命令 >> 文件 2>&1以追加的方式,把正确输 出和错误输出都保存到同 一个文件当中。
正确输出和错误输出同时保存        命令 &>文件以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存        命令 &>>文件以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存      命令 >> 文件1 2>>文件2  把正确的输出追加到文件1中,把错误的输出追加到文件2中。

#命令 >> 文件 2>&1 ,#命令 &>>文件 两种保存都一样,只不过是格式不同
另一个用法:
#命令 &>/dev/unll 不管命令是否正确,直接丢人这个文件夹,不保存任何数据,在写shell脚本时有用

输入重定向
不通过键盘输入,通过文件输入,在实际中用的不多,用在给源码包打补丁

#wc [选项] [文件名]

        -c 统计字节数
        -w 统计单词数
        -l 统计行数
用法:
       # 命令 < 文件 把文件作为命令的输入
       # 命令 << 标识符 一直输入,直到输入标识停止输入把标识符之间内容作为命令的输入

4、多命令顺序执行与管道符

多命令执行符     格式作用
;命令1 ;命令2多个命令顺序执行,命令之间没有任何逻辑联系,就算第一条报错,第二条也会执行
&&        命令1 && 命令2逻辑与,当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行
||        命令1 || 命令2逻辑或,当命令1 执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行

使用符号,来设定多个命令的执行顺序。

磁盘文件复制:
        #dd if=输入文件 of=输出文件 bs=字节数 count=个数

                        if=输入文件 指定源文件或源设备
                        of=输出文件 指定目标文件或目标设备
                        bs=字节数 指定一次输入/输出多少字节,即把这些字节看做 一个数据块
                        count=个数 指定输入/输出多少个数据块
这条命令可以把系统文件,磁盘都复制了,功能非常强大

使用多命令顺序例子:
#date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date

管道符
        #命令1 | 命令2         命令1的正确输出作为命令2的操作对象
        用单竖杠表示管道符号

5、通配符与其它特殊符号

通配符是用来匹配文件名的。

通配符    作用
?    匹配一个任意字符
*    匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配 一个字符,或者是a,或者是b,或者是c
[-]    匹配中括号中任意一个字符,-代表一个范围。例如:[a-z] 代表匹配一个小写字母
[^]    逻辑非,表示匹配不是中括号内的一个字符。例如:[^0- 9]代表匹配一个不是数字的字符

Bash中的其它特殊符号及用途

符号    作用
‘ ’    单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都 没有特殊含义。
“ ”    双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`” 和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
``    反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。 和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
$()    和反引号作用一样,用来引用系统命令。
#    在Shell脚本中,#开头的行代表注释。
$    用于调用变量的值,如需要调用变量name的值时,需要用$name 的方式得到变量的值。
\    转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 如$将输出“$”符号,而不当做是变量引用。

(四)Bash变量

1、Bash变量简介

(1)变量是什么:
        变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息 时,如一个文件名或是一个数字,就把它 存放在一个变量中。每个变量有一个名字 ,所以很容易引用它。使用变量可以保存 有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

(2)变量设置规则:

  • 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的。
  • 在Bash中,变量的默认类型都是字符串型 ,如果要进行数值运算,则必需指定变量类型为数值型。
  • 默认变量类型全都是字符串型,和其他语言不太一样
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或双引号包括。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 “$变量名”或用${变量名}包含。
  • 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令。
  • 环境变量名建议大写,便于区分。

(3)变量的分类:

  1. 用户自定义变量
  2. 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  3. 位置参数变量:这种变量主要是用来向脚本当 中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  4. 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

2、用户自定义变量(本地变量)

(1)变量定义
                #name=“yang yang”

(2)变量叠加
                #aa=123
                #aa="$aa"456
                #aa=${aa}789

(3)变量调用
               
 #echo $变量名

(4)变量查看
               
#set

(5)变量删除
               
#unset 变量名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值