linux基础(一)— linux基础知识

linux 概述

什么是linux系统

Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

linux的优势所在

  • 安全性能高,并且开源
  • 操作方式主流为命令行模式,但也支持图形化界面+事件的模式(不常用)
  • 具有跨平台性能,对硬件要求相较其他操作系统低很多
  • 应用场景为主流的服务器

linux是类Unix系统

什么是开源

开源,即开放源代码;用户可以免费的使用它并且可以获得它的源代码,更为重要的是可以根据自己的需要对它进行必要的修改,无偿使用,无约束地继续传播。开源是一种“共享的”、“免费的”、“可革新”的软件模式。

linux 基本结构

如图所示:Linux 系统可以简单的抽象分为 Linux 操作系统(linux内核)、 Shell 层(命令解释执行层)和应用层。

在这里插入图片描述

  1. 内核层
    内核层是 Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。

  2. Shell层
    Shell 层是与用户直接交互的界面,同时也是和linux系统内核相连接。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作。事实上,Shell本质上就是应用程序,但是它和系统内核直接相交互,而其他用户程序则和Shell脚本交互,是一种内核和用户程序之间的纽带。

  3. 应用层
    应用层提供基于 X Window 协议的图形环境。X Window 协议定义了一个系统所必须具备的功能(就如同 TCP/IP 是一个协议,定义软件所应具备的功能),可系统能满足此协议及符合 X 协会其他的规范,便可称为 X Window。值得注意的是,绝大部分linux用户都不选择安装X Window图像界面,占内存,功能低,是linux作为服务器来说吃力不讨好的那种情况。

Linux 开机启动过程

  1. 主机加电自检,加载 BIOS 硬件信息。
  2. 读取 MBR 的引导文件(GRUB、LILO)。
  3. 引导 Linux 内核。
  4. 运行第一个进程 init (进程号永远为 1 )。
  5. 进入相应的运行级别。
  6. 运行终端,输入用户名和密码。
  • 备注:
    1)LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。
    2)CUI即命令行界面,通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
    3)GUI,即图形用户界面,是指允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务,也就是采用图形方式显示的计算机操作用户界面。

磁盘、目录、文件

linux 一切皆文件

在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。

也就是说在 Linux 系统中有一个重要的概念**:一切都是文件**。其实这是 Linux 继承 Unix 哲学的一个体现,在 Unix 系统中,把一切资源都看作是文件,包括硬件设备。Unix 系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。

linux 基本文件类型分类如下图所示
在这里插入图片描述

linux 的目录结构是什么样的?

linux 目录结构层次分明,如图所示
常见目录说明:
/bin: 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
/etc: 存放系统管理和配置文件;
/home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
**/usr **: 用于存放系统应用程序;
/opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把jdk、tomcat等都安装到这里;
/proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
/root: 超级用户(系统管理员)的主目录(特权阶级o);
/sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
/dev: 用于存放设备文件;
/mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
/boot: 存放用于系统引导时使用的各种文件;
**/lib **: 存放着和系统运行相关的库文件 ;
/tmp: 用于存放各种临时文件,是公用的临时文件存储点;
/var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
/lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。

block和inode

block,简单来说,就是linux系统读取硬盘的内存中缓存区域的一块区域,值得注意的是,block,是linux系统规定内存每次读取最小的内存单位,大小为4KB;它是由8个linux硬盘规定的每次储存最小单元“扇区”( sector)这么大,也就是说每个扇区储存512字节,其实这两个是非常重要的概念,贯穿整个硬件和内存。
inode是索引节点。是linux文件或目录物理存储位置的体现,它具备基本索引所有的特点,包括检索快、相同文件唯一性等特点。

硬链接和软链接

首先,先不谈硬链接和软链接是什么,我们按照以下代码去创建:

#创建原文件
touch test check

#创建硬链接
ln /root/test /tmp/a-hard

#创建软链接
ln -s /root/check /tmp/check-soft

硬链接的原理如下图所示,硬链接和原文件读写的是相同的block块,俺就说明读写硬链接事实上就是读取原文件;**硬链接相当于一个原文件的备用可替换文件,**只要两者存在一个,就能够实现原文件的功能。对其增删改查,事实上就是操作原文件,但是值得注意的是删除原文件,硬链接的内容还是可以读取的,这是因为inode还是存在的,这是容易忽略的。
在这里插入图片描述

软链接的原理如下图所示,软链接和原文件的读写本质上都是相同的inode,但是内存缓存区的块不一样,但是软链接的块是读取原文件的,可以这样理解软链接的块是原文件块的硬链接。软链接相当于一个快捷方式,对其增改查,事实上就是操作原文件,但是删除,却不是删除原文件,而是删除自己;软链接直接依赖原文件的存在而存在。
在这里插入图片描述
硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和原文件的 inode 号是一致的;而软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的。硬链接不可以跨分区,软件链可以跨分区。删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。

Shell

BASH和DOS之间的基本区别是什么?

BASH命令区分大小写,而DOS命令则不区分;
在BASH下,/是目录分隔符,\作为转义字符。在DOS下,/用作命令参数分隔符,\是目录分隔符
DOS遵循命名文件中的约定,即8个字符的文件名后跟一个点,扩展名为3个字符。BASH没有遵循这样的惯例。

Shell 简介

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 脚本是一门边解释边执行的弱语言机制的编程语言,因其简单、易用、高效,所以说它是大多数linux命令行命令的首选语言。

运行shell脚本的方式

#方法一:shell脚本的第一行必须声明:#!/bin/bash
#创建shell 脚本
touch text.sh
chmod u+x text.sh
#执行shell脚本(当前目录下)
./text.sh

#方法二:使用/bin/bash的解释器执行
#执行shell脚本
bash text.sh

# 方法三:当前进程运行shell脚本(可以忽略脚本的权限,可以不是可执行文件)
#执行shell脚本
source text.sh

Shell 变量

Shell 中变量的值都是以字符串的形式进行存储的,shell变量和其他弱语言机制一样无需声明,直接使用;过程中无类型限制。
shell变量赋值的时候“=“”两侧不能有空格。原因是shell中一切皆字符串的原因,空格也会被当做为字符串的一部分。

分类

在这里插入图片描述

单引号‘’、双引号“”和反引号``的区别

单引号‘’:字符串常量;任何字符都会原样输出,在其中使用变量包括转义符都是无效的。

双引号“”:模板字符串;变量会被解析,转义符会生效。

反引号``:命令表达式,只能放linux命令。相当于$(…)

字符串和数组常用方法(了解)

事实上shell脚本主要是用来执行linux命令的,而其也提供了一些字符串和数组的方法,但这些方法对于使用命令来说,基本上不用。

字符串 str=”…”
1.	获取字符串的长度 ${#str}
2.	字符串拼接
	a)	$str1$str2		中间不能有空格
	b)$str1 $str2” 	中间有空格
	c)	$str1”-”$str2	中间可以有其他字符串
	d)	str4="$name: $url" #这样写也可以
	e)	str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
3.	字符串截取:${string: start [:length]}	从0开始,包括start,截取长度为length
4.	反向截取字符串:${string: 0-start [:length]}	从1开始,包括start
5.	从指定字符串开始截取(左边开始)
	a)	${string#[*]chars}:*为通配符,chars不包括,第一次出现开始截取
	b)	${string##*chars}:*为通配符,chars不包括,最后一次出现开始截取
6.	从指定字符串开始反向截取(右边开始)
	a)	${string%chars*}
	b)	${string%%chars*}


数组		
1.	声明:
	a)	array_name=(ele1  ele2  ele3 ... elen)		#数组类型可以不相同
	b)	array_name=([3]=24 [5]=19 [10]=12)		#指定数组下标声明
2.	array_name[n]=…		赋值
3.	获取数组元素	
	a)	${nums[*]}或者${nums[@]}		#获取数组所有元素
	b)	${array_name[index]}		#index从0开始
4.	数组长度		${#array_name[@]}或者${#array_name[*]}	#元素的个数,和下标无关
5.	删除数组元素:unset array_name[index]		
6.	删除数组:unset array_name 
7.	数组的拼接		
array_new=(${array1[@]}  ${array2[@]})
array_new=(${array1[*]}  ${array2[*]})


备注:[]代表可选操作

Shell 表达式

算术表达式

  1. $((EXP)): 使用变量时不用加 前 缀 , ( ( ) ) 会 自 动 解 析 变 量 名 。 前缀,(( )) 会自动解析变量名。 (())为 获取表达式的值 ,当表达式有多个结果时以最后一个表达式的结果作为整个(())命令的执行结果。

  2. $[EXP]: EXP为表达式。

  3. expr EXP :分布计算。注意:*表示乘法,其他相同,运算符前后必须加空格
    例如:S=expr 2 \* 3

  4. let简单表达式

条件表达式

Shell 条件表达式的结果是0(true)和1(false),这一点和其他语言不一样。
关于条件表达式shell有三种表达式,但是最常用的就是[ condition ](两边均有空格),其他不常用,不做介绍。值得注意的是条件表达式中的算术运算符要被“-eq -ne -gt -lt -ge -le”它们所替代,逻辑运算符“&& || !”被“-a -o !”取代。有的时候也可以用(())来取代,它支持所有的以上运算符。

输出输入重定向

之前看到的3张表,我觉得很详细,于是先借用它们来说:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上述三张表已经非常清晰的解释了shell 编程的输入和输出重定向了。我主要说一下linux中最常用的三种输出重定向。

  1. nohup bash xxx.sh [PARAMS] >file 2>&1 & 所有信息输出到file
  2. nohup bash xxx.sh [PARAMS] >file1 2>file2 & 正常file1 异常file2
  3. nohup bash xxx.sh [PARAMS] >/dev/null 2>&1 & 所有信息不输出(远程)

这三种是我们最常用的输出重定向,主要用于我们使用shell脚本去启动我们的应用程序,比如说elasticsearch,我们并不想在控制台去看他的正常和提示信息,因为提示信息太长,这时候我们就需要将输出的这些信息记录在日志文件中,方便我们去查看信息。此外,下面也是我们常用的结束后台运行的命令:

  • Ctrl+z 暂停挂在后台 ctl+d(EOF,退出shell脚本) ctl+c(中断进程退出)
  • fg命令重新启动前台被中断的任务(可以继续挂起),bg命令把被中断的任务放在后台执行(不能再挂起)
  • jobs 显示当前所有后台运行命令
  • jobs -l 显示所有后台运行命令状态:PID,STATE(running,stopped,terminated),被kill的后台命令将被从jobs 列表中剔除。

循环跳转语句

  1. continue[n]:n表示跳出第几层的本次循环,默认为当前循环
  2. break[n]:n表示跳出到第几层循环,默认为当前循环
  3. return n:n表示方法执行的状态
  4. exit n:n程序结束的状态:0表示支持结束
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值