Linux基础(一)的笔记

前言

文章里的命令选项只是常用的选项,还有更多的选项可自行去学习。
参考视频Linux达人养成计划 I
参考网站菜鸟教程
Linux基础(二)的笔记的地址:Linux基础(二)的笔记

一.Linux简介

1.Linux发展史

20世纪80年代,计算机的操作系统主要有Unix、DOS和MacOS这几种。Unix价格昂贵,不能运行于PC;DOS显得简陋,且源代码被软件厂商严格保密;MacOS是一种专门用于苹果计算机的操作系统。当时在荷兰当教授的美国人AndrewS.Tanenbaum编写了一个操作系统,名为MINIX,为了向学生讲述操作系统内部工作原理。MINIX只是一个用于教学目的的简单操作系统,而不是一个强有力的实用操作系统,然而最大的好处就是公开源代码。全世界学计算机的学生都通过钻研MINIX源代码来了解电脑里运行的MINIX操作系统,芬兰赫尔辛基大学大学二年级的学生Linus Torvalds在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0,至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。

2.介绍

  • Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

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

  • Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

3.Linux的版本

  • 内核版
  • 发行版

4.主要应用领域

  • linux企业服务器
  • 嵌入式应用
  • Android:底层操作系统,Linux

5.Linux与windows的主要区别:

  • linux严格区分大小写
  • linux一切皆文件
  • linux不靠扩展名区分文件类型,靠权限区分
  • windows下的程序不能在linux直接安装和运行
  • windows软件生态比较丰富

6.字符界面的优势

  • 占用系统资源少
  • 减少出错和被攻击的可能性

7.如何解决问题

  • 先要尝试自己解决
    • 帮助
    • 文档
    • 示例
  • 提问的智慧
    • 问题详尽
    • 贴图

8.开源软件

  • 使用的自由:绝大数开源软件免费

  • 研究的自由:可获得软件源代码

  • 散布及改良自由:可以自由传播,改良甚至销售

二.Linux系统的安装

1.Virtualbox

(1)Virtualbox简介:Virtualbox是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统。

(2) Virtualbox主要特点

  • 不需要分区或重新开机就能在同一台PC上使用两种以上的操作系统;
  • 本机系统可以与虚拟机系统网络通信;
  • 可以设定并且修改虚拟机操作系统的硬件环境

(3)建议的Virtualbox配置

  • CUP:建议主频为1GHz以上
  • 内存:建议1GB以上
  • 硬盘:建议分区空闲空间8GB以上

2.系统分区之分区与格式化

(1) 磁盘分区:磁盘分区使用分区编辑器在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区,不同类型的目录与文件可以存储进不同的分区。
(2)分区的作用:把大硬盘分为小的逻辑分区,方便管理和存储数据,有利于数据的安全,节约查找时间。
(3)分区类型

  • 主分区:最多只能有4个
  • 扩展分区:
    • 最多只能有1个
    • 主分区加扩展分区最多有4个
    • 不能写入数据,只能包含逻辑分区
    • 逻辑分区(逻辑分区最多23个)

(4) 分区图
分区图

注意: 这里的分区是MBR格式分区的。如果只有一个主分区,一个扩展分区,扩展分区下有三个逻辑分区。那么主分区的设备文件名为/dev/sda1,扩展分区的设备文件名为/dev/sda2.而逻辑分区直接是/dev/sda5,也就是说系统默认的设备文件名从/dev/sda1~/dev/sda4是给主分区和扩展分区命名的,而逻辑分区的设备文件名是从/dev/sda5开始的。
一、为什么最多只能4个分区?
1.磁盘的第一个扇区共512字节
2.MBR(主引导分区)共446个字节
3.一个磁盘分区表要占16个字节表示分区,最多共64个字节,就是4个分区
4.剩余2个字节存放结束状态

(5)格式化

  • 格式化(高级格式化)又称逻辑格式化,它是指根据用户选定的文件系统(如FAT16、FAT32等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间
  • 作用:是为分区构造操作文件的环境

(6)格式化图格式化图

每个分区按照指定大小分成等大的block
做分区列表管理数据
图里的ID号叫node

3.分区之分区设备文件名与挂载

(1)硬件设备文件名

硬件设备文件名
IDE硬盘/dev/hd[a-d]
SCSI/SATA/USB硬盘/dev/sd[a-p]
光驱/dev/chrom或/dev/hdc
软盘/dev/fd[0-1]
打印机(25针)/dev/1p[0-2]
打印机(USB)/dev/usb/1p[0-15]
鼠标/dev/mouse

(2)挂载

  • 必须分区
    • /(根分区)
    • swap分区(交换分区,内存2倍,不超过2GB)
  • 推荐分区
    • /boot(启动分区,一般200MB,建议稍大点)

4.系统安装

系统安装

5.系统启动过程

系统启动过程

6.系统目录结构

系统目录结构

7.网络配置

Virtualbox的centos7 nat和桥接网络配置

三.命令基本格式以及文件处理命令

1.命令的基本格式以及命令提示符

(1)命令一般格式

命令  [选项] [参数]

(2)命令提示符

[root@centos7 ~]# 

其中:
	root:         当前登录用户
	centos7:      主机名
	~             当前所在目录
	#            超级用户的提示符,普通用户的提示符是$

2.文件目录命令

(1)查询目录中的内容:ls命令

ls [选项] [文件或目录]

	选项:
		-a 显示所有文件,包含隐藏文件
		-l 显示详细信息
		-d 查看目录属性
		-h 人性化显示文件大小
		-i 显示inode
	命令英文全称:list
[root@centos7 ~]# ls -alhi
总用量 68K
33580097 dr-xr-x---.  5 root root  270 6月  13 11:32 .
      64 dr-xr-xr-x. 17 root root  224 6月   6 20:24 ..
33580098 -rw-------.  1 root root 1.3K 6月   6 20:24 anaconda-ks.cfg
33580107 -rw-------.  1 root root  23K 6月  12 23:43 .bash_history
33882096 -rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
33882097 -rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
33882098 -rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
33882099 -rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
37249540 -rw-r--r--   1 root root   32 6月  12 17:32 .gitconfig
33623086 -rw-------.  1 root root   69 6月   8 09:31 .mysql_history
17685645 drwxr-----.  3 root root   19 6月   7 20:39 .pki
33895418 -rw-------   1 root root  202 6月  13 10:58 .rediscli_history
33882100 -rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc
37248811 drwxr-xr-x   2 root root    6 6月  13 11:32 test
 1837058 drwxr-xr-x   2 root root   22 6月  13 11:12 test2
37248836 lrwxrwxrwx   1 root root    4 6月  13 11:32 test.link -> test
37248839 -rw-------   1 root root 6.7K 6月  13 11:12 .viminfo
-rw-r--r--	
-表示文件类型(- 文件 d 目录 l 软连接文件 b 块设备文件 c 字符设备文件 p 管道文件 s:套字节文件)
rw-        r--    r--
u拥有者   g所有组  o其他人

r读 w写   x执行


.文件名  代表隐藏文件,也代表ACL权限

(2)建立目录:mkdir命令

mkdir [选项] [目录名]

选项:
 	-p  递归创建

命令英文全称:make directories

需要创建多级目录时需要加上-p选项
[root@centos7 ~]# mkdir test3

(3)切换所在目录:cd命令

cd [目录]

命令英文全称: change directory

简化操作
cd ~ 进入当前用户的家目录
cd 
cd - 进入上次目录
cd .. 进入上一级目录
cd . 进入当前目录
[root@centos7 /]# cd /etc
[root@centos7 etc]# 
相对路径:参照当前所在目录进行查找
如:[root@centos7 ~]# cd ../usr/local/src/
绝对路径:从根目录开始指定,一级一级递归查找。在任何目录下都能进入指定位置
如:[root@centos7 /]# cd /etc

(4)查询当前所在目录:pwd命令

pwd

命令英文全称:print working directory
[root@centos7 src]# pwd
/usr/local/src

(5)删除空目录:rmdir命令

rmdir [目录名]

命令英文全称:remove empty directories

这个命令只能删除空目录
[root@centos7 ~]# rmdir test3

(6)删除文件或目录:rm命令

rm [选项] [文件名或目录名]

选项:
	-r 删除目录
	-f 强制
	
命令英文全称:remove
	
删除目录需要加上-r选项
删除目录:
[root@centos7 ~]# rm -rf test2
删除文件:
[root@centos7 ~]# rm -f test.link

(7)复制:cp命令

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

选项:
	-r 复制目录
	-p 连带文件属性复制
	-d 若原文件是链接文件,则复制链接属性
	-a 相当 -pdr
	
命令英文全称:copy
复制目录:
[root@centos7 ~]# cp -r test test_cp
复制文件:
[root@centos7 ~]# cp anaconda-ks.cfg  test.cfg

(8)剪切或改名:mv命令

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

命令英文全称:move
[root@centos7 ~]# mv test.cfg test/

(9)链接:ln命令

ln [选项] [原文件] [目标文件]

选项:
	-s 创建软连接

功能描述:生成链接文件

命令英文全称:link
硬链接:
[root@centos7 ~]# ln anaconda-ks.cfg  anaconda-ks.link
软连接:
[root@centos7 test]# ln -s test.cfg test.link

一、硬链接特征:
1.拥有相同的节点和存储block块,可以看做是同一文件;
2.可以通过i节点识别
3.不能跨区
4.不能针对目录使用

二、软连接特征:
1.类似windows快捷方式;
2.软连接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点,并没有实际的文件数据;
3.lrwxrwxrwx l软连接
	软连接文件权限都为rwxrwxrwx
4.修改任意文件,另一个都改变;
5.删除原文件,软连接不能使用	

硬链接图
硬链接图
软链接图
软连接图
(10)创建文件命令:touch命令

 touch [选项] 文件名
 选项:
 	-a:只修改文件的访问时间;
	-c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
	-d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
	-m:只修改文件的数据修改时间。
	-t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm。
[root@jueshadb test]# touch test.txt
[root@jueshadb test]# ll
总用量 16
-rwxr-xr-x  1 root root 1568 6月  27 23:04 1.sh
-rw-r--r--  1 root root  392 7月   4 13:27 crontab
-rwxr-xr-x  1 root root   93 6月  27 23:02 test.sh
-rw-r--r--. 1 root root  261 7月   6 21:22 test.txt
drwxr-xr-x. 2 root root   39 6月  15 20:58 ziptest

四.文件搜索命令

1.文件搜索命令

(1)文件搜索:locate命令

locate [选项] 文件名
在后台数据库中按照文件名搜索,搜索速度更快

/var/lib/mlocate
#locate命令所搜索的后台数据库

updatedb
更新数据库

Centos 默认没有安装locate命令,需要先安装
yum -y install mlocate
#手动更新
updatedb
[root@centos7 test]# locate test
/etc/updatedb.conf配置文件
PRUNE_BIND_MOUNTS = 'yes'
#开启搜索限制
PRUNEFS =
#搜索时,不搜索的文件系统
PRUNENAMES =
#搜索时,不搜索的文件类型
PRUNEPATHS=
#搜索时,不搜索的路径

(2)搜索命令的命令:whereis命令

whereis [选项] 命令名
#搜索命令所在路径以及帮助文档所在位置

选项:
	-b 只查找可执行文件
	-m 只查找帮助文件
[root@centos7 test]# whereis mv
mv: /usr/bin/mv /usr/share/man/man1/mv.1.gz

(3)搜索命令的命令:which命令

which 命令名
#搜索命令所在路径及别名
[root@centos7 test]# which mv
alias mv='mv -i'
	/usr/bin/mv

(4)find命令

find [搜索范围] [搜索条件]
#搜索文件

find / -name install.log
#避免大范围搜索,会非常耗费系统资源
#find是在系统当中搜索符合条件的文件名,如果需要匹配,使用统配符匹配,通配符是完全匹配

Linux中的通配符
* 匹配任意内容
? 匹配任意一个字符
[] 匹配任意一个括号内的字符

find /root -iname install.log
#不区分大小

find /root -user root
#按所有者搜索

find /root -nouser
#查找没有所有者的文件

find /var/log/ -mtime +10
#查找10天前修改的文件
-10 10天内修改文件
10 10天当天修改的文件      |--- +10 ---|10|--- -10 ---|
+10 10天前修改的文件

atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容时间
 
 find . -size 25k
 #查找文件大小是25KB文件,不写单位的话,是按照块(扇区)
 -25k  小于25KB的文件
 25k   等于25KB的文件
 +25k   大于25KB的文件
 
 find . -inum 266666
 #查找I节点是266666的文件
 
 find /etc -size +20k -a -size -20k
 #查找/etc/目录下,大于20KB且小于50KB的文件
 -a  and  逻辑与,两个条件都满足
 -o   or  逻辑或, 两个条件满足一个即可
 
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
#查找/etc/目录下,大于20KB且小于50KB的文件,并且显示详细信息
#-exec/-ok 命令 {} \;对搜索结果执行操作

扇区图
扇区图
(5)搜索字符串命令:grep命令

grep [选项] 字符串 文件名
#在文件当中匹配符合条件的字符串

选项:
	-i 忽略大小写
	-v 排除指定字符串
[root@centos7 ~]# grep pwpolicy anaconda-ks.cfg 
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty

(6)find命令与grep命令的区别

  • find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,匹配符是完全匹配;
  • grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。

五.帮助命令

1.帮助命令

(1)帮助命令:man命令

man 命令
#获取指定命令的帮助

例如:
	man ls
	#查看ls的帮助

	man -f 命令
	相当于 whatis 命令
	#查看命令拥有那个级别的帮助

	man -k 命令
	相当于  apropos 命令
	#查看和命令相关的所有帮助

man查询命令等级及意义

级别意义
1查看命令的帮助
2查看可被内核调用的函数的帮助
3查看函数和函数库的帮助
4查看特殊文件的帮助(主要是/dev目录下的文件)
5查看配置文件的帮助
6查看游戏的帮助
7查看其它杂项的帮助
8查看系统管理员可用命令的帮助
9查看和内核相关文件的帮助
n新文档,可能要移到更适合的领域
o老文档,可能会在一段期限内保留
I本地文档,与本特定系统有关

(2)选项帮助

命令 --help
#获取命令选项的帮助

例如:
ls --help

(3)shell内部命令帮助:help命令

help shell内部命令

例如:
	whereis cd
	#确定是否是shell内部命令 
	help cd 
	#获取内部命令帮助

(4)详细命令帮助:info命令

info 命令
	- 回车: 进入子帮助页面(带有*好标记)
	- u: 进入上层页面
	- n:进入下一个帮助小节
	- p:进入上一个帮助小节
	- q:退出

六.压缩命令

1.压缩命令1

(1).zip格式

zip 压缩文件名 源文件
#压缩文件

zip -r 压缩目录 源目录
#压缩目录

unzip 压缩文件
#解压缩zip文件

(2).gz格式

gzip 源文件
#压缩为gz格式的压缩文件,源文件会消失

gzip -c 源文件 > 压缩文件
#压缩为gz格式,源文件保留
例如:gzip -c anaconda-ks.cfg > anaconda-ks.gz

gzip -r 目录
#压缩目录下所有的子文件,但不能压缩目录

gzip -d 压缩文件
#解压缩文件方式一

gunzip 压缩文件
#解压缩文件方式二

(3).bz2格式

bzip2 源文件
#压缩为bz2格式,不保留源文件

bzip2 -k 源文件
#压缩之后保留源文件

注意:bzip2命令不能压缩目录

bzip2 -d 压缩文件
#解压缩,-k保留压缩文件

bunzip2 压缩文件
#解压缩,-k保留压缩文件

2.压缩命令2

(1)打包命令:tar命令

tar -cvf 打包文件名 源文件

选项:
	-c: 打包
	-v: 显示过程
	-f: 指定打包后的文件名
	
例如:tar -cvf anaconda-ks.tar  anaconda-ks.cfg

tar -xvf 打包文件名

选项:
	-x: 解打包
	
例如:tar -cxf anaconda-ks.tar

(2).tar.gz格式

其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式

tar -zcvf 压缩包名.tar.gz  源文件

选项:
	-z: 压缩为.tar.gz格式
	
tar -zxvf 压缩包名.tar.gz	

选项:
	-x:解压缩.tar.gz格式

(3).tar.bz2压缩格式

tar -jcvf 压缩包名.tar.bz2 源文件

选项:
	-z: 压缩为.tar.bz2格式
	
tar -jxvf 压缩包名.tar.bz2 

选项:
	-x: 解压缩为.tar.bz2格式

七.关机与重启命令

1.关机与重启命令

(1)shutdown命令

shutdown [选项] 时间

选项:
	-c:取消前一个关机命令
	-h:关机
	-r:重启

(2)其他关机命令

halt 

poweroff

init 0

(3)其他重启命令

reboot

init 6

(4)建议

建议使用shutdown命令来关机和重启,在执行之前先执行sync命令把内存的数据同步到硬盘

(5)系统运行级别

级别作用
0关机
1单用户
2不完全多用户,不含NFS服务
3完全多用户
4未分配
5图形界面
6重启
cat /etc/inittab
#查看系统默认运行级别,inittab在使用systemd时不再使用(centos7)

runlevel
#查询系统运行级别

八.其他常用命令

1.挂载命令

(1)查询与自动挂载

mount
#查询系统中已经挂载的设备

mount -a
#依据配置文件/etc/fstab的内容,自动挂载

配置文件/etc/fstab的内容

[root@centos7 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sat Jun  6 20:20:18 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f56802e0-3277-49e6-ad90-9d6377b80f65 /                       xfs     defaults        0 0
UUID=d1a1cc11-64bc-4188-a78a-3d3fb56af5c9 /boot                   xfs     defaults        0 0
UUID=ba609814-ee9f-4a8d-af5e-542644f87961 swap                    swap    defaults        0 0

#说明:
第一列:可以是实际分区名,也可以是实际分区的卷标(Lable)
第二列:挂载点
第三列:文件系统类型
第四列:挂载的特殊选项
第五列:能否被dump备份命令作用
第六列:fsck磁盘检查设置

(2)挂载命令格式

mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点

选项:
	-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3等文件系统
	-o 特殊选项:可以指定挂载的额外选项

特殊选项图
特殊选项图
特殊选项示例

#重新挂载根目录,并使用noexec权限
[root@centos7 ~]# mount -o remount,noexec /
#由于根分区设置了noexec权限
[root@centos7 ~]# vi hello.sh
-bash: /usr/bin/vi: 权限不够

#注意:慎用这些特殊选项,如果用了记得改回来,不然影响系统启动的

(3)挂载光盘

mkdir /mnt/cdrom/
#建立挂载点

mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘方式一

mount  /dev/sr0 /mnt/cdrom/
#挂载光盘方式二

#为什么有两种方式挂载,是因为/dev/cdrom是sr0的软连接
[root@centos7 ~]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 6月  14 11:16 /dev/cdrom -> sr0

(4)卸载命令

umount 设备文件名或挂载点

例如: umount /mnt/cdrom 或 umount /dev/sr0

(5)挂载U盘

fdisk -l
#查看U盘设备文件名

mkdir /mnt/usb/
#建立挂载点

mount -t vfat /dev/sdb1 /mnt/usb/ 
#挂载

(6)用户退出命令

logout
#退出命令

2.用户登录查看命令

(1)查看登录用户信息

w [选项] 用户名

命令输出:
	USER:登录的用户名
	TTY:登录终端
	FROM:从哪个ip地址登录
	LOGIN@:登录时间
	IDLE:用户空闲时间
	JCPU:指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去后台作业时间,但却包括当前正在运行的后台作业所占用的时间
	PCPU:是指当前进程所占用的时间
	WHAT:当前正在运行的命令
who [选项] 用户名

命令输出:
	用户名
	登录终端
	登录时间(登录来源ip地址)

(2)查询当前所有用户的最后一次登录时间

lastlog

#lastlog命令默认是读取/var/log/lastlog文件内容

命令输出:
	用户名
	登录终端
	登录IP
	最后一次登录时间

3.文本处理

(1)连接合并文件内容:cat命令

cat [选项] 文件名
选项:
  -A, --show-all           等于-vET
  -b, --number-nonblank    对非空输出行编号
  -e                       等于-vE
  -E, --show-ends          在每行结束处显示"$"
  -n, --number             对输出的所有行编号
  -s, --squeeze-blank      不输出多行空行
  -t                       与-vT 等价
  -T, --show-tabs          将跳格字符显示为^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

#查看文件内容
[root@jueshadb test]# cat crontab 
* * * * * ping www.baidu.com &>>/dev/null
* 1 * * * ntpdate time.windows.com &>> /dev/null
* hard nofile 65535
* soft nofile 65535
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.t: 没有那个文件或目录

#把crontab文件内容输出到test.txt文件中
[root@jueshadb test]# cat crontab > test.txt
或者
[root@jueshadb test]# cat >  test.txt crontab 


(2)分屏显示文件内容:more命令

more [选项] 文件名

选项:
  -d        显示帮助,而不是响铃
  -f        统计逻辑行数而不是屏幕行数
  -l        抑制换页(form feed)后的暂停
  -p        不滚屏,清屏并显示文本
  -c        不滚屏,显示文本并清理行尾
  -u        抑制下划线
  -s        将多个空行压缩为一行
  -NUM      指定每屏显示的行数为 NUM
  +NUM      从文件第 NUM 行开始显示
  +/STRING  从匹配搜索字符串 STRING 的文件位置开始显示
  -V        输出版本信息并退出

常用操作命令
	Enter 向下n行,需要定义。默认为1行
	Ctrl+F 向下滚动一屏
	空格键 向下滚动一屏
	Ctrl+B 返回上一屏
	= 输出当前行的行号
	:f 输出文件名和当前行的行号
	V 调用vi编辑器
	!命令 调用Shell,并执行命令
	q 退出more
[root@jueshadb ~]# more anaconda-ks.cfg 

(3)显示文件开头的内容:head命令

head [选项] 文件名
选项:
	-q 隐藏文件名
	-v 显示文件名
	-c<数目> 显示的字节数。
	-n<行数> 显示的行数。
[root@jueshadb ~]# head -n 100 anaconda-ks.cfg 

(4)查看文件内容:less命令

less [选项] 文件名
选项:
	-b <缓冲区大小> 设置缓冲区的大小
	-e 当文件显示结束后,自动离开
	-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
	-g 只标志最后搜索的关键词
	-i 忽略搜索时的大小写
	-m 显示类似more命令的百分比
	-N 显示每行的行号
	-o <文件名> 将less 输出的内容在指定文件中保存起来
	-Q 不使用警告音
	-s 显示连续空行为一行
	-S 行过长时间将超出部分舍弃
	-x <数字>"tab"键显示为规定的数字空格
	/字符串:向下搜索"字符串"的功能
	?字符串:向上搜索"字符串"的功能
	n:重复前一个搜索(与 / 或 ? 有关)
	N:反向重复前一个搜索(与 / 或 ? 有关)
	b 向上翻一页
	d 向后翻半页
	h 显示帮助界面
	Q 退出less 命令
	u 向前滚动半页
	y 向前滚动一行	
	空格键 滚动一页
	回车键 滚动一行
	[pagedown]: 向下翻动一页
	[pageup]: 向上翻动一页
[root@jueshadb etc]# less updatedb.conf

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件

(5)显示文件结尾的内容:tail命令

tail [选项] 文件名
选项:
	-f 循环读取
·	-q 不显示处理信息
	-v 显示详细的处理信息
	-c<数目> 显示的字节数
	-n<行数> 显示文件的尾部 n 行内容
	--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
	-q, --quiet, --silent 从不输出给出文件名的首部
	-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
[root@jueshadb etc]# tail -n 100 inittab 

九.Shell基础

1.Shell的概述

(1)Shell的介绍

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

(2)Linux的系统结构
Linux系统结构
(3)shell的分类

  • Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
  • C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
  • Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、psh、zsh;C家族主要包括:csh、tcsh
  • Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell

(4)Linux支持的Shell

[root@centos7 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

2.脚本执行方式

(1)echo 输出命令

echo [选项] [输出内容]

选项:
	-e:支持反斜线控制的字符转换

控制字符

控制字符作用
\a输出警告
\b退格键,也就是向左删除键
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符,其中0为数字零,hh是两位十六进制数
[root@centos7 ~]# echo -e "\e[1;30m 我是测试\e[0m"
 我是测试

#输出颜色
	#30m=黑色,31m=红色,32m=绿色,33m=黄色
	#34m=蓝色,35m=洋红,36m=青色,37m=白色

(2)第一个脚本

[root@centos7 test]# vim hello.sh
#!/bin/bash
#The first program

echo -e "\e[1;30m我是测试 \e[0m"

注意:‘#‘号代表是注释,但是第一行的#!/bin/bash不是注释,是标称我下面写的内容是linux系统的标准脚本,这句话一定不要省略,请小心。

(2)脚本运行

#第一种:赋予执行权限,直接运行
[root@centos7 test]# chmod 755 hello.sh
[root@centos7 test]# ./hello.sh

#第二种:通过Bash调用执行脚本
[root@centos7 test]# bash hello.sh

3.别名与快捷键

(1)别名
查看与设定别名

alias 
#查看系统中所有的命令别名

alias 别名='原命令'
#设定命令别名

别名永久生效与删除别名

vi ~/.bashrc
#写入环境变量配置文件

unalias 别名
#删除别名

命令生效顺序

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

(2)常用快捷键

快捷键作用
ctrl+c强制终止当前命令
ctrl+l清屏
ctrl+a光标移动到命令行首
ctrl+e光标移动到命令行尾
ctrl+u从光标所在位置删除到行首
ctrl+z把命令放入后台
ctrl+f在历史命令中搜索

4.历史命令

(1)历史命令:history命令

history [选项] [历史命令保存文件]

选项:
	-c:清空历史命令
	-w:把缓存中的历史命令写入到历史命令保存文件~./bash_history
	
#历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改

(2)历史命令的调用

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

5.输出重定向

(1)标准输入输出

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

(2)输出重定向

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

(3)输入重定向

wc [选项][文件名]

选项:
	-c:统计字节数
	-w:统计单词数
	-l:统计行数
[root@centos7 ~]# wc -l anaconda-ks.cfg 
49 anaconda-ks.cfg

#注意:wc然后enter,按ctrl+d可以结束
[root@centos7 ~]# wc
asdasdsa
sadasda
sadsad
asdsad
asdsad
      5       5      38

命令<文件把文件作为命令的输入
命令<<标识符
......
标识符把标识符之间内容作为命令的输入

例如:
# <
[root@centos7 ~]# wc  < anaconda-ks.cfg 
  49  123 1278

#<< 标识符,遇到该标识符才结束
[root@centos7 ~]# wc << wcd
> asdasd
> asdsad
> asdsad
> asdsad
> wcd
 4  4 28

6.管道符

(1)多命令顺序执行

多命令格式作用
;命令1;命令2多个命令顺序执行,命令之间没有任何逻辑关系
&&命令1 && 命令2逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
||命令1| | 命令2逻辑或
当命令1执行不正确,则命令2才会执行
当命令1正确执行,则命令2不会执行

(2)管道符

命令格式:
命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
[root@centos7 ~]# ps aux |grep nginx
root       955  0.0  0.0  46744  1464 ?        Ss   11:46   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www        961  0.0  0.1  47280  2204 ?        S    11:46   0:00 nginx: worker process
www        963  0.0  0.1  47280  2204 ?        S    11:46   0:00 nginx: worker process
root      2252  0.0  0.0 112828   976 pts/0    S+   19:45   0:00 grep --color=auto nginx

7.通配符

(1)通配符

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

(2)Bash中其它特殊符号

符号作用
‘’单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义。
“”双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
``反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错 。
$()和反引号作用一样,用来引用系统命令。
#在shell脚本中,#开头的行代表注释。
$用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 。
\转义符,跟在“\”之后的特殊字符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux Linux最早是Linus Torvalds在1991年开始设计开发的, 当时他正是赫尔辛基大学计算机系的学生,刚开始他是在Minix环境下写了一个处理多任务切换的程序,用他自己的话来描述这个程序,Minix是linux的父亲。1991年的夏季,也就是他购买了第一台PC机之后6个月,Linus觉得他还需要从网上下载某些文件,为此他必须读写某个磁盘。于是他又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦你有了任务切换器、文件系统和设备驱动程序之后,你当然就拥有了一个操作系统,或者至少是它的一个内核。linux也就这样诞生了。 多任务 计算机在同一时刻运行多个应用程序的能力。 2.多用户 计算机在同一时刻被多个用户访问的能力。如网络上的服务器必须是多用户的。因为网络上的服务器需要能够同时接受多个用户的同时访问。多用户操作系统最主要的特点是:同一时刻不同的用户访问。4.保护模式在linux下应用软件无法访问系统分配的内存以外的内存区域。如此,一个软件的错误不会造成整个系统的瘫痪。5.POSIX表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更像UNIX)。6.SYSV和BSD扩展 可以理解为和SYSV和BSD源代码级的兼容。简单一点,就是Linux下的应用程序同时也能在这两个系统上运行。 linux具有对多种语言如:C、C++、Java、Tcl/tk、Perl等很多语言的编译器/解释器,以及集成开发环境、调试和其它开发工具。以前,我们一直对windows平台下如VB VC软件开发的高效和便捷津津乐道,也是windows对linux围剿的利器。可是现在一切都改变了,因为有了Borland公司的Kylix。提起borland公司,在业界几乎是无人不知无人不晓,Borland公司一向以高性能、高效率的应用程序开发工具而着称,最著名的是DOS平台上的Turbo C、Borland C++,Windows平台上的Delphi、C++Build和Java开发工具。以上这些产品都称得上是经典之作,尤其是以面向对象的Pascal为基础的Delphi,更是经典中的经典,C++Bulid也是脍炙人口。Kylix就提供了linux版的Delphi和C++Bulid。这两个版本被认为是linux平台上第一个RAD(Rapid Application Development,快速应用软件开发工具)开发工具。 光有内核还不能构成一个完整的操作系统,于是一些组织或公司将内核与一些应用程序包装起来就构成了一个完整的操作系统,这就是发行套件,不同的公司或组织的发行套件各不相同,版本号也不相同,尽管它们使用了同一版本号的内核。现在的发行公司很多,如:我们常听说的RedHat,中软,红旗。 虽说Linux还无法与拥有一亿多用户的Windows相比,但是它确立自身地位和影响力所花费的时间却只有Windows的一半。作为一种Unix操作系统,Linux的强大性能显然使得其它品牌的Unix黯然失色。有分析家认为,“Linux的广泛普及使其成为Unix市场上最具活力的一只新军。”甚至连Unix之父Dennis Ritchie也认为Linux“确实不错”。有一些分析家甚至认为,在未来数年间,Linux将成为NT真正强有对手,也是唯一可以冲破微软垄断性文化圈的出路所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值