Shell(终端或壳):人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。现在包括[红帽]系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器。
Linux系统使用了非同步的磁盘/内存数据传输模式, 同时又是个多用户多任务的环境, 所以不能随便的不正常关机,可能会造成磁盘数据的损毁、文件系统混乱。
Linux命令结构
命令名称 [命令参数] [命令对象]
PS:命令名称、命令参数、命令对象之间用空格分隔
- 命令对象一般是指要处理的文件、目录、用户等资源
- 命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀 例:--help -h
Linux必知必会的命令
man
快捷键
1、空格键 #向下翻一页
2、PaGe down #向下翻一页
3、PaGe up #向上翻一页
4、home #直接前往首页
5、end #直接前往尾页
6、/ #从上至下搜索某个关键词,如“/linux”
7、? #从下至上搜索某个关键词,如“?linux”
8、n #定位到下一个搜索到的关键词
9、N #定位到上一个搜索到的关键词
10、q #退出帮助文档
2、帮助信息
1、NAME 命令的名称
2、SYNOPSIS 参数的大致使用方法
3、DESCRIPTION 介绍说明
4、EXAMPLES 演示(附带简单说明)
5、OVERVIEW 概述
6、DEFAULTS 默认的功能
7、OPTIONS 具体的可用选项(带介绍)
8、ENVIRONMENT 环境变量
9、FILES 用到的文件
10、SEE ALSO 相关的资料
11、HISTORY 维护历史与联系方式
echo
*结构:echo [字符串 | $变量]
1、echo "helloWorld"
2、echo $PATH
date
*结构:date [选项] [+指定的格式]
*场景:日志、备份数据等
date命令中的参数以及作用
%S 秒(00~59)
%M 分钟(00~59)
%H 小时(00~23)
%I 小时(00~12)
%m 月份(1~12)
%p 显示出AM或PM
%a 缩写的工作日名称(例如:Sun)
%A 完整的工作日名称(例如:Sunday)
%b 缩写的月份名称(例如:Jan)
%B 完整的月份名称(例如:January)
%q 季度(1~4)
%y 简写年份(例如:20)
%Y 完整年份(例如:2020)
%d 本月中的第几天
%j 今年中的第几天
%n 换行符(相当于按下回车键)
%t 跳格(相当于按下Tab键)
1、date
2、date "+%Y-%m-%d %H:%M:%S"
wget
*结构:wget [参数] 下载地址
wget命令的参数以及作用
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载
1、wget命令递归下载网站内的所有页面数据以及文件
wget -r -p http://www.baicu.com
ps
*结构:ps [参数]
*场景:搭配管道符,用来抓取与某个指定服务进程相对应的PID号码
ps命令的参数以及作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程
Linux系统中,5种常见的进程状态:
**R(运行):进程正在运行或在运行队列中等待。
**S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
**D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
**Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
**T(停止):进程收到停止信号后停止运行。
top
*结构:top
*场景:动态地监视进程活动与系统负载等信息,顶配版Windows任务管理器
第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小负载越低)。
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“88.2 id”意味着有88.2%的CPU处理器资源处于空闲。
第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
pidof
*结构:pidof [参数] [服务名称]
*场景:查询某个指定服务进程的PID值
1、pidof sshd
kill
*结构:kill [参数] [进程PID]
*场景:终止某个指定PID的服务进程
1、kill 123
killall
*结构:killall [参数] [服务名称]
*场景:终止某个指定名称的服务所对应的全部进程
1、pidof httpd killall httpd #终止所有httpd服务的进程
ifconfig
*结构:ifconfig [网络设备] [参数]
*场景:查看本机当前的网卡配置与网络状态,主要查看:网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量
uname
*结构:uname [-a]
*场景:查看系统内核与系统版本等信息
1、uname -a
2、cat /etc/redhat-release #系统详细详细
uptime
*结构:uptime
*场景:查看系统负载信息,显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况;负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
free
*结构:free [-h]
*场景:查看当前系统中内存的使用量信息
who
*结构:who [参数]
*场景:查看当前登入主机的用户终端信息
last
*结构:last [参数]
*场景:查看所有系统的登录记录
history
*结构:history [-c]
*场景:查看显示历史执行过的命令
历史命令会被保存到用户家目录中的.bash_history文件中
1、ctrl+r #搜索命令
2、!12 #执行第12个命令
3、!! #执行上一个命令
4、history -c #清空当前用户在本机上执行的Linux命令历史记录信息
find
*结构:find [查找路径] 寻找条件 操作
*场景:按照指定条件来查找文件
find命令中的参数以及作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
--type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}\; 后面可跟用于进一步处理搜索结果的命令
1、find /etc/ -name "host*" -print #获取host开头的文件
2、find / -perm -4000 -print #在整个系统中搜索权限中包括SUID权限的所有文件
3、find / -user www -exec cp -a {} /root/findresults/ \; #找出所有归属于www用户的文件并复制到/root/findresults目录
PS:“-exec {} \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”
grep
*结构:grep [选项] [文件]
*场景:在文本中执行关键词搜索
grep命令的参数及其作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择——仅列出没有“关键词”的行。
1、grep /sbin/nologin /etc/passwd #查找出当前系统中不允许登录系统的所有用户信息
tar
*结构:tar [选项] [文件]
*场景:对文件进行打包压缩或解压
tar命令的参数及其作用
-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名(必须放到参数最后)
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录
1、tar -czvf 压缩包名称.tar.gz 要打包的目录
2、tar -xzvf 压缩包名称.tar.gz 解压的目录
file
*结构:file 文件名
*场景:查看文件的类型
1、file test.txt
dd
*结构:dd [参数]
*场景:按照指定大小和个数的数据块来复制文件或转换文件
/dev/zero设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据
dd命令的参数及其作用
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数
1、dd if=/dev/zero of=560_file count=1 bs=560M #取出一个大小为560MB的数据块,然后保存成名为560_file的文件
2、 dd if=/dev/cdrom of=RHEl-server-7.com.iso #把光驱设备中的光盘制作成iso格式的镜像文件
rm
*结构:rm [选项] 文件
*场景:删除文件或目录
rm -rf 123
mv
*结构:mv [选项] 源文件 [目标路径|目标文件名]
*场景:剪切文件或将文件重命名
mv 123 123
cp
*结构:cp [选项] 源文件 目标文件
*场景:复制文件或目录
cp命令的参数及其作用
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r为上述参数)
Linux系统中,复制操作具体分为3种情况:
> 如果目标文件是目录,则会把源文件复制到该目录中;
> 如果目标文件也是普通文件,则会询问是否要覆盖它;
> 如果目标文件不存在,则执行正常的复制操作。
1、cp 123 456
mkdir
*结构:mkdir [选项] 目录
*场景:创建空白的目录
mkdir -p 123
touch
*结构:touch [选项] [文件]
*场景:创建空白文件或设置文件的时间
touch命令的参数及其作用
-a 仅修改“读取时间”(atime)
-m 仅修改“修改时间”(mtime)
-d 同时修改atime与mtime
1、touch 123
diff
*结构:diff [参数] 文件
*场景:比较多个文本文件的差异
1、diff -c 123 345
cut
*结构:cut [参数] 文本
*场景:按“列”提取文本字符
1、cut -d: -f1 /etc/passed #提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容
stat
*结构:stat 文件名称
*场景:查看文件的具体存储信息和时间等信息
1、stat 123
wc
*结构:wc [参数] 文本
*场景:统计指定文本的行数、字数、字节数
wc的参数以及作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
1、wc -l /etc/passwd
tr
*结构:tr [原始字符] [目标字符]
*场景:替换文本文件中的字符
1、cat 123 | tr [a-z][A-Z] #把某个文本内容中的英文全部替换为大写
tail
*结构:tail [选项] [文件]
*场景:查看纯文本文档的后N行或持续刷新内容
1、tail -f 123.log
head
*结构:head [选项] [文件]
*场景:查看纯文本文档的前N行
1、head -n 20 123.log
more
*结构:more [选项]文件
*场景:查看纯文本文件(内容较多的);空格键或回车键向下翻页
1、more 123.log
cat
*结构:cat [选项] [文件]
*场景:查看纯文本文件(内容较少的)
1、cat -n 123.log #显示行号
ls
*结构:ls [选项] [文件]
*场景:显示目录中的文件信息
1、ls -al #显示所有文件的详细信息
cd
*结构:cd [目录名称]
*场景:切换工作路径
1、cd /etc/123
pwd
*结构:pwd [选项]
*场景:切换工作路径
1、pwd
sosreport
*结构:sosreport
*场景:收集系统配置及架构信息并输出诊断文档
1、sosreport
sed
*结构:sed:字符流编辑=====每次修改一行数据,擅长“行”操作
*场景:
*功能【增、删、改、查】:擅长行操作+修改文件内容
*原理:将行内容读取到内存中处理,不是直接操作文件,源文件还是放在硬盘的block里,更新的内容可以利用参数刷新到磁盘中
1、sed -i "s#123#112#g" #123替换为112
awk
*结构:awk
*场景:字符流编辑=====每次修改一列数据,擅长“列”操作
1、sed -i "s#123#112#g" #123替换为112
tree
*结构:tree 目录
*场景:查看目录结构
1、tree / #查看根目录结构
xargs
*结构:xargs
*场景:给命令传递参数的一个过滤器,可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据;可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
1、find /sbin -perm +700 |xargs ls -l
输入输出重定向
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
输入重定向中用到的符号及其作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
输出重定向中用到的符号及其作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1
或
命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
PS:重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2必须写
实例:
ls -l xxxx 2> error.txt #输出错误消息到文件
转义字符
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(''):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。
1、echo "hello $variable" #输出结果为hello demo
2、echo 'hello \$varibale' #输出结果为$varibale
环境变量
PS:linux中变量一般大写,约定大于配置的思路
linux命令执行步骤:
1、判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行
2、检查用户输入的命令是否为“别名命令”,格式为“alias 别名=命令”
3、Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令。
4、系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找
PS:为什么不能将当前目录(.)添加到PATH中? ”
原因:可以将当前目录(.)添加到PATH变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp中存放了一个与ls或cd命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招
Linux系统中最重要的10个环境变量
HOME 用户的主目录(即家目录)
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器
1、export TESTCOMMAND #提升变量的作用域为全局变量,保证所有用户都可以看到,因为linux是多用户,多任务的OS系统,所以每个用户都是一个独立的存在,具有隔离性
Linux 系统启动过程
* 内核的引导:
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
* 运行 init:
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件 /etc/inittab。
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7个运行级别(runlevel):
* 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
* 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
* 运行级别2:多用户状态(没有NFS)
* 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
* 运行级别4:系统未使用,保留
* 运行级别5:X11控制台,登陆后进入图形GUI模式
* 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
* 系统初始化:
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
* 建立终端:
rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。
* 用户登录系统
* (1)命令行登录
* (2)ssh登录
* (3)图形界面登录
init程序的类型:
* **SysV:** init, CentOS 5之前, 配置文件: /etc/inittab。
* **Upstart:** init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
* **Systemd:** systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
Linux 关机
正确的关机流程为:sync > shutdown > reboot > halt
不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中
Linux图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
系统启动流程
centos6:
1、加电BIOS自检——检测硬件是否正常
2、MBR引导——读取磁盘MBR的信息,引导系统启动
3、grup菜单——选择启动的内核/进行重置密码等
4、加载系统内核信息——使用内核控制硬件
5、系统第一个进程运行起来init——控制其它进程(串行控制)
6、加载系统运行级别/etc/inittab
7、初始化脚本运行——初始化系统
8、运行特殊的脚本——服务运行脚本
9、运行mingett进程——显示登陆界面
centos7
1、加电BIOS自检——检测硬件是否正常
2、MBR引导——读取磁盘MBR的信息,引导系统启动
3、grup菜单——选择启动的内核/进行重置密码等
4、加载系统内核信息——使用内核控制硬件
5、系统第一个进程启动systemmd(并行启动其它进程)
6、读取加载target文件
/etc/systemd/system/default.target
7、读取系统初始化文件
/usr/lib/systemd/system/sysinit.target
8、加载/etc/systemd/system 实现服务开机自启
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。