用cut命令剪切出来了一些内容。但是原始的文件还是不变的
Linux笔记
2022-07-21 13:56:59 0 举报
AI智能生成
Linux的归类导图,省的天天看笔记了,还不够清晰,正在慢慢补充
作者其他创作
大纲/内容
CentOS
安装
待续
基本配置
待续
图形界面和终端
图形界面
Ctrl+Alt+F1
tty
Ctrl+Alt+F2~F6
命令符号
@
前边是用户名
后边是所在域/主机名
~
当前用户家目录 home
命令提示符:提示在其后输入命令,有权限的限制
$
普通用户
#
超级用户 root
切换用户
sudo 用户名
然后输入密码,回车
退出root用户
Ctrl+D
命令后什么也不输入:关闭当前终端
给终端传递EOF(End Of File,文件结束符)
exit
whoami
获取当前用户名
hostname
输出主机名
简单命令
date
CST:中央标准时间
ls
蓝色:目录
ls -a
-a列出当前目录下的所有文件,包含隐藏文件。
以点开头的都是隐藏文件
命令参数
命令可以包含多个参数和参数之间空格隔开
短参数
横杠接字母
command -p
command -p -a -T -c
command -paTc
长参数
两个横线
command --parameter
不能像短参数合并
command --parameter1 --parameter2
可以和短参数混用
command -paTc --parameter1 --parameter2
效果一样
ls -a
ls --all
参数的值
长、短参数不同
command -p 10
command --parameter=10
常用命令和快捷键
Tab两次补全命令和文件名、路径名
如果显示文件过多
y:分页显示
空格下一页
回车下一行
q退出
历史记录
按向上键
按时间顺序向前查找用过的命令
按向下键
按时间顺序向后查找用过的命令
Ctrl+R
查找使用过的命令
histroy
列出之前使用的所有命令
!编号:重新运行对应编号的命令
清理终端内容
Ctrl+L
clear
Ctrl+D
给终端传递EOF(End Of File,文件结束符)
Shift + PgUp
向上滚屏,与鼠标向上滚轮同效
Shift + PgDn
向上滚屏,与鼠标向上滚轮同效
Ctrl + A
光标跳到一行命令开头,同Home
Ctrl + E
光标跳到一行命令结尾,同End
Ctrl + U
删除光标左侧的命令字符
Ctrl + K
删除光标右侧的命令字符
Ctrl + W
删除光标左侧一个单词
单词指空格隔开的一个字符串,例如-a就是一个单词
Ctrl + Y
恢复(Ctrl + W|Ctrl + U|Ctrl + K)删除的单词,类似剪切粘贴
文件和目录
文件
类型分类
普通文件
文本类型的文件
.txt
.doc
.odt
等
声音文件
.wav
.mp3
.ogg
程序
等
此类文件windows中也有
特殊文件
表示一些东西
例如光盘驱动
Linux中一切皆文件
目录结构
层级关系
windows中是反斜杠\表示,Linux中是斜杠/ 表示
命名规则
可包含空格等符号
尽量不使用空格或者其他特殊符号
尽量用小写英文字母
根目录
有且只有一个根目录
/
没有比根目录再高一阶的目录,没有目录包含根目录
Linux最顶层目录
根目录的直属子目录
列出命令
ls /
bin
bin:是英语 binary的缩写,表示“二进制文件”
(我们知道可执行文件是二进制的)
bin目录包含了会被所有用户使用的可执行程序
(我们知道可执行文件是二进制的)
bin目录包含了会被所有用户使用的可执行程序
boot
boot:英语boot表示“启动”
boot目录包含与 Linux启动密切相关的文件
boot目录包含与 Linux启动密切相关的文件
dev
dev:英语 device的缩写,表示“设备”
包含外设。它里面的子目录,每一个对应一个外设
比如代表我们的光盘驱动器的文件就会出现在这个目录下面
包含外设。它里面的子目录,每一个对应一个外设
比如代表我们的光盘驱动器的文件就会出现在这个目录下面
etc
etc:有点不能顾名思义了。etc是法语 et cetera的缩写
翻成英语就是 and so on,表示“…等等”
etc目录包含系统的配置文件
至于为什么在/etc下面存放配置文件
按照原始的Unix的说法
这下面放的都是一堆零零碎碎的东西,就叫etc好了。是历史遗留
翻成英语就是 and so on,表示“…等等”
etc目录包含系统的配置文件
至于为什么在/etc下面存放配置文件
按照原始的Unix的说法
这下面放的都是一堆零零碎碎的东西,就叫etc好了。是历史遗留
home
home:英语home表示“家”。用户的私人目录
在home目录中,我们放置私人的文件
类似 Windows中的 Documents文件夹,也叫“我的文档”
在home目录中,我们放置私人的文件
类似 Windows中的 Documents文件夹,也叫“我的文档”
Linux中的每个用户都在home目录下有一个私人目录
(除了大管家用户root)
root用户拥有所有权限,比较“任性”,跟普通用户不住在一起
假如我的用户名是 oscar,那么我的私人目录就是/home/ oscar
如果另一个用户叫john,那么他的私人目录就是/home/john
(除了大管家用户root)
root用户拥有所有权限,比较“任性”,跟普通用户不住在一起
假如我的用户名是 oscar,那么我的私人目录就是/home/ oscar
如果另一个用户叫john,那么他的私人目录就是/home/john
lib
lib:英语 library的缩写,表示“库
lib目录包含被程序所调用的库文件,例如.so结尾的文件
Windows下这样的库文件则是以.dll结尾
lib目录包含被程序所调用的库文件,例如.so结尾的文件
Windows下这样的库文件则是以.dll结尾
media
media:英语 media表示“媒体”
可移动的外设(USB盘,SD卡,DVD,光盘,等等)插入电脑时
Linux可以让我们通过 media的子目录来访问这些外设中的内容
可移动的外设(USB盘,SD卡,DVD,光盘,等等)插入电脑时
Linux可以让我们通过 media的子目录来访问这些外设中的内容
mnt
mnt:英语 mount的缩写,表示“挂载
有点类似 media目录,但一般用于临时挂载一些装置
有点类似 media目录,但一般用于临时挂载一些装置
opt
opt:英语 optional application software package的缩写
表示“可选的应用软件包
用于安装多数第三方软件和插件
表示“可选的应用软件包
用于安装多数第三方软件和插件
root
root:英语“根”的意思
超级用户root的家目录
一般的用户的家目录位于/home下,root用户是个例外
超级用户root的家目录
一般的用户的家目录位于/home下,root用户是个例外
sbin
sbin:英语 system binary的缩写,表示“系统二进制文件
比bin目录多了一个前缀 system(“系统”
sbin目录包含系统级的重要可执行程序
比bin目录多了一个前缀 system(“系统”
sbin目录包含系统级的重要可执行程序
srv
srv:英语 service的缩写,表示“服务
包含一些网络服务启动之后所需要取用的数据
包含一些网络服务启动之后所需要取用的数据
tmp
tmp:英语 temporary的缩写,表示“临时的”
普通用户和程序存放临时文件的地方
普通用户和程序存放临时文件的地方
usr
usr:是英语 Unix Software Resource的缩写
表示“Unⅸx操作系统软件资源”(类似etc,也是历史遗留的命名)
usr目录是最庞大的目录之一
表示“Unⅸx操作系统软件资源”(类似etc,也是历史遗留的命名)
usr目录是最庞大的目录之一
类似 Windows中的 C: \Windows
和C:\ Program Files这两个文件夹的集合
usr目录里安装了大部分用户要调用的程序
和C:\ Program Files这两个文件夹的集合
usr目录里安装了大部分用户要调用的程序
文件系统结构图
https://linuxtoy.org/archives/linux-file-structure.html
组成
每个文件都分三个部分
通常说两个:文件名和文件内容
通常说两个:文件名和文件内容
文件名
权限
文件内容
存储
每个文件的文件内容被分配到一个标示号码,就是inode
因此每个文件名都绑定到它的文件内容(用inode标识)
命令
浏览和切换目录
pwd
显示当前目录的路径
Print Working Directory ( “打印当前工作目录” )的缩写
which
获取命令的可执行文件的位置
Linux 下,每一条命令其实对应了一个可执行程序在终端中输入命令,
按回车的时候,就是执行了对应的那个程序
按回车的时候,就是执行了对应的那个程序
ls
列出文件和目录
Is是list 的缩写,是英语“列出”的意思
CentOS 的终端默认是有颜色标注的。一般来说
蓝色-->目录
绿色-->可执行文件
红色-->压缩文件
浅蓝色-->链接文件
灰色-->其他文件
参数
颜色标注
开启颜色标注: Is --color=auto
关闭颜色标注: Is --color=none
-a显示所有文件和目录,包括隐藏的..
Linux中,以点(.)开头的文件是隐藏文件
不包括开头的两个.和.,这两个的含义如下
一个点就是当前目录
点点就是它的上级目录
大写的参数-A,它的作用和小写的-a几乎一样
唯一不同就是-A不列出.和..这两个文件
-l参数使得Is命令列出一个显示文件和目录的详细信息的列表
每一个文件或目录都有对应的一行信息
所有文件的大小,0千字节
total 0 :并不是统计当前目录真正的所有文件的大小,逐层的文件大小相加。
只是统计了当前这一层的文件的大小,并没有深入的统计总的所有文件(包含子目录)的大小,
只是统计了当前这一层的文件的大小,并没有深入的统计总的所有文件(包含子目录)的大小,
文件权限:dkwxr-xr-x之类的。
链接的数目:2,1之类的。
文件的所有者的名称
文件所在的群组
文件大小:单位是octet,也就是byte,是英语“字节”的意思
最近一次修改的时间
-h:以Ko, Mo, Go的形式显示文件大小
仅用Is-1,列出的文件详细信息中,文件大小是以字节为单位的参数-h
h是humain readable的缩写,表示“适合人类阅读的”
-t:按文件最近一次修改时间排序
t是time的缩写,表示“时间”
-t参数:按照文件或目录最近一次修改时间的降序排列
Is的 常用参数合并在一起使用,效果是叠加的: ls-lath
时间最近一次排序,然后是列出所有文件,然后又是列出它的详细信息, -h就是便于人类阅读
-h的效果,多少多少k。1k就是1024个字节。
cd
cd是英语 change directory的缩写,表示“切换目录”
cd命令后面接的参数就是一个:你要去的那个目录的路径
一个点表示当前目录,两个点表示上一级目录
路径
相对路径:相对于当前目录的一个路径表示法
绝对路径:绝对的,不因当前目录而改变的一个路径表示法
绝对路径很好辨认,因为它总是以/开头,/表示根目录
重回家目录的3种方式
cd /home/oscar
cd ~
cd /usr/games
目录大小
du
du是英语 disk usage的缩写,表示“磁盘使用/占用”
显示目录包含的文件大小
*相比Is -1命令, du 命令统计的才是真正的文件大小
参数
-h:以Ko, Mo, Go的形式显示文件大小
-h参数的用法类似之前在Is命令中的-h参数: du-h
du列出的都是些目录
-a显示文件和目录的大小
默认情况下,du命令只显示目录的大小
如果加上-a参数,则会显示目录和文件的大小
-s:只显示总计大小
可能没有权限去访问
浏览和创建文件
浏览文件
只能显示文件内容,并不能对文件内容进行修改
/var/log中有很多日志文件,可以测试
只能显示文件内容,并不能对文件内容进行修改
/var/log中有很多日志文件,可以测试
cat
一次性显示文件的所有内容
cat 是concatenate 的缩写,表示“连接/串联"
cat 命令可以一次性在终端中显示文件的所有内容
用法:只需要在命令后加上想要显示的文件路径即可
输出了里面所有内容,一个屏幕都显示不开。所以cat适合处理小点的文件,因为它会一次性显示全部,不适合一次显示全部的文件
参数
显示文件的编号: cat -n Xorg.9.log
连接两个文件,一并输出
cat -n Xorg.9.log Xorg.0.log
less
分页显示文件内容
如果文件比较大,cat命令会令人“猝不及防”
这种时候,另外的一个命令less就显得必不可少了
和cat 命令最大的区别: less会分一页一页地显示文件内容
左下角显示文件的名字。每页显示若干行,取决于终端屏幕的大小
其实还有个命令是more,more是“更多”
less是“更少”more 命令和less命令功能类似, more没有less那么强大
比如more命令不能往后翻页,只能往前, “一路向北”
快捷键
这里所说的快捷键当中提到字母时,大小写是需要区分的
在Linux 中,通常来说都区分大小写
这里所说的快捷键当中提到字母时,大小写是需要区分的
在Linux 中,通常来说都区分大小写
空格键:文件内容读取下一个终端屏幕的行数
与键盘上的PageDown (下一页)效果一样
b键:后退一页。与键盘上的PageUp (上一页)效果一样
*回车键:文件内容读取下一行,也就是前进一行
y键:后退一行。与键盘上的向上键效果是一样的
d键:前进半页(半个屏幕)
说到d键,那么就是小写字母d,而不是大写字母D(shift + d)
u键:后退半页(半个屏幕)
q键:停止读取文件,中止less命令
=号:显示你在文件中的什么位置
会显示当前页面的内容是文件中第几行到第几行
lines表示行
h键:显示帮助文档。按q键退出帮助文档
/(斜杠):进入搜索模式
输入内容,然后按下回车键
在搜索结果中跳转。按n键。就跳到下一个搜索到的关键词了
用大N键的话。就是调到上一个符合的内容。n是英语next的缩写
正则表达式(Regular Expression )也是可以用在搜索内容中
head
显示文件的开头几行
head Xorg.9. log
默认情况下,head会显示文件的头10行
参数
可以指定显示的行数,用-n这个参数
tail
显示文件结尾的几行
默认情况下, tail 会显示文件的尾10行
参数
tail 命令还可以配合-f参数来实时追踪文件的更新
默认地,tail-f会每过1秒检查一下文件是否有新内容
可以指定间隔检查的秒数,用-s参数: tail -f -s 4 xxx
tail -f -s 4 Xorg.9.log
可以用快捷键Ctrl + c来终止tail -f命令
创建文件
touch
创建一个空白文件
touch 命令其实一开始的设计初衷是修改文件的时间戮
就是可以修改文件的创建时间或修改时间
让电脑以为文件是在那个时候被修改或创建的
就是可以修改文件的创建时间或修改时间
让电脑以为文件是在那个时候被修改或创建的
事实上,Linux没有一个命令是专门用来创建一个空白文件的
touch在英语中是“触摸,触碰”的意思
就是说我碰一下那个文件,让电脑以为我刚修改过
如果touch命令后面跟着的文件名是不存在的文件,它会新建一个
就是说我碰一下那个文件,让电脑以为我刚修改过
如果touch命令后面跟着的文件名是不存在的文件,它会新建一个
touch同时创建多个文件
touch new_file1 new_file2
创建的文件名,如果带空格,那么就需要用双引号括起来。
在linux中尽量不要让文件名包含空格。
在linux中尽量不要让文件名包含空格。
touch "new_file"
mkdir
创建一个目录
mkdir 是mk 和dir的缩合。mk是make的缩写,表示“创建”
dir 是directory的缩写,表示“目录”
如果文件夹带空格也是用双引号
参数
还可以用-p参数来递归创建目录结构: mkdir -p one/two/three
文件的复制和移动操作
通配符
*
*号(星号)是很常用的正则表达式的符号,被称为“通配符”
顾名思义就是“百搭”,可以替代任意字符串
cp *.txt folder :把当前目录下所有txt 文件拷贝到folder 目录中
顾名思义就是“百搭”,可以替代任意字符串
cp *.txt folder :把当前目录下所有txt 文件拷贝到folder 目录中
cp
cp是英语copy的缩写,表示“拷贝"
cp命令不仅可以拷贝单个文件
还可以拷贝多个文件,也可以拷贝目录
cp命令不仅可以拷贝单个文件
还可以拷贝多个文件,也可以拷贝目录
cp file1 file1copy:复制文件file1,复制一个新的叫做file1copy
不一定要在同一个目录下拷贝,也可以把文件拷贝到其他目录
只需要把cp命令的第二个参数换成目录名: cp new_file one/
后面不加斜线也是可以的
只需要把cp命令的第二个参数换成目录名: cp new_file one/
后面不加斜线也是可以的
如果你想拷贝文件到其他目录的同时,不要具有相同名字
那么可以这样做cp new_file one/new_file_copy
那么可以这样做cp new_file one/new_file_copy
拷贝目录
之前创建的目录one将其拷贝为
one_copy cp r one one_copy
one_copy cp r one one_copy
mv
mv是英语move的缩写,表示“移动”
mv命令有两个功能
移动文件(或目录)
与cp命令用法类似,不同的是cp命令会复制当前文件
而mv命令则是单纯的移动,并不会制作副本
cp像Windows中的复制+粘贴; mv像Windows中的剪切+粘贴
而mv命令则是单纯的移动,并不会制作副本
cp像Windows中的复制+粘贴; mv像Windows中的剪切+粘贴
mv new_file_2 one :将 new_file_2 这个文件移动到 one 目录
原先的new_file_2文件不存在了
用cp命令的时候,原文件还是在的,只是把副本移动到其他目录
原先的new_file_2文件不存在了
用cp命令的时候,原文件还是在的,只是把副本移动到其他目录
用mv命令移动目录很简单,不需要额外的参数,和移动文件一样
例如: mv new_folder one
例如: mv new_folder one
重命名文件(或目录)
事实上,Linux 中没有一个专门的命令用于重命名文件
mv 命令可以重命名文件,还是归因于它的机制:移动文件
mv 命令可以重命名文件,还是归因于它的机制:移动文件
mv new_file renamed_file以上命令将new_file 重命名为renamed_file
当然,mv命令也可以配合通配符来使用
mv *.txt one :将当前目录下所有 txt 文件移动到 one目录
mv *.txt one :将当前目录下所有 txt 文件移动到 one目录
文件的删除和链接
删除
记住:终端里可没有“回收站”,所以删除前要谨慎考虑
rm
rm是英语remove的缩写,表示“移除”.这个命令就是用来删除东西的
在终端中没有回收站或垃圾箱
*用rm命令删除了文件,那可没后悔药吃,一般比较难恢复,当然,还是有办法可以恢复的,只是挺麻烦
rm命令可以删除一个文件、多个文件、目录
甚至你的整个Linux系统(如果你愿意的话)
语法
rm new_file_copy 除当前目录下的 new_file_copy 这个文件
可以同时删除多个文件,只要用空格隔开每个文件即可
例如: rm file1 file2 file3
参数
-i参数:向用户确认是否删除
保险起见,用rm命令删除文件时,可以加上-i参数
这样对于每一个要删除的文件,终端都会询问我们是否确定删除
i是英语inform的缩写,表示“告知,通知”
有两种回答:
y:英语yes的缩写,表示“是”。回车确认后,文件就删除了
n:英语no的缩写,表示“否”。回车确认后,文件不会删除
y:英语yes的缩写,表示“是”。回车确认后,文件就删除了
n:英语no的缩写,表示“否”。回车确认后,文件不会删除
-f参数:慎用,不会询问是否删除,强制删除
在rm命令后加上-f参数,终端不会询问用户是否确定删除文件
不论如何,文件会立刻被强制删除
f是英语force的缩写,表示“强迫,强制”
rm -f file
强制删除file文件
-r参数:递归地删除
这个参数也挺危险,用得不好你的子目录和文件都没了
rm -r one
以上命令会删除one这个目录,包括其子目录和文件
rm -r one
以上命令会删除one这个目录,包括其子目录和文件
rm命令加-r和-f参数:极为危险!。
干万不要这样做!=> rm -rf /*或者rm -rf /
整个命令的意思很明确:强制递归删除根目录下所有文件!
不要抱着试试看的心态,用管理员身份运行这条命令
CentOS 系统中,如果你用root 权限运行rm-rf /也是没问题的
因为它已经有了保护机制
因为它已经有了保护机制
rm: use --no-preserve-root to override this failsafe
意思是:“如果你坚持要在根目录/上递归地运行rm命令那么请加上--no-preserve-root 来取消保护"
意思是:“如果你坚持要在根目录/上递归地运行rm命令那么请加上--no-preserve-root 来取消保护"
也就是说,如果你用这句命令:
sudo rm -rf --no-preserve-root /
那么就会递归删除根目录下所有文件
sudo rm -rf --no-preserve-root /
那么就会递归删除根目录下所有文件
CentOS系统对下面的命令是没有防护措施的
cd / 后 sudo rm -rf *
rmdir
看着和rm-r挺像
但是这个命令有个局限性:只能删除空的目录
链接
In
In是link的缩写,在英语中表示“链接”
In命令用于在文件之间创建链接
In命令用于在文件之间创建链接
用一个你比较熟悉的词:快捷方式
虽然Linux 的链接比起Windows的快捷方式要更复杂一些
但是性质是类似的
虽然Linux 的链接比起Windows的快捷方式要更复杂一些
但是性质是类似的
链接类型
Physical link : 物理链接或硬链接
创建硬链接
原理
使链接的两个文件共享同样文件内容,就是同样的inode
一旦文件1和文件2之间有了硬链接
那么你修改文件1或文件2,修改的是相同的一块内容
只不过我们可以用两个文件名来取到文件内容
那么你修改文件1或文件2,修改的是相同的一块内容
只不过我们可以用两个文件名来取到文件内容
硬链接缺陷:只能创建指向文件的硬链接,不能创建指向目录的
软链接可以指向文件或目录。对于目录,一般都是用软链接
语法
In file1 file2
直接用In命令,不加任何参数
创建一个文件file2,使之成为file1的硬链接
原理
特点
可以用Is -i命令查看一下(-i参数可以显示文件的inode)
可以看到file1和file2 的inode是一样的
可以看到file1和file2 的inode是一样的
对于硬链接来说,删除任意一方的文件
共同指向的文件内容并不会从硬盘上被删除
共同指向的文件内容并不会从硬盘上被删除
如果我们用rm file2 来删除file2,那么对file1没什么影响
如果我们用rm file1来删除file1,对file2也没什么影响
只有既删除file1又删除file2
它们共同指向的文件内容才会消失
也就是那个inode才会被删去
它们共同指向的文件内容才会消失
也就是那个inode才会被删去
Symbolic link :符号链接或软连接
语法
In -s file1 file2 :创建了 file1 的软链接 file2
软链接才真正像我们在Windows下的快捷方式,
原理很相似创建硬链接时In不带任何参数,创建软链接需要加上-s
参数s是symbolic (符号的)的缩写
原理很相似创建硬链接时In不带任何参数,创建软链接需要加上-s
参数s是symbolic (符号的)的缩写
ls -l 查看
file2 的信息是这样的: file2->file1,表示file2 指向file1
file2前面的权限那里的第一个字母变成了1,表示link (链接)
之前硬链接的时候是没有l的,硬链接看起来就和普通文件类似
我们用Is -1命令查看文件信息的时候,第二列的那个1
表示拥有相同inode号的文件数。不难理解,因为file2 指向file1
它们并没有指向同一块文件内容,所以它们的inode号不相同
表示拥有相同inode号的文件数。不难理解,因为file2 指向file1
它们并没有指向同一块文件内容,所以它们的inode号不相同
其实file2这个软链接只是file1的一个快捷方式
它指向的是file1,所以显示的是file1的内容
file2 的inode 和file1不一样,也就是文件内容不一样
它指向的是file1,所以显示的是file1的内容
file2 的inode 和file1不一样,也就是文件内容不一样
原理
特点
如果我们删除file2,没什么大不了,file1不会受到影响
如果删除file1, file2会变成“死链接”,因为指向的文件不见了
如果删除file1, file2会变成“死链接”,因为指向的文件不见了
如果删除file1 那么 file2变成红色了
软链接可以指向目录,硬链接不行
用户权限、群组、文件权限管理
权限
成为root用户
sudo 命令: 暂时以root 身份运行命令
以普通用户登录,如何运行一些只有root才有权利运行的命令呢?
可以使用sudo这个命令暂时成为root,“当一天的皇帝”
可以使用sudo这个命令暂时成为root,“当一天的皇帝”
sudo 是英语 Substitute User DO 的缩写
substitute是“替换,代替,替身”的意思。user是“用户”的意思
do是“做”的意思。连在一起就是“替换用户来执行”的意思
substitute是“替换,代替,替身”的意思。user是“用户”的意思
do是“做”的意思。连在一起就是“替换用户来执行”的意思
sudo su 命令: 一直成为root
exit 切回到普通用户
sudo -i 和 su -
不仅切换到了root用户,而且切换到了root的家目录
只需要su命令就可以了。比较建议再加一个横线 su -
ctrl+D 退出
切换用户
sudo 用户名
这是一种安全机制
当然了,当我们在终端中使用命令行的时候
我们随时可以说:我想要切换到什么都可以做的用户的身份
当然了,当我们在终端中使用命令行的时候
我们随时可以说:我想要切换到什么都可以做的用户的身份
用户
介绍
在Linux中,理论上说来,我们可以创建无数个用户
但是这些用户是被划分到不同的群组里面的
有一个用户,名叫root,是一个很特殊的用户
但是这些用户是被划分到不同的群组里面的
有一个用户,名叫root,是一个很特殊的用户
夫root者,字大管家,号超级用户,江湖浑号“有权任性”
因为在Linux系统中,它可以做任何事情
用下图来演示一下Linux中的用户组织的一般可能形式
因为在Linux系统中,它可以做任何事情
用下图来演示一下Linux中的用户组织的一般可能形式
root 用户是默认会创建的,因为是系统的大管家,超级用户
我们只在必要时才会切换为root身份
其他时候,都是用有限权限的用户,例如ggsl (这是我的用户名)
这一简单的保护措施大大地提高了Linux系统的安全性
其他时候,都是用有限权限的用户,例如ggsl (这是我的用户名)
这一简单的保护措施大大地提高了Linux系统的安全性
root才能执行的命令
用户的crud
useradd 用户名 :命令:添加新用户
useradd 命令,很容易理解其作用,因为完全可以顾名思义
user 是英语“用户”的意思,add是英语“添加”的意思
useradd 用于添加用户。用法:命令后接要创建的用户名
user 是英语“用户”的意思,add是英语“添加”的意思
useradd 用于添加用户。用法:命令后接要创建的用户名
普通用户下提示无权限(权限被否决)"bash: /usr/sbin/useradd: Permission denied"
没有给新用户创建密码。这个用户就暂时还不能使用。
ls /home 查看用户
passwd 用户名 :命令:修改密码
passwd 命令可以修改用户的密码
passwd 是 password 这个英语单词的缩写,表示“密码”
用法类似useradd,只要在其后加上需要修改密码的那个用户名
passwd 是 password 这个英语单词的缩写,表示“密码”
用法类似useradd,只要在其后加上需要修改密码的那个用户名
userdel 用户名 :删除用户
可以用userdel 命令来删除已创建的账户
userdel delete 和 user 的缩写
delete是英语“删除”的意思,user是“用户”的意思
userdel delete 和 user 的缩写
delete是英语“删除”的意思,user是“用户”的意思
用法同 useradd,在后面接你要删除的用户名
如果执行提示 当前要删除用户正在被process进程PID 使用着,可以重启下当前系统
重启后,默认进入的是登录账户
切换到root。再删除用户
重启后,默认进入的是登录账户
切换到root。再删除用户
终端不会提示你确认删除,直接删除了用户
userdel 这个命令还是要谨慎使用
单单用userdel 命令,不加参数的话
只会删除用户,但是不会删除在/home目录中的用户家目录
只会删除用户,但是不会删除在/home目录中的用户家目录
用rm -rf删除home下的thomas目录。
rm -rf /home/thomas
rm -rf /home/thomas
这样home下就没有oscar这个目录了。
如果你想要连此用户的家目录也一并删除(”抄家“)
可以加上-r或--remove这个参数userdel -r thomas 或者 userdel --remove thomas
修改
群组的管理和文件权限
群组
概念
Linux中每一个用户都属于一个特定的群组
如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组
如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组
ls -l /home
查看用户
第三列是目录的所有者。第四列是目录的群组
创建群组
groupadd 群组名
groupadd 是 group 和 add 的缩写
group是英语“群组”的意思,add是英语“添加”的意思
groupadd 命令用于添加一个新的群组
group是英语“群组”的意思,add是英语“添加”的意思
groupadd 命令用于添加一个新的群组
usermod 命令:修改用户账户
usermod user 和 modify 的缩写
user是英语“用户”的意思, modify 是“修改”的意思
usermod 命令用于修改用户的账户
user是英语“用户”的意思, modify 是“修改”的意思
usermod 命令用于修改用户的账户
参数
-l:对用户重命名。/home中的用户家目录名不改变,需要手动修改
-g:修改用户所在群组
usermod -g friends thomas
用户thomas改为群组friends
-G添加多个群组
可以将一个用户添加到多个群组,用-G参数(大写的G)
usermod -G friends, happy,funny thomas
以上命令把thomas 添加到friends , happy 和funny三个群组
注意
记得群组名之间要用逗号分隔,而且没有空格
注意:使用usermod时要小心,因为配合-g或-G参数时
它会把用户从原先的群组里剔除,加入到新的群组
它会把用户从原先的群组里剔除,加入到新的群组
如果你不想离开原先的群组,又想加入新的群组
可以在-G参数的基础上加上-a参数
a是英语append的缩写,表示“追加”
可以在-G参数的基础上加上-a参数
a是英语append的缩写,表示“追加”
例如: usermod -aG good thomas
把thomas追加到good这个群组
追加群组的时候,一定要用大写的G参数,即使只追加一个群组
查看群组
groups thomas
用groups (“群组” )命令可以获知一个用户属于哪个(些)群组
用法很简单,后接用户名就可以了,当然用户要存在才行
用法很简单,后接用户名就可以了,当然用户要存在才行
groups 命令单独用,不加任何参数,会显示当前用户所在群组
删除群组
groupdel 群组名
修改文件的所有者和群组
只有root用户可以修改一个文件的所有者和群组
我们在家目录里创建一个文件,例如file.txt
我们在家目录里创建一个文件,例如file.txt
用Is -1命令来看一下它的信息。file.txt的所有者和群组都是 普通用户(oscar)
(这里不用root去创建,如果是root切换成普通用户创建)
(这里不用root去创建,如果是root切换成普通用户创建)
chown 命令:改变文件的所有者
chown 是change 和owner的缩写。需要root 身份才能运行
change是英语“改变”的意思,owner是英语“所有者”的意思。
chown 命令用于改变文件的所有者
change是英语“改变”的意思,owner是英语“所有者”的意思。
chown 命令用于改变文件的所有者
用法也很简单,后接新的所有者的用户名,再接文件名
chown thomas file.txtfile.txt
的所有者改为thomas之后,所在群组是不变的,还是oscar
chown thomas file.txtfile.txt
的所有者改为thomas之后,所在群组是不变的,还是oscar
查看所有者和群组
ls -l file.txt
其实,chown命令也可以改变文件的群组,用法如下
chown oscar:friends file.txt
就把file.txt文件的所有者改为oscar,群组改为friends
chown oscar:friends file.txt
就把file.txt文件的所有者改为oscar,群组改为friends
语法
chown thomas file.txtfile.txt
chown oscar:friends file.txt
参数
-R参数:递归设置子目录和子文件
chown 命令的-R参数非常有用
R是recursive的缩写,表示“递归”
注意:这里只能用大写的R,小写的r不起作用
R是recursive的缩写,表示“递归”
注意:这里只能用大写的R,小写的r不起作用
假如想要把用户 thomas的家目录的所有子目录和文件都占为己有
chown -R oscar:oscar /home/thomas
/home/thomas 我( oscar ) 所有了
chgrp命令:改变文件的群组
chgrp 是 change 和 group 的缩写
change 是英语“改变”的意思,group是英语“群组”的意思
chgrp 命令用于改变文件的群组
change 是英语“改变”的意思,group是英语“群组”的意思
chgrp 命令用于改变文件的群组
用法也很简单,后接新的群组名,再接文件名
chgrp thomas file.txt
chgrp thomas file.txt
语法
chgrp thomas file.txt
chmod 命令:修改访问权限
权限的原理
Linux系统里,每个文件和目录都有一列权限属性
访问权限指明了谁有读的权利,谁有修改的权利,谁有运行的权利
访问权限指明了谁有读的权利,谁有修改的权利,谁有运行的权利
在我们运行Is-1命令的时候
显示的每个文件或目录的第一列信息就是访问权限
显示的每个文件或目录的第一列信息就是访问权限
查看流程
exit退出root。然后pwd查看我们所在的目录
pwd
ls -l test/
文件的第一列
文件访问权限符
文件访问权限符
含义
d:英语directory的缩写,表示“目录”。就是说这是一个目录
l:英语link的缩写,表示“链接”。就是说这是一个链接
r:英语read的缩写,表示“读”。就是说可以读这个文件
w:英语 write的缩写,表示“写”。就是说可以写/修改这个文件
x:英语 execute的缩写,表示“执行/运行”。可以运行这个文件。
如果相应位置有字母,表示有相应权限。短横-,表示没有相应权限
最后可能会有一个点,这是SELinux的安全标签
SELinux全称Security-Enhanced Linux,是一种访问控制体系。
SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上。
SELINUX有「disabled」「permissive」,「enforcing」3种选择。
SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上。
SELINUX有「disabled」「permissive」,「enforcing」3种选择。
Disabled就不用说了,permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。
Enforcing就是你违反了策略,你就无法继续操作下去。
SELinux提供了比传统的UNⅨ权限更好的访问控制
Enforcing就是你违反了策略,你就无法继续操作下去。
SELinux提供了比传统的UNⅨ权限更好的访问控制
我们可以通过getenforce来查看SELinux的运行模式
getenforce
Enforcing
接着创建一个文件,会发现创建的这个文件的权限后面有点,启用了安全标签
接下来,修改selinux配置文件, vim /etc/sysconfig/selinux,关闭安全标签
SELINUX=disabled
重启系统,再验证,如下,发现关了
getenforce
Disabled
这时候新建一个文件,发现文件权限后面的小点没了,和我们平时看到的文件权限一样,正常了。
这个时候我们再修改配置文件,打开selinux标签,然后重启系统,会发现testforselinuxoff文件加上了这个安全标签,而且权限的后面又多了一个点。
解释
如果x权限在一个目录上,那么表示的是这个目录可以被读
就是可以打开此目录来看其子目录和子文件,如果同时有r权限的话
就是可以打开此目录来看其子目录和子文件,如果同时有r权限的话
为什么我们看到这一排有好多个重复出现的r,w和x呢?
那是因为访问权限是按照用户来划分的
d表示文件或者目录的属性符号
第一组rwx表示文件的所有者对于文件的访问权限
第二组rws表示文件所属的群组的其他用户对于次文件的访问权限
第三组rws表示除两组之外的其他用户对于此文件的访问权限
权限的原理
例子分析
ls -l renamed_file
renamed_file 这个文件的访问权限是-rw-rw-r-
解析-rw-rw-r-
rw-:文件的所有者(oscar)对文件有读,写的权限,没有运行权限
也很好理解,因为这是一个普通文件,默认没有可执行的属性
记住:如果有w权限(写的权限),那么也有删除此文件的权限
也很好理解,因为这是一个普通文件,默认没有可执行的属性
记住:如果有w权限(写的权限),那么也有删除此文件的权限
rw-:表明文件所在的群组(此处是oscar)的其他用户
(除了oscar之外)对文件有读,写的权限,但是没有运行的权限
(除了oscar之外)对文件有读,写的权限,但是没有运行的权限
r--:表示其他用户(除去oscar这个群组的用户)只可以读此文件
但不能写也不能执行“可远观而不可亵玩焉”
但不能写也不能执行“可远观而不可亵玩焉”
root是超级用户,大管家,它有Linux系统的所有权限
修改
chmod 是 change 和 mode 的缩写|
change 是英语“改变”的意思, mode是“模式”的意思
chmod 命令用于修改文件的各种访问权限
change 是英语“改变”的意思, mode是“模式”的意思
chmod 命令用于修改文件的各种访问权限
用数字来分配权限chmod 的绝对用法
三位二进制数转十位而已
要合并这些权限,就需要做简单的加法了:将对应的数字相加
假如我们要分配读,写权限,那么我们就要用4+2,就等于6
数字6表示具有读和写权限
假如我们要分配读,写权限,那么我们就要用4+2,就等于6
数字6表示具有读和写权限
举例640
6:文件的所有者有读和写的权限
4:文件所在群组的其他用户具有读的权限
0:除此之外的其他用户没有任何权限
4:文件所在群组的其他用户具有读的权限
0:除此之外的其他用户没有任何权限
可以给的最宽泛的权限就是777
所有者,群组用户,其他用户都有读,写和运行的权限
所有人就都可以对此文件“为所欲为”了
所有者,群组用户,其他用户都有读,写和运行的权限
所有人就都可以对此文件“为所欲为”了
如果权限是000,那么没有人能对此文件做什么
除了root, root 可以做任何事
除了root, root 可以做任何事
语法
chmod 600 renamed_file
查看权限
ls -l renamed_file
renamed_file 文件的访问权限被修改为了:rw------
用字母来分配权限chmod 的相对用法
除了用数字,可以用另一种方式来分配文件的访问权限:用字母
原理是类似的,但是有时用字母的方式更加精巧
因为不需要一次性把三组权限都写出来
原理是类似的,但是有时用字母的方式更加精巧
因为不需要一次性把三组权限都写出来
u: user的缩写,是英语“用户”的意思。表示所有者
g: group 的缩写,是英语“群组”的意思。表示群组用户
o: other的缩写,是英语“其他”的意思。表示其他用户
g: group 的缩写,是英语“群组”的意思。表示群组用户
o: other的缩写,是英语“其他”的意思。表示其他用户
a: all 的缩写,是英语“所有”的意思。表示所有用户
和权限字母配合的几个符号
+:加号,表示添加权限
-:减号,表示去除权限.
=:等号,表示分配权限
-:减号,表示去除权限.
=:等号,表示分配权限
举例
chmod u+rx file文件file的所有者增加读和运行的权限
chmod g+r file 文件file的群组其他用户增加读的权限
chmod o-r file 文件file 的其他用户移除读的权限
chmod g+r file 文件file的群组其他用户增加读的权限
chmod o-r file 文件file 的其他用户移除读的权限
chmod g+r o-r file 文件file 的群组其他用户增加读的权限,其他用户移除读的权限
chmod go-r file 文件file的群组其他用户和其他用户均移除读的权限
chmod +x file 文件 file的所有用户增加运行的权限
chmod go-r file 文件file的群组其他用户和其他用户均移除读的权限
chmod +x file 文件 file的所有用户增加运行的权限
chmod u=rwx,g=r,o=- file
文件file的所有者分配读,写和执行的权限
群组其他用户分配读的权限,不能写或执行;其他用户没有任何权限
文件file的所有者分配读,写和执行的权限
群组其他用户分配读的权限,不能写或执行;其他用户没有任何权限
参数
-R参数:递归地修改访问权限
chmod 配合-R (大写的R)参数可以递归地修改文件访问权限
假如只允许 oscar 能读,写,运行/home/oscar目录的所有文件
chmod -R 700 /home/oscar
假如只允许 oscar 能读,写,运行/home/oscar目录的所有文件
chmod -R 700 /home/oscar
文本编辑器
一般用于修改配置文件
Nano
mac也有
快捷键
Ctrl+w 用于查找;
Ctrl+x 用于退出;
Ctrl+o 用于保存,等等
Ctrl+x 用于退出;
Ctrl+o 用于保存,等等
Vim
Emacs
软件仓库
软件包(package)
CentOS下也有类似windows的程序,但不称之为“安装程序”而称之为“软件包”,英语是Package
一个软件包其实是软件的所有文件的压缩包,二进制形式的,包含了安装软件的所有指令,在Red Hat一族里,软件包的后缀是.rpm
rpm Red Hat Package Manager 的缩写表示“红帽软件包管理器”CentOS 作为Red Hat 一族的一员,也是用.rpm的软件包
Debian -族( Ubuntu , Debian ,等)的软件包是.deb 为后缀
rpm 格式的软件包,和Windows下的.exe的安装程序类似吗?
确实很像,但其实它们的运作方式不一样软件包管理包括了依赖关系的管理
包管理工具
在CentOS中,我们可以使用图形界面的软件包管理
当然了,也可以使用终端来管理软件包
终端的软件包管理命令一般用yum
yum 是CentOS中的默认包管理器工具,也用于Red Hat一族
终端的软件包管理命令一般用yum
yum 是CentOS中的默认包管理器工具,也用于Red Hat一族
yum update / upgrade : 更新软件包
基本没区别
yum update不删除旧包
而yum upgrade删除旧包
在生产环境中最好使用yum update,防止因旧软件包依赖而出现问题。
区别
默认情况下没有区别,而使用 update 则更为灵活
yum search:搜索软件包
sudo yum search
yum install:安装软件包
sudo yum install xxx
xxx 是对应软件包名
xxx 是对应软件包名
yum remove:删除软件包
sudo yum remove xxx或者 sudo yum autoremove xxx
XXX是对应软件包名
XXX是对应软件包名
常用的终端的软件包命令
本地的.rpm软件包,可以用rpm命令来安装
sudo rpm -i *.rpm 用于安装
sudo rpm -e 包名 用于卸载
sudo rpm -i *.rpm 用于安装
sudo rpm -e 包名 用于卸载
本地的.rpm软件包,也可以用yum命令来安装
sudo yum localinstall *.rpm 用于安装
sudo yum remove 包名 用于卸载
sudo yum localinstall *.rpm 用于安装
sudo yum remove 包名 用于卸载
软件仓库(repository)
软件包不需要我们通过搜索引擎来找到并下载几乎所有.rpm软件包存放在相同地方,称为软件仓库(repository)
Linux 的软件包都存放在一个地方,叫做 软件仓库(repository)
对于Windows的各种软件,可没有这样一个集中存放的地方
对于Windows的各种软件,可没有这样一个集中存放的地方
因为Linux 是在Windows之后诞生的(1991年前后)
为了避免Windows的这个“弊端”
Linux 选择创建一个集中存放软件的地方
为了避免Windows的这个“弊端”
Linux 选择创建一个集中存放软件的地方
当然了,Linux的这一优势也得益于它的开源性
Linux 中的软件基本都是开源自由的,任何人都可以分发、传播软件
只要遵守一定软件协议,把这些软件集中存放在某个地方是可行的
Linux 中的软件基本都是开源自由的,任何人都可以分发、传播软件
只要遵守一定软件协议,把这些软件集中存放在某个地方是可行的
Windows 的大部分软件都是 有版权的、闭源的、不开放
甚至收费的,这些软件的作者不会同意把他们本该赚钱的软件
存放到一个公共仓库任大家分发、使用
甚至收费的,这些软件的作者不会同意把他们本该赚钱的软件
存放到一个公共仓库任大家分发、使用
软件仓库绝不只是存放在一台服务器上
全球有很多个软件仓库(也就是有很多服务器)
大部分软件仓库里的软件都是一样的,只不过是拷贝而已
有一些特别的软件仓库,会存放其他软件仓库没有的软件
有一些特别的软件仓库,会存放其他软件仓库没有的软件
是用户选择软件仓库,因为基本上各个软件仓库中的软件都是一样的
一般建议用户选择离自己所在地较近的软件仓库的服务器
一般建议用户选择离自己所在地较近的软件仓库的服务器
用默认的官方版本没有太大坏处,但是有时候会卡
所以我们要学习如何切换软件仓库
CentOS系统使用的软件仓库的列表是记录在一个文件中
所以我们要学习如何切换软件仓库
CentOS系统使用的软件仓库的列表是记录在一个文件中
要编辑的那个包含软件仓库的列表的文件是
/etc/yum.repos.d/CentOS-Base.repo
这个文件是系统文件,只能被root用户修改
sudo nano /etc/yum.repos.d/CentOS-Base.repo
CentOS 官方的源列表
https://www.centos.org/download/mirrors/
切换CentOS的软件源
有时候CentOS默认的yum源不一定是国内镜像,导致yum在线安装及更新速度不是很理想。
这时候需要将yum源设置为国内镜像站点。
国内主要开源的开源镜像站点应该是网易和阿里云
这时候需要将yum源设置为国内镜像站点。
国内主要开源的开源镜像站点应该是网易和阿里云
修改CentOS默认yum源为mirrors.163.com
1、首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
[root@localhost ~] # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、进入yum源配置文件所在的文件夹
[root@localhost ~] # cd /etc/yum.repos.d/
3、下载163的yum源配置文件到上面那个文件夹内
CentOS7
[root@localhost yum.repos.d] # wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
CentOS6
[root@localhost yum.repos.d] # wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS5
[root@localhost yum.repos.d] # wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
4、运行yum makecache生成缓存
[root@localhost yum.repos.d] # yum makecache
5、这时候再更新系统就会看到以下mirrors.163.com信息
[root@localhost yum.repos.d] # yum -y update
已加载插件:fastestmirror, refresh-packagekit, security
设置更新进程Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
已加载插件:fastestmirror, refresh-packagekit, security
设置更新进程Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
修改CentOS默认yum源为mirrors.aliyun.com
1、首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
[root@localhost ~] # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载ailiyun的yum源配置文件到/etc/yum.repos.d/
CentOS7
[root@localhost ~] # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS6
[root@localhost ~] # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS5
[root@localhost ~] # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
3、运行yum makecache生成缓存
[root@localhost ~] # yum makecache
4、这时候再更新系统就会看到以下mirrors.aliyun.com信息
[root@localhost ~] # yum -y update
已加载插件:fastestmirror, refresh-packagekit, security
设置更新进程Loading mirror speeds from cached hostfile
base: mirrors.aliyun.com
extras: mirrors.aliyun.com
updates: mirrors.aliyun.com
已加载插件:fastestmirror, refresh-packagekit, security
设置更新进程Loading mirror speeds from cached hostfile
base: mirrors.aliyun.com
extras: mirrors.aliyun.com
updates: mirrors.aliyun.com
依赖(dependency)关系
通常来说,很少有一个软件可以单独在Linux上运行
也就是说它不依赖于其他程序
一个软件经常需要使用其他程序或者其他程序的片段(称之为库)
也就是说它不依赖于其他程序
一个软件经常需要使用其他程序或者其他程序的片段(称之为库)
一个软件依赖其他程序,这就是依赖关系
比如说,Linux下类似Photoshop 的软件GIMP
GIMP 的正常运作需要调用图片读取的库(例如读取一个JPG图片)
比如说,Linux下类似Photoshop 的软件GIMP
GIMP 的正常运作需要调用图片读取的库(例如读取一个JPG图片)
往往依赖关系还有下层依赖关系,环环相扣
当然,在Windows里面你也遇到过依赖问题
当然,在Windows里面你也遇到过依赖问题
比如你运行Eclipse软件,它会说你还没安装Java环境
你运行一个大型游戏,它提示你先安装DirectX
幸运的是,Red Hat的包管理系统非常智能
你运行一个大型游戏,它提示你先安装DirectX
幸运的是,Red Hat的包管理系统非常智能
RTFM(命令手册)
————————————以下开始高级部分————————————
正则表达式和数据操作
正则
grep命令:筛选数据
grep Globally search a Regular Expression and Print 的缩写
意思是“全局搜索一个正则表达式,并且打印”
grep的功能简单说是在文件中查找关键字,并显示关键字所在的行
意思是“全局搜索一个正则表达式,并且打印”
grep的功能简单说是在文件中查找关键字,并显示关键字所在的行
简单用法
grep text file
text代表要搜索的文本,file代表供搜索的文件
grep path /etc/profile
在etc下的profile文件内搜索path这样一个文本。
而且显示所有包含path的行。
而且显示所有包含path的行。
grep "Hello World" file
查找中间带空格的
双引号包括起来
参数
-i参数 忽略大小写
默认的情况下,grep命令是区分大小写的
grep 加上-i参数,使得grep可以忽略大小写
i是英语ignore的缩写,表示“忽略”
i是英语ignore的缩写,表示“忽略”
grep -i path /etc/profile
-n参数:显示行号
-n参数的作用很简单,就是显示搜索到的文本所在的行号
n是英语number的缩写,表示“数字,编号”
n是英语number的缩写,表示“数字,编号”
grep -n path /etc/profile
-v参数:只显示文本不在的行
v是invert的缩写,表示“颠倒,倒置”
-v参数的作用就是只显示搜索的文本不在的那些行
-v参数的作用就是只显示搜索的文本不在的那些行
grep -v path /etc/profile
-r参数:在所有子目录和子文件中查找
r是英语recursive的缩写,表示“递归”
grep -r "Hello World" folder/
在folder目录的所有子目录和子文件中查找Hello World 这个文本
grep -r "Hello World" folder/
在folder目录的所有子目录和子文件中查找Hello World 这个文本
Linux 中还有一个 rgrep 的命令,它的作用相当于grep -r
rgrep
-E参数:使用正则表达式
高级用法,配合正则表达式
E是extended regular expression 的第一个字母表示
“扩展的正则表达式"
grep -E Path /etc/profile
“扩展的正则表达式"
grep -E Path /etc/profile
Linux也有一个命令 egrep ,其效果等同grep -E
egrep
在CentOS 和Ubuntu这样的Linux发行版中
不加-E参数也是可以的,正则表达式始终是激活的
有的Unix发行版的系统可能不加-E参数就不能搜索正则表达式
不加-E参数也是可以的,正则表达式始终是激活的
有的Unix发行版的系统可能不加-E参数就不能搜索正则表达式
示例
grep -E ^path /etc/profile: ^匹配行首(匹配输入字符串的开始位置)
grep ^path /etc/profile
grep -E [Pp]ath /etc/profile
[Pp]既可以匹配大P也可以匹配小p
grep -E [0-4] /etc/profile:用于搜索包含0至4的任一数字的行
grep -E [a-zA-Z] /etc/profile:包含在a至z之间的任一字母或A-Z之间的任意字母的行
数据操作
sort 命令:为文件排序
sort是英语“排序”的意思
sort命令用于对文件的行进行排序
sort命令用于对文件的行进行排序
排序算法
快速排序
Quick Sort
归并排序
Merge Sort
插入排序
Insertion Sort
例子
nano name.txt
sort name.txt
按照首字母进行了排序。sort并不区分大小写。
参数
-o参数:将排序后的内容写入新文件
o是output 的首字母,表示“输出”
将排序结果输出到文件中
将排序结果输出到文件中
sort -o name_sorted.txt name.txt
name_sorted.txt就存储了排序后的结果
-r参数:倒序排列
r是reverse的缩写,是“相反,反面”的意思
与普通的仅用sort命令正好相反
与普通的仅用sort命令正好相反
sort -r name.txt
-R参数:随机排序
R是英语random的首字母,表示“随机的,任意的"
-R参数比较“无厘头” ,因为它会让sort命令的排序变为随机
就是任意排序,也许每次都不一样
-R参数比较“无厘头” ,因为它会让sort命令的排序变为随机
就是任意排序,也许每次都不一样
-n参数对数字排序.
默认地,仅用sort 命令的时候,是不区分字符是否是数字的
会把这些数字看成字符串,按照1-9的顺序来排序
例如138会排在25前面,因为1排在2的前面
会把这些数字看成字符串,按照1-9的顺序来排序
例如138会排在25前面,因为1排在2的前面
n是number的缩写。是英语“数字”的意思
-n参数用于对数字进行排序,按从小到大排序
-n参数用于对数字进行排序,按从小到大排序
sort不加-n参数。这样就把数字当做字符串了。按照1到9的顺序排列了
加上-n参数就会真的按照数字来排序,按照数值的大小来排列了
wc命令:文件的统计
wc是word count 的缩写
word是英语“单词”的意思
count是英语“计算,统计,数数”的意思
word是英语“单词”的意思
count是英语“计算,统计,数数”的意思
wc命令貌似是用来统计单词数目的,但wc的功能不仅止于此
wc命令还可以用来统计行数,字符数,字节数等
wc命令还可以用来统计行数,字符数,字节数等
wc name.txt
第一个9是9行的意思。一共有9个单词这是第二个9的意思。9行9个换行符。换行符占用9个字节。
所以就是41+9 是50个字节。
wc命令显示的三个数字
行数(newline counts ): newline 是英语“换行、换行符”的意思单
词数(word counts ): word 是英语“单词”的意思
字节数( byte counts ): byte是英语“字节”的意思
man wc
查看手册
参数
-l参数:统计行数
为了只统计行数,我们可以加上-l参数
l是英语line的缩写,表示“行”
l是英语line的缩写,表示“行”
wc -I name.txt
-w参数:.统计单词数
w是英语word的缩写,表示“单词"
-w参数用于统计单词(用空格隔开的字符串)数目
-w参数用于统计单词(用空格隔开的字符串)数目
-c参数:统计字节数
也许c是character (英语“字符”的意思)的缩写吧
-m统计字符数
uniq命令:删除文件中的重复内容..
uniq 是英语unique的缩写,表示“独一无二的”
uniq 命令有点“呆”,只能将连续的重复行变为一行
uniq repeat.txt
uniq repeat.txt unique.txt
处理后的文件保存到新的文件中
参数
-c参数:统计重复的行数..
c是count的缩写,表示“统计,计数”
uniq -c repeat.txt
-d参数:只显示重复行的值
d是duplicated的缩写,表示“重复的"
uniq -d repeat.txt
cut命令:剪切文件的一部分内容
cut是英语“剪切”的意思
cut命令用于对文件的每一行进行剪切处理
cut命令用于对文件的每一行进行剪切处理
参数
-c参数:根据字符数来剪切.
c是character的缩写,表示“字符”
cut -c 2-4 name.txt
只保留了234位的字符
cut命令进阶根据分隔符来剪切
CSV 格式
CSV 是Comma Separated Values B缩写
翻成中文是“逗号分隔值”
翻成中文是“逗号分隔值”
CSV文件的后缀名是.csv,通常可以被Excel等软件打开
创建一个csv格式的文件
nano notes.csv
note是英语"成绩”的意思
note是英语"成绩”的意思
Mark,95 / 100,很不错
Matthew,30 / 100,跟平时一样水
Maria,70 / 100, 有进步
Luke,54 / 100, 接近平均分了
John,68 / 100,很不错,但还可以更好
Samuel,100 / 100,总是那么完美
David,40 / 100,退步挺大呀
Matthew,30 / 100,跟平时一样水
Maria,70 / 100, 有进步
Luke,54 / 100, 接近平均分了
John,68 / 100,很不错,但还可以更好
Samuel,100 / 100,总是那么完美
David,40 / 100,退步挺大呀
Ctrl+X 退出。然后输入文件名
然后输入y,输入回车 就退出并保存了文件
然后输入y,输入回车 就退出并保存了文件
CentOS的Gnome版可以配置中文输入法
cat命令看下当前的文件
cat notes.csv
逗号分隔开的。这三部分分别是下面
学生名字
成绩(满分是100分)
评语
成绩(满分是100分)
评语
参数
-d参数:d 是delimiter的缩写,是英语“分隔符”的意思
用于指定用什么分隔符(比如逗号、分号、双引号等等)
用于指定用什么分隔符(比如逗号、分号、双引号等等)
-f参数: f是field的缩写,是英语“区域”的意思
表示剪切下用分隔符分隔的哪一块或哪几块区域
表示剪切下用分隔符分隔的哪一块或哪几块区域
例子
cut -d , -f 1 notes.csv
这样就从notes.csv里面剪切出来了第一部分内容
cut -d , -f 1,3 notes.cSV
要1和3这两部分
cut -d , -f 2- notes.csv
剪切第二部分 直到最后的内容
把剪切出来的文件存储到文件里,而不是像之前那个显示在终端
重定向符号、管道符号
输出重定向符号
> 重定向到新的文件
>可以将命令的输出结果重定向到你选择的文件中
cut -d , -f 1 notes.csv > students.txt
运行这个命令,终端不会有任何的显示
注意事项
如果此文件不存在,则新建一个文件
如果此文件已经存在,那就会把文件内容覆盖掉
而且是不会征求用户确认的
Linux 中有一个俗称“黑洞”的文件/dev/null
Linux 中有一个俗称“黑洞”的文件/dev/null
null 是英语“无,空”的意思
/dev/null 文件是特殊文件,不是一个目录
null 是英语“无,空”的意思
/dev/null 文件是特殊文件,不是一个目录
此文件具有唯一的属性:它总是空的
它能使发送到/dev/null 的任何数据作废
就好像这些数据掉进了无底的黑洞一般
它能使发送到/dev/null 的任何数据作废
就好像这些数据掉进了无底的黑洞一般
cut -d, -f 1 notes.csv > /dev/null
输出文件到黑洞
>> 重定向到文件末尾.
>>的作用与>是类似的,不过它不会像>那么危险
而是将重定向的内容写入到文件末尾,起到追加的作用
如果文件不存在,也会被创建
而是将重定向的内容写入到文件末尾,起到追加的作用
如果文件不存在,也会被创建
cut -d , -f 1 notes.csv >> students.txt
区别
2>, 2>>, 2>&1重定向错误输出
stdin 标准输入流
从键盘向终端输入数据,这是标准输入,也就是stdin
stdin :标准输入流。英语standard input的缩写( standard是英语“标准”的意思,input是英语“输入”的意思)。标准输入是指输入至程序的数据(通常是文件)。程序要求以读(read )操作来传输数据。并非所有程序都要求输入。如Is命令运行时不用任何输入。除非重定向,输入是预期由键盘获取的。标准输入的文件描述符为0(零)
终端接收键盘输入的命令,会产生两种输出
stdout :标准输出流
标准输出: stdout。指终端输出的信息(不包括错误信息)
比如
我们运行ls 就列出当前目录下的所有文件。这就是标准输出 stdout
stdout : 标准输出流。英 standard output 的缩写( output是英语“输出”的意思)。标准输出是指程序输出的数据。程序要求数据传输使用写的运算。并非所有程序都要求输出。如mv命令在成功完成时是没有输出的。除非重定向,输出是预期显示在终端上的。标准输出的文件描述符为1(一)
stderr标准错误输出流.
标准错误输出: stderr。指终端输出的错误信息
比如
我们用cat notes.csv文件,如果里面还有内容,正常显示那么这就是标准输出。
如果notes.csv文件不存在,那么终端就显示错误信息。那么这就是标准错误输出
stderr :标准错误输出流。英语 standard error 的缩写(error是英语“错误”的意思)。标准错误输出是另一个输出流,用于输出错误消息或诊断。它独立于标准输出,且标准输出和标准错误输出可以分别被重定向。标准错误输出的文件描述符为2(二)
文件描述符
文件描述符的英语是File Descriptor,简称fd
File是英语“文件”的意思
Descriptor 是英语“描述符”的意思
File是英语“文件”的意思
Descriptor 是英语“描述符”的意思
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向操作系统内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符
文件描述符通常是Unix, Linux等系统的概念
在Windows中,也有类似的概念
但是Windows中称为“句柄”就是handle
在Windows中,也有类似的概念
但是Windows中称为“句柄”就是handle
图解
因为not_exist_file.csv这个文件是不存在的。所以这里会产生错误。但是这个错误并没有如愿的写入到results.txt中。这个错误仍旧在终端输出了。
>和>>只是将标准输出重定向到文件。并没有把标准错误输出到重定向文件。
如果我们要重定向标准错误输出,该怎么办呢?就要用到2>符号
>和>>只是将标准输出重定向到文件。并没有把标准错误输出到重定向文件。
如果我们要重定向标准错误输出,该怎么办呢?就要用到2>符号
2>符号
标准错误输出的文件描述符是2,所以这里的2表示标准错误输出
如果没有2,单独的>符号就是重定向标准输出(文件描述符为1)
如果没有2,单独的>符号就是重定向标准输出(文件描述符为1)
cat not_exit_file.csv > result.txt 2> errors.log
终端没有显示错误信息
errors.log文件是输出的错误信息
2>>符号
2>>符号用于将标准错误输出重定向到文件末尾
2>&1组合符号
将标准错误输出重定向到与标准输出相同的地方
cat not_exits_file.csv > results.txt 2>&1
标准输出和标准错误输出都重定向到results.txt
如果追加内容的话。前面用两个大于号。
图解
输入重定向
< , << :从文件或键盘读取
不是所有的命令都有输入,也不是所有的命令都有输出
其实可以使命令的输入来自于文件或者键盘输入
其实可以使命令的输入来自于文件或者键盘输入
< 从文件中读取
符号用于指定命令的输入
cat < notes.csv
cat < notes.csv
cat < notes.csv 的运行结果和 cat notes.csv一模一样
虽然运行结果一样,但是原理不一样
cat notes.csv
cat 命令接受的输入是notes.csv 这个文件名
那么它要先打开notes.csv文件
然后打印出文件内容
那么它要先打开notes.csv文件
然后打印出文件内容
cat < notes.csv
cat命令接受的输入直接是notes.csv 这个文件的内容
cat命令只负责将其内容打印
打开文件并将文件内容传递给cat 命令的工作则交给终端完成
cat命令只负责将其内容打印
打开文件并将文件内容传递给cat 命令的工作则交给终端完成
<< 从键盘读取
<<符号的作用是将键盘的输入重定向为某个命令的输入
sort -n << END
输入这条命令之后,按下回车,终端就进入了键盘输入模式
sort -n << END
输入这条命令之后,按下回车,终端就进入了键盘输入模式
进入了键盘输入模式。光标一直在闪动
sort -n是按照从小到大排列。那么我们就输入数值,每输入一个数值就用回车来换行。
最后输入END来结束输入。END被称作结束字符串。当然你也可以用其他字符串来代替END
最后输入END来结束输入。END被称作结束字符串。当然你也可以用其他字符串来代替END
输入结束的END然后回车。数字被从小到大的进行排序了。
当然也可使用其他命令
wc命令,用来统计字符
wc -m << END
wc -m << END
输入和输出来结合使用
在控制台输入一些东西然后存到numbers_sorted.txt文件内
sort -n << END > numbers_sorted.txt 2>&1
管道符号
使用率高的符号,一个竖线
传说中的“管道符号”|
| 符号既然被称为“管道符”,其作用就是“建立命令管道”
| 符号既然被称为“管道符”,其作用就是“建立命令管道”
原理
Linux 中的命令,每一个的功能虽然有限
但是一旦“铁索连环”,那可是会结合各个命令的功能
但是一旦“铁索连环”,那可是会结合各个命令的功能
实践
之前学习过用cut把字符剪切
现在要cut和sort排序连起来。用管道连接
cut -d , -f 1 notes.csv | sort
输出到txt内。就是结果重定向到txt
cut -d , -f 1 notes.csv | sort > sorted_names.txt
根据大小排序目录
du | sort -nr | head
head命令的作用:如果不用-n参数去指定函数,那么head会默认显示前10行。
du命令是深入遍历当前目录下每个子目录。把所有文件大小都做一个统计,du命令的输出结果就会做为sort -nr的输入
然后sort-nr:是表示数值,此处就是文件的大小进行排序,默认是小的在前面,-r是实现倒叙排列,有了-r参数,那么排序就是大的数字在前面了
前面两个命令的输出 又最后作为head命令的输入,head就是列出前10行。所以我们得到的结果就是从大到小的排序,列出前10个文件
列出关键字的文件
grep
grep可以在文件中查找关键字,显示关键字所在行。
有时候我们会觉得显示的信息太冗长了。每一行不仅有文件名还有关键字出现的那行文本
有时候我们会觉得显示的信息太冗长了。每一行不仅有文件名还有关键字出现的那行文本
sudo grep log -Ir /var/log | cut -d : -f 1 | sort | uniq
分解命令
sudo grep log -lr /var/log
遍历/var/log这个目录及其子目录。
列出所有包含log这个关键字的行
-l参数用于排除二进制文件,
-r参数用于递归遍历
列出所有包含log这个关键字的行
-l参数用于排除二进制文件,
-r参数用于递归遍历
从sudo grep log -Ir /var/log 的输出结果中
只剪切出文件名那一列(由冒号分隔的第一个区域)
只剪切出文件名那一列(由冒号分隔的第一个区域)
cur -d : -f 1
sort:将文件名的列以首字母顺序进行排序
uiniq:去掉重复的文件名
进程和系统监控
前置内容
Linux 是多任务多用户的操作系统
Linux可以管理多个同时运行的程序,是多任务系统
Linux也是一个多用户的系统
多个用户可以同时在不同地方通过网络连接到同一个Linux系统
Linux也是一个多用户的系统
多个用户可以同时在不同地方通过网络连接到同一个Linux系统
多用户多任务的隐患
可能某个用户或者某个任务(其实就是运行着的程序)
在某时让Linux系统过载了
就是任务太繁重了
在某时让Linux系统过载了
就是任务太繁重了
Windows系统下超级组合键
Windows 系统的超级组合键 Ctrl + Alt + Delete
可以调出任务管理器,结束未响应的程序
可以调出任务管理器,结束未响应的程序
命令
w
w命令:都有谁,在做什么?
迄今为止遇到过的最短的命令: w
可以帮助我们快速了解系统中目前有哪些用户登录着
以及他们在干什么
可以帮助我们快速了解系统中目前有哪些用户登录着
以及他们在干什么
含义
up
运行时间(用uptime命令也可以做到)
uptime命令其实就是w命令的第一行信息
up表示已经已经运行了多长时间。一旦系统重启或者是关机,这个运行时间就会归零。
linux中一般只有系统的内核升级才会要求重新启动系统,一般安装软件是不需要重启系统的。
linux中一般只有系统的内核升级才会要求重新启动系统,一般安装软件是不需要重启系统的。
users
表示登陆终端的用户数量
负载(同样可以用uptime命令获知)
load 是“负载,负荷”的意思
average是“平均值”的意思
average是“平均值”的意思
负载的三个数值
1分钟之内的平均负载
5分钟之内的平均负载
15分钟之内的平均负载
5分钟之内的平均负载
15分钟之内的平均负载
这些数字就是一段时间的平均活跃进程数。也就是使用cpu处理器的进程数。进程简单的来说就是运行起来的程序。
系统负载运行曲线图
tload
绘制随时间变化的负载曲线图
左上角的三个数值就是对应的1、5、15分钟的平均负载。途中横坐标是表示时间,纵坐标的高低表示负载的大小
Ctrl+C结束 运行。在运行w看下 负载。
w命令,除去第一行,下面的三行是归为一个部分的。
登陆的用户的列表。
当下系统中,链接的用户是哪几位?他们在做什么?任务进行多长时间了。
登陆的用户的列表。
当下系统中,链接的用户是哪几位?他们在做什么?任务进行多长时间了。
who
登录的用户列表(用who命令也可以做到)
运行who (who是英语“谁”的意思)命令
会输出当前哪些用户正登录着
会输出当前哪些用户正登录着
TTY登录的终端名称
Ctrl+F1回到图形界面后,:0就是对应的TTY1 图形终端, 就是我们平常启动centOS桌面版时登陆的图形界面
pts 是 pseudo terminal slave 的缩写,表示“伪终端从属"
from
FROM :用户连接到的服务器的IP地址(或者主机名)
from是英语“从"的意思
因为我们都是本机登陆的,所以ip这里都显示的:0.表示我们登陆的是一个本地的电脑。
LOGIN@
用户连接系统的时间
IDLE
用户有多久没活跃了(没运行任何命令)
JCPU
该终端所有相关的进程使用的CPU(处理器)时间
每当进程结束就停止计时,开始新的进程则会重新计时
PCPU
表示CPU (处理器)执行当前程序所消耗的时间
当前进程就是在WHAT列里显示的程序
WHAT
当下用户正运行的程序
ps\top 列出运行的进程
简单说来,进程就是加载到内存中运行的程序
大多数程序运行时都只在内存中启动一个进程
例如Linux 中的 OpenOffice 这个软件
大多数程序运行时都只在内存中启动一个进程
例如Linux 中的 OpenOffice 这个软件
有的程序运行时却会创建不少进程
例如Google 的Chrome 浏览器
每开一个标签栏都会创建一个新的进程
例如Google 的Chrome 浏览器
每开一个标签栏都会创建一个新的进程
Apache 在运行时就会创建很多进程,分别负责不同的任务
一般的数据库软件,例如MySQL, PostgreSQL 也是如此
一般的数据库软件,例如MySQL, PostgreSQL 也是如此
在Windows 中,我们要查看系统中运行的进程
会使用Ctrl + Alt + Delete 快捷键
调出任务管理器,然后点击“进程”这个菜单
会使用Ctrl + Alt + Delete 快捷键
调出任务管理器,然后点击“进程”这个菜单
ps
进程的静态列表
ps是Process Status 的缩写
process是英语“进程”的意思,status是“状态”的意思
ps命令用于显示当前系统中的进程
process是英语“进程”的意思,status是“状态”的意思
ps命令用于显示当前系统中的进程
ps命令显示的进程列表不会随时间而更新,是静态的
只是运行ps命令当时的那个状态
或者说是一个进程的快照,英语称为snapshot
只是运行ps命令当时的那个状态
或者说是一个进程的快照,英语称为snapshot
不加任何参数直接运行ps命令
pid
PID:进程号
pid 是 process identifier 的缩写
每个进程有唯一的进程号
每个进程有唯一的进程号
tty
TTY:进程运行所在的终端
pts 是 pseudo terminal slave 的缩写,表示“伪终端从属"
pts 是 pseudo terminal slave 的缩写,表示“伪终端从属"
cmd
CMD:产生这个进程的程序名
如果你在进程列表中看到有好几行都是同样的程序名
那么就是同样的程序产生了不止一个进程
那么就是同样的程序产生了不止一个进程
参数
ps -ef
列出所有进程
第一列UID,是user identifier 的缩写
user是“用户”的意思,identifier是“标识符”的意思
user是“用户”的意思,identifier是“标识符”的意思
UID是表示“用户名”,也就是运行进程的用户
PPID ( parent process ID) : PPID是程序的父进程号
-ef参数可以使ps 命令列出所有用户在所有终端的所有进程
ps -ef | less
还可以配合管道和less命令来方便查看
less命令会帮我们显示的信息清晰点
ps -ef | grep 程序名
常用命令 查找某程序的所有进程
ps -efh
-efH 可以使 ps命令按照乔木状列出进程
多层缩进,表示这个进程是这个进程的子进程
ps -u 实际的用户名
列出此用户运行的进程
ps -aux 或者 ps -aux | less
通过CPU 和内存使用来过滤进程
默认的结果集是未排好序的,可以通过--sort参数来排序
根据CPU使用率来降序排列
ps -aux --sort -pcpu | less
根据内存使用来降序排列
ps -aux --sort -pmem | less
将CPU和内存 参数合并到一起,并通过管道显示前10个结果
ps -aux --sort -pcpu, +pmem | head
q退出
ps -axjf
以树形结构显示进程
表示了父进程和子进程的关系
ps-axjf 和pstree效果比较类似
pstree
ps命令虽然强大,但有一个缺陷:是静态的
只能记录当下那一刻的进程列表
ps命令并不能帮助我们实时监控系统的进程
只能记录当下那一刻的进程列表
ps命令并不能帮助我们实时监控系统的进程
top
进程的动态列表
输入top。随时间一直在变化。这个列表实时更新的。
第一行相当于我们原来的w命令
下面是进程的列表。top命令无法显示全部的进程,只显示排在前面的进程
显示的内容是占据整个终端页面大小的数据
这些进程是按照使用处理器的比率来排序的
默认情况下,是按照%CPU那一列来排序
默认情况下,是按照%CPU那一列来排序
top命令的前几行就是最消耗的
一些键盘的按键
h:显示帮助文档,也就是哪些按键可以使用按下任意键返回。
j就进入到了命令的一个帮助文档
按q回到top命令的主界面
f/F:在进程列表中添加或删除某些列
B:大写的B,加粗某些信息
u:依照用户来过滤显示
按下u后,会在这里让你输入要显示的用户
按下回车
按下u,啥也不输入。直接回车就是显示原来的内容。
按下k就会让你输入要结束掉的进程号
比如输入PID 回车后就会结束掉这个进程。按下esc就是取消这个操作
s:改变刷新页面的时间
默认地,页面每隔3秒刷新一次
快捷键
Ctrl +C:停止终端中正在运行的进程
Ctrl +C可以比较友好地中止终端中正在运行的程序(进程)
这个组合键也只在终端中会这样执行
如果在普通的图形界面中,它就是拷贝的快捷键
这个组合键也只在终端中会这样执行
如果在普通的图形界面中,它就是拷贝的快捷键
而在终端中拷贝和粘贴
需要用 "Ctrl + Shift + C" 和 "Ctrl + Shift + V" 来执行
需要用 "Ctrl + Shift + C" 和 "Ctrl + Shift + V" 来执行
Ctrl + C这个组合键只能作用于当前终端中正在运行的程序
而Linux 中很多进程是你看不到的,在后台运行
而Linux 中很多进程是你看不到的,在后台运行
kill 命令:结束一个进程..
kill 是英语“杀死”的意思,有点“小暴力”
kill 命令后接需要结束的进程号,也就是之前我们看到过的PID
可以通过ps命令或top命令来获知进程的PID
kill 命令后接需要结束的进程号,也就是之前我们看到过的PID
可以通过ps命令或top命令来获知进程的PID
sudo kill PID
进程是root用户启动的,前面加上sudo
kill 8461 8561 1706
同时用kill来结束好几个进程,只要用空格隔开它们的PID
kill -9 PID
可以用kill -9 PID来立即强制结束进程
立即结束PID的进程,非常“野蛮粗暴”
killall
同一个程序运行时可能启动多个进程
一个更快捷的命令: killall
all是英语“全部”的意思
一个更快捷的命令: killall
all是英语“全部”的意思
killall 命令就是用于结束全部要结束的进程
不同于kill 命令, killall 命令后接程序名,而不是PID(进程号)
不同于kill 命令, killall 命令后接程序名,而不是PID(进程号)
例子
假设我开了好几个终端,每个终端我都运行find命令
列出所有oscar用户运行的find命令。前提是如果他们是不同的终端去打开的话。
ps -u oscar | grep find
killall find
系统监控软件
glance软件
安装
sudu
yum install epel* -y
yum install python-pip python-devel -y
yum install glances -y
yum install python-pip python-devel -y
yum install glances -y
htop 软件
我们上面在安装glances的时候 已经安装过epel这个软件。所以我们这里在安装htop的时候,只需要运行第二句话就可以了。
yum install -y epel-release
yum install -y htop
yum install -y htop
运行htop
q退出软件的显示
管理前后台进程
概念
默认情况下,用户创建的进程都是前台进程
前台进程从键盘读取数据,并把处理结果输出到显示器
前台进程从键盘读取数据,并把处理结果输出到显示器
例如ls就是列出当前目录下的文件。这些命令就是运行在前台的
后台进程与键盘没有必然的关系
当然,后台进程也可能会等待键盘输入
后台进程的优点是不必等待程序运行结束
就可以输入其他命令
后台进程的优点是不必等待程序运行结束
就可以输入其他命令
&
在后台运行进程
cp file.txt file-copy.txt &
1表示它是当前终端的第一个后台进程。 15479就是PID进程号
Done表示这个后台进程执行完毕
Done表示这个后台进程执行完毕
sudo find / -name "*log" &
以root身份在根目录查找所有以.log结尾的文件。 最后&表示在后台运行。
让终端记住oscar的密码。先用sudo su 输入oscar的密码 这样就切换成了root用户。
然后exit退出root用户身份。这样当前终端就是暂时记住了你的用户密码
然后exit退出root用户身份。这样当前终端就是暂时记住了你的用户密码
我们再运行这句。这样就不会提示你再输入oscar的密码了
终端中一直在显示查找到的内容
不得不ctrl+C退出上面命令的运行结果页
不得不ctrl+C退出上面命令的运行结果页
sudo find / -name "*log" > output_file &
可以把find的结果重定向到文件内
这样不会一直有信息输出了。
但是还是会有点信息输出,标准错误信息。
但是还是会有点信息输出,标准错误信息。
可以把标准错误信息也重定向到文件内 2>&1
sudo find / -name "*log" > output_file 2>&1 &
&符号虽然常用,但却有一个不可忽视的缺点
就是:后台进程与终端相关联
一旦终端关闭或者用户登出,进程就自动结束
就是:后台进程与终端相关联
一旦终端关闭或者用户登出,进程就自动结束
nohup
使进程与终端分离
想让进程在以上情况下仍然继续在后台运行
须要用到nohup命令
须要用到nohup命令
当用户注销(logout)或者网络断开时,终端会收到HUP
(hangup 的缩写, “挂断”的意思)信号从而关闭其所有子进程
终端被关闭时也会关闭其子进
(hangup 的缩写, “挂断”的意思)信号从而关闭其所有子进程
终端被关闭时也会关闭其子进
可以用nohup命令使命令不受HUP 信号影响
man nohup的命令解释
nohup cp file.txt file-copy.txt
忽略输入了。把输出都追加到了nohup.out文件中
ps -ax | grp command
nohup cp file.txt file-copy.txt &
使前台进程转为后台进程
进程在后台运行,在执行命令的时候却忘了在最后加上&符号。如果再使这个进程转为后台进程呢?
新打开一个终端,这样后台的编号会重新从1开始编号
新打开一个终端,这样后台的编号会重新从1开始编号
用top命令演示
top命令是实时的显示各种信息
如果我们按ctrl+z的组合键,倒数第二行 就显示了[1] Stopped
Ctrl + Z
转到后台,并暂停运行
stopped 是英语“停止的”的意思
此时已经放在后台,子进程还是内存中,只不过被暂停运行了。因为Stopped是停止的意思。
下面命令行又出现了。我们又可以做其他的命令。
下面命令行又出现了。我们又可以做其他的命令。
bg
使进程转到后台
bg是英语background 的缩写,表示“后台”
bg命令的作用是将命令转入后台运行
bg命令的作用是将命令转入后台运行
假如命令已经在后台,并且暂停着
那么bg命令会将其状态改为运行
那么bg命令会将其状态改为运行
不加任何参数,bg命令会默认作用于最近的一个后台进程
也就是刚才被Ctrl +Z暂停的,top进程
也就是刚才被Ctrl +Z暂停的,top进程
再来查看进程的信息
ps -aux
top 的PID是17001.它的状态是T
如果后面加%1%2这样的参数
(不带%,直接用1,2也可以)
则是作用于指定标号的进程
(不带%,直接用1,2也可以)
则是作用于指定标号的进程
进程转入后台之后,会显示它在当前终端下的后台进程编号
bg %2 就是作用于编号为2的后台进程
bg %2 就是作用于编号为2的后台进程
fg
使进程转到前台
fg是英语foreground 的意思,表示“前台”
fg命令的作用是:使进程转为前台运行
用法也很简单,和bg类似
fg命令的作用是:使进程转为前台运行
用法也很简单,和bg类似
fg 2:运行的是 sudo grep -r "log" / > grep_log 2>&1 &
不加参数
fg
会把top命令转到前台运行
进程状态
jobs
显示后台进程状态
job 是英语“工作”的意思,jobs 是job 的复数形式
jobs 命令的作用是显示当前终端里的后台进程状态
jobs 命令的作用是显示当前终端里的后台进程状态
5种常见的进程状态
R
运行(正在运行或在运行队列中等待)
对于的状态码是R,表示“运行 rupnable (on run queue)"
S
中断(休眠中,受阻
当某个条件形成后或接受到信号时,则脱离该状态
对于的状态码是S,表示“中断sleeping"
当某个条件形成后或接受到信号时,则脱离该状态
对于的状态码是S,表示“中断sleeping"
D
不可中断(进程不响应系统异步信号,
即使用kill 命令也不能使其中断)
对于的状态码是D,表示“不可中断uninterruptible sleep"
即使用kill 命令也不能使其中断)
对于的状态码是D,表示“不可中断uninterruptible sleep"
Z
僵死(进程已终止,但进程描述符依然存在
直到父进程调用wait4()系统函数后将进程释放)
对于的状态码是Z,表示“僵死a defunct ("zombie") process"
直到父进程调用wait4()系统函数后将进程释放)
对于的状态码是Z,表示“僵死a defunct ("zombie") process"
T
停止(进程收到 SIGSTOP , SIGSTP, SIGTIN
,SIGTOU 等停止信号后停止运行)
对于的状态码是T,表示“停止 traced or stopped"
,SIGTOU 等停止信号后停止运行)
对于的状态码是T,表示“停止 traced or stopped"
图解
停止和重启系统
halt
关闭系统
sudo halt
reroot
重启系统
sudo reboot
需要以root身份才能重启系统
shutdown
halt 和reboot 这两个命令都调用了Linux 的另一个命令
poweroff
立即关机
直接运行即可关机,不需要root 身份
任务的定时和延时
date
最基本的就是输出当前时间
调节时间
定制date的输出
显示当前时间:date "+%H:%M:%S"
M是英语minute的首字母,表示“分钟"
S是英语second的首字母,表示“秒”
S是英语second的首字母,表示“秒”
date "+%H时%M分%S秒"
修改系统时间
修改系统时间需要使用root身份
sudo date 时间戳
...
at
延时执行一个程序
可以用at 命令来设定一个程序的执行时间
at是英语“在时刻”的意思
注意:at命令只能让程序执行一次
at是英语“在时刻”的意思
注意:at命令只能让程序执行一次
先yum安装at命令
sudo yum install at
sudo yum install at
已经安装过 会提示,已经安装,并且是最新版本
在指定时刻执行程序
在这种用法下,at 命令的使用顺序如下
先用at 命令后接想要程序执行的确定时刻
再输入你想要在以上指定时刻执行的命令
先用at 命令后接想要程序执行的确定时刻
再输入你想要在以上指定时刻执行的命令
at>就是要输入在 22:10要执行的命令。
at 22:10
输入:touch file.txt
at 22:10
输入:touch file.txt
那么怎么结束输入并退出at命令呢?
可以使用Ctrl +D组合键, at会显示<EOT>
是“End Of Transmission" (表示“传输结束” )的缩写
可以使用Ctrl +D组合键, at会显示<EOT>
是“End Of Transmission" (表示“传输结束” )的缩写
job :英语“工作,任务”的意思,表示创建了一个任务
1:是job的编号。表示第1号任务
at:“在时刻",也正是at 命令的作用所在
1:是job的编号。表示第1号任务
at:“在时刻",也正是at 命令的作用所在
在明天的22点10分执行
at 22:10 tomorrow
tomorrow 是英语,"明天”的意思
at 22:10 tomorrow
tomorrow 是英语,"明天”的意思
在2019年12月10日的22点10分执行
at 22:10 12/10/19
日期的格式是美国日期的格式,12/10/19依次是“月/日/年"
at 22:10 12/10/19
日期的格式是美国日期的格式,12/10/19依次是“月/日/年"
在指定间隔之后执行程序
at还有第二种用法,就是在指定时间间隔之后执行程序
在10分钟之后执行指定程序
在10分钟之后执行指定程序
at now + 10 minutes:现在开始的10分钟之后执行
at now +7 weeks表示在距今7个星期之后执行
atq
列出正等待执行的at任务
q是英语queue的首字母,表示,“队列"
atq命令会列出at命令的任务队列
atq命令会列出at命令的任务队列
atrm
删除正在等待执行的at任务
rm是英语remove 的首字母,remove表示“删除"
atrm 命令后接at任务的编号,例如1,2,3,4...0
atrm 命令后接at任务的编号,例如1,2,3,4...0
sleep
休息一会
可以用分号隔开多个命令,使之一个接一个执行
这跟之前学过的管道不一样
管道是前一个命令的输出作为后一个命令的输入
这跟之前学过的管道不一样
管道是前一个命令的输出作为后一个命令的输入
用分号隔开的各个命令并没有关联
例如 touch file.txt ; rm file.txt
创建file.txt文件,然后再删除它
例如 touch file.txt ; rm file.txt
创建file.txt文件,然后再删除它
在两句命令之间可以插入一定的暂停等待时间
用sleep 命令
sleep 是英语“睡觉,睡眠”的意思
用sleep 命令
sleep 是英语“睡觉,睡眠”的意思
touch file.txt ; sleep 10 ; rm file.txt
touch file.txt :创建文件 file.txt
sleep 10 :暂停 10秒
rm file.txt :删除 file.txt
sleep 10 :暂停 10秒
rm file.txt :删除 file.txt
默认地,sleep后面的数值表示秒
m: minute 的缩写,表示“分钟"
h: hour 的缩写,表示“小时"
d: day的缩写,表示“天”
h: hour 的缩写,表示“小时"
d: day的缩写,表示“天”
touch file.txt; sleep 15m ; rm file.txt
上面的三句命令会依次执行
创建file.txt文件,暂停15分钟,删除file.txt文件
创建file.txt文件,暂停15分钟,删除file.txt文件
关键字
minutes :表示“分钟
"hours :表示“小时"
days :表示“天"
weeks :表示“星期"
months :表示"月"
years :表示“年"
"hours :表示“小时"
days :表示“天"
weeks :表示“星期"
months :表示"月"
years :表示“年"
&&和||符号
这两个在编程语言里一般称为“逻辑与”和“逻辑或”符号
&&及||和分号一样,用于分隔两个命令,使得命令依次执行
貌似和分号类似,但是有区别
&&及||和分号一样,用于分隔两个命令,使得命令依次执行
貌似和分号类似,但是有区别
&&号前的命令执行成功,才会执行后面的命令
||前的命令执行失败,才会执行后面的命令
分号:不论分号前的命令执行成功与否,都执行分号后的命令
crontab
定时执行程序
at 命令,只能执行某个(或某几个)命令一次
crontab 却可以重复执行命令
例如:每小时,每分钟,每天,每星期,等等
crontab 却可以重复执行命令
例如:每小时,每分钟,每天,每星期,等等
安装crontab
一般来说,CentOS下是默认安装了crontab程序的
不过有的Linux发行版可能没装crontab
举yum系列和apt系列两个例子
不过有的Linux发行版可能没装crontab
举yum系列和apt系列两个例子
在CentOS ( Red Hat -族)中安装 Crontab
sudo yum install vixie-cron crontabs #安装 Crontab
chkconfig crond on#设为开机自启动
service crond start ,#启动
chkconfig crond on#设为开机自启动
service crond start ,#启动
在Ubuntu ( Debian-族)中安装Crontab
sudo apt install cron#安装
crontabservice cron restart 或者 restart cron #重启 crontab
crontabservice cron restart 或者 restart cron #重启 crontab
前期配置工作
让Nano这个文本编辑器成为我们默认的文本编辑器
因为CentOS系统一般默认的文本编辑器是vi
而vi是比较难的文本编辑器,之后学习vi和vim
因为CentOS系统一般默认的文本编辑器是vi
而vi是比较难的文本编辑器,之后学习vi和vim
来修改.bashrc这个文件
这是Bash这个Shell
(简单地说就是控制我们当前终端的程序)的配置文件
这是Bash这个Shell
(简单地说就是控制我们当前终端的程序)的配置文件
把这一句话加入.bashrc文件
export EDITOR=nano
export EDITOR=nano
用我们学过的重定向知识,我们可以这样。两个大于号表示追加。
echo "export EDITOR=nano" >> ~/.bashrc
echo "export EDITOR=nano" >> ~/.bashrc
cat .bashrc
这句话的意思是 让系统的默认编辑器是nano
soyrce .bashrc
使用source。让这个命令立即生效
概念
crontab其实是一个命令,用来读取和修改名为crontab 的文件
crontab 文件包含了你要定时执行的程序列表,也包含了执行的时刻
crontab 文件包含了你要定时执行的程序列表,也包含了执行的时刻
实际上,有两个命令,一个叫 crontab,一个叫 cron
crontab 用于修改 crontab文件,cron 用于实际执行定时的程序
cron 这个单词来源于希腊语xpóvo (chronos ),原意是“时间"
crontab 用于修改 crontab文件,cron 用于实际执行定时的程序
cron 这个单词来源于希腊语xpóvo (chronos ),原意是“时间"
三个主要参数
-l:显示crontab文件
-e :修改crontab文件
-r:删除,crontab文件
-e :修改crontab文件
-r:删除,crontab文件
操作基础
修改crontab文件。如果没有就是创建。因为我们上面配置了默认的编辑器是nano,所以默认就会用nano来打开
crontab -e
编辑的格式 m h dom mon dow command
上面的这句话给出了crontab中的每行指令的书写格式
上面的这句话给出了crontab中的每行指令的书写格式
m: minute的缩写,表示“分钟"
h: hour 的缩写,表示“小时"
dom : day of month 的缩写,表示“一个月的哪一天"
h: hour 的缩写,表示“小时"
dom : day of month 的缩写,表示“一个月的哪一天"
mon : month 的缩写,表示“月份"
dow : day of week 的缩写,表示“星期几"
command :英语“命令”的意思,表示需要定时执行的命令
dow : day of week 的缩写,表示“星期几"
command :英语“命令”的意思,表示需要定时执行的命令
操作示例
修改crontab文件
每天的22点10分都在家目录下创建file.txt文件
可以在crontab文件里写入
可以在crontab文件里写入
10 22 * * * touch ~/file.txt
10表示分钟,22表示小时,其他三个区域是*
最后的命令是touch ~/file.txt
最后的命令是touch ~/file.txt
保存文件,输入y然后回车
如果语法正确的话, crontab会显示
crontab: installing new crontab
意思是:“安装新的crontab文件"
crontab: installing new crontab
意思是:“安装新的crontab文件"
路径最好用绝对路径
因为你并不能确定cron命令执行这些语句的时候是在哪个目录
不过~就是代表当前用户的家目录了
因为你并不能确定cron命令执行这些语句的时候是在哪个目录
不过~就是代表当前用户的家目录了
删除crontab文件
crontab -r
文件的解压和压缩
基础
windows
常用压缩格式
rar
zip
软件
WinRAR
7-Zip
Linux
软件
gzip
gzip常用
.tar.gz :用 gzip 命令压缩后的文件后缀名
命令
bzip2
bzip2不是那么常用,压缩比gzip更大,但是更耗时
.tar.bz2:用bzip2 命令压缩后的文件后缀名
tar
同时压缩多个文件
tar gzip 和bzip2 zip rar
将多个文件归档
概念
打包
打包:是将多个文件变成一个总的文件
这个总的文件我们通常称为archive
是英语“存档归档”的意思
这个总的文件我们通常称为archive
是英语“存档归档”的意思
压缩
将一个大文件通过某些压缩算法变成一个小文件
tar命令, gzip 和bzip2 命令的使用
首先,用tar将多个文件归档为一个总的文件,称为archive
然后,用gzip 或bzip2命令将archive压缩为更小的文件
然后,用gzip 或bzip2命令将archive压缩为更小的文件
tar的参数
-cvf 创建一个tar归档
tar -cvf sorting.tar sorting/
c: create的缩写,表示“创建”
v: verbose 的缩写,表示“冗余” 。会显示操作的细节
f: file的缩写,表示“文件” 。指定归档文件
v: verbose 的缩写,表示“冗余” 。会显示操作的细节
f: file的缩写,表示“文件” 。指定归档文件
可以直接对文件进行归档操作,不需要先把所有文件放到一个目录里
tar -cvf archive.rar file1.txt,file2.txt,file3.txt
把file1.txt,2.txt.3,txt归档为archive.rar
-tf 显示归档里的内容,并不解开归档
tar -tf sorting.tar
-rvf 追加文件到归档
tar -rvf archive.tar file_extra.txt
将file_extra.txt 这个文件添加到 archive.tar归档中
-xvf 解开归档
是-cvf的相反操作。将生成的归档解开
x是extract 的缩写,表示“提取,取出”
x是extract 的缩写,表示“提取,取出”
tar -xvf sorting.tar
gzip
压缩
gzip sorting.tar
相当于压缩后,把原来的sorting.tar文件删掉了
解压
gunzip sorting.tar.gz
bzip2
压缩
bzip2 sorting.tar
解压
bunzip2 sorting.tar.bz2
提示文件已经存在了,先把tar删除,再来解压 rm -rf sorting.tar
同时归档和压缩
可以用tar命令同时完成归档和压缩的操作,一气呵成
就是给tar命令多加一个选项参数,使之完成归档操作后
还是调用gzip 或bzip2命令来完成压缩操作
就是给tar命令多加一个选项参数,使之完成归档操作后
还是调用gzip 或bzip2命令来完成压缩操作
jar和gzip
压缩
tar -zcvf sorting.tar.gz sorting
-zcvf: 归档, 然后用gzip来压缩归档.
解压
tar -zxvf sorting.tar.gz
解压zxvf中的x就是提取的意思
jar和bzip2
压缩
tar -jcvf sorting.tar.bz2 sorting/
解压
tar -jxvf sorting.tar.bz2
显示用gzip/bzip2压缩的文件的内容
cat soring.tar.gz显示压缩文件的内容
显示乱码
zcat soring.tar.gz
显示了压缩文件的三个文件的内容
bzcat sorting.tar.bz2
显示的是文件的内容
more的派生
zmore
bzmore
less的派生
zless
bzless
如果某个windows用户给你发送的文件大部分都是.zip和.rar结尾的压缩文件
用unzip和unrar来解压
sudo yum install unzip
# Red Hat ,族中的安装方式
centos中自带了zip的程序了。不用再单独安装
压缩
zip -r sorting.zip sorting/
-r
r是recursively 的缩写,表示“递归地”
加上-r参数就是递归的压缩子目录内的所有文件
解压
unzip archive.zip 解压.zip文件
解压后直接就是压缩文件内的内容,注意看是否需要建个文件夹,解压到文件夹内
unzip -l archive.zip 不解压,只查看其中的内容
rar压缩文件
安装
压缩
rar a sorting.rar sorting/
a是add的缩写,表示“添加”
解压
unrar e sorting.rar
e是extract的缩写,表示“提取,取出”ا
它没有解压到目录而是把三个文件直接解压出来了
查看
unrar l archive.rar #不解开.rar文件,只想看其中的内容
编译安装软件
yum这种安装方式,比较方便安装大部分的软件。
有些软件并没有包含在仓库中,只能手动安装,也就是只能下载的源代码,编译、生成可执行文件。
有些软件并没有包含在仓库中,只能手动安装,也就是只能下载的源代码,编译、生成可执行文件。
编译安装的大致步骤
下载源代码
首先尝试找安装包
这一部分涉及到的软件包安装等知识点
是基于Red Hat 一族的Linux发行版,包括CentOS
其他不是Red Hat 一族的Linux发行版,安装软件的方式大同小异
是基于Red Hat 一族的Linux发行版,包括CentOS
其他不是Red Hat 一族的Linux发行版,安装软件的方式大同小异
在Windows下面,要安装某个软件
我们很习惯于先去软件的官网,下载.exe结尾的安装文件
现在的Windows安装软件也可以从Microsoft Store安装
我们很习惯于先去软件的官网,下载.exe结尾的安装文件
现在的Windows安装软件也可以从Microsoft Store安装
Linux系统有太多变数
Linux 存在极为多样的发行版
比如 CentOS , Fedora , Ubuntu , SUSE ,等等
每个发行版又有不同版本号
比如 CentOS , Fedora , Ubuntu , SUSE ,等等
每个发行版又有不同版本号
又有不同的处理器种类
(32位的和64位的CPU。 ARM架构,Intel架构,等等)要适配
不像Windows因为是微软公司自己定义,没有太多变数,
(32位的和64位的CPU。 ARM架构,Intel架构,等等)要适配
不像Windows因为是微软公司自己定义,没有太多变数,
要为每种Linux创建一个安装文件几乎成了不可能的事
当我们要找的软件不在CentOS的软件仓库中时
可以试试去软件的官方网站找后缀是.rpm的安装包
rpm Redhat Package Manager 的缩写
可以试试去软件的官方网站找后缀是.rpm的安装包
rpm Redhat Package Manager 的缩写
rpm的安装包用于Red Hat一族的操作系统,包括CentOS
Debian-族(包括Ubuntu 和Debian )用后缀为.deb的安装包
deb 是Debian 的缩写
Debian-族(包括Ubuntu 和Debian )用后缀为.deb的安装包
deb 是Debian 的缩写
Debian后缀格式为.deb
alien 软件
可以将deb安装包和rpm安装包互相转换
这个软件是alien (“外星人”的意思)
安装
sudo yum install alien
输入y确认安装
man alien的用法
将deb转换为rpm
sudo alien -r xxx.deb
例子
下载搜索的linux版本
下载后,放在共享文件夹内。切换到root用户,可以看到share文件夹下的文件。
ls share/sogoupinyin_2.2.0.0108_amd64.deb
ls share/sogoupinyin_2.2.0.0108_amd64.deb
拷贝到当前目录
cp share/sougoupinyin_2.2*
cp share/sougoupinyin_2.2*
转换成一个rpm软件包:alien -r
安装rpm安装包
sudo rpm -i xxx.rem
安装失败了。需要Qt这样一个库
注意,用alien转换成的rpm包并不能保证100%顺利安装
能找到rpm安装包的话,最好直接用rpm
安装rpm安装包如果出错
也许rpm安装包不符合你的电脑环境
可能位数搞错了,32位和64位是有区别的
可能位数搞错了,32位和64位是有区别的
也许你没有安装那些依赖软件
安装搜狗拼音出错是因为没有安装依赖的软件
yum工具会帮我们自动下载各种依赖软件
不需要我们亲自动手
rpm直接安装rpm的包,相关的依赖不会自动去下载的
实在找不到rpm安装包
编译安装
源代码->自己编译
简单来说,编译就是将程序的源代码转换成可执行文件的过程
大多数Linux的程序都是开放源码的
可以编译成适合我们的电脑和操作系统属性的可执行文件
大多数Linux的程序都是开放源码的
可以编译成适合我们的电脑和操作系统属性的可执行文件
README 文本文件
read是英语“阅读”的意思
me是英语“我”的宾语形式
README文件一般会说明详细的安装步骤
me是英语“我”的宾语形式
README文件一般会说明详细的安装步骤
一步步编译程序
以htop这样一个小软件来讲解编译
之前我们学过top命令,可以查看电脑中的各种性能状态,占用多少内存、cpu用量等等。
有点类似于windows中的任务管理器
htop是类似于top命令的软件,颜值高一些
有点类似于windows中的任务管理器
htop是类似于top命令的软件,颜值高一些
第一步去软件的官网: https://hisham.hm/htop
源码地址: https://hisham.hm/htop/releases
2.2.0 版的源码: https://hisham.hm/htop/releases/2.2.0
源码地址: https://hisham.hm/htop/releases
2.2.0 版的源码: https://hisham.hm/htop/releases/2.2.0
下载
找到最新版
解压
放到了share文件夹下
复制到当前目录下
cp share/htop-2.0.0.tar.gz
cp share/htop-2.0.0.tar.gz
ll
目前它的所有者和群组都是root
把所有者和群组改成oscar
chown oacar:oscar htop-2.2.0.tar.gz
chown oacar:oscar htop-2.2.0.tar.gz
解压
tar zxvf htop-2.0.0.tar.gz
编译
进入到这个目录
cd htop-2.2.0/
cd htop-2.2.0/
运行这个配置文件
它会分析你的电脑,是否编译相关所需的程序都安装了。执行过程需要一些时间
最后一行有个错误
我们先来试试,--disable -unicode这个命令。
还是提示
安装完成
再来运行configure
编译源码。使用make命令。
安装
安装完成
运行htop
解压压缩包
配置
编译
安装
安装rar和unrar
用wget命令获取压缩包
wget https://www.rarlab.com/rar/rarlinux-x64-5.7.0.tar.gz
man wget可以看到手册
用tar解压这个压缩文件
会生成一个rar的目录
进入到rar目录
已经编译好了这两个可执行程序
运行makefile文件。输入make 空格会自动变成cat 命令
用sudo管理员权限去执行make文件。可以看到里面有三个程序了。htop\rar\unrar
echo $PATH删除环境变量,usr/local/bin是在环境变量中的。所以这几个命令可以在全局被调用
输入rar可以显示它的用法
文件传输
wget
下载文件
wget 可以使我们直接从终端控制台下载文件
只需要给出文件的HTTP或FTP地址
只需要给出文件的HTTP或FTP地址
优点
wget非常稳定
它在带宽很窄的情况下和不稳定网络中有很强的适应性
它在带宽很窄的情况下和不稳定网络中有很强的适应性
如果是由于网络的原因下载失败
wget 会不断地尝试,直到整个文件下载完毕
wget 会不断地尝试,直到整个文件下载完毕
如果是服务器打断下载过程
它会再次联到服务器上从停止的地方继续下载
这对从那些限定了链接时间的服务器上下载大文件非常有用
它会再次联到服务器上从停止的地方继续下载
这对从那些限定了链接时间的服务器上下载大文件非常有用
参看wget的使用手册
man wget
wget 的一个优点是会显示下载的进度
man wget
wget 的一个优点是会显示下载的进度
安装wget
sudo yum install wget
命令格式
wget [参数] [URL地址]
例如
wget http://cdimage.debian.org/debian-cd/10.1.0/amd64/isocd/debian-10.1.0-amd64-netinst.iso
继续中断的下载
要继续一个中断的下载,只要在相同的下载命令中加入-c参数
wget -c XXX
wget -c XXX
c是英语 continue的缩写,表示“继续”
其他
ctrl+c
结束
未下载完结束,删掉文件
下载地址的获取方法
scp
网间拷贝
cp是英语copy的缩写,表示"拷贝"
scp是Secure CoPy 的缩写,表示“安全拷贝”
scp可以使我们通过网络,把文件从一台电脑拷贝到另一台
scp是Secure CoPy 的缩写,表示“安全拷贝”
scp可以使我们通过网络,把文件从一台电脑拷贝到另一台
scp是基于 SSH (Secure SHell )的原理来运作的
SSH 会在两台通过网络连接的电脑之间创建一条安全通信的管道
SSH 会在两台通过网络连接的电脑之间创建一条安全通信的管道
scp source_file destination_file
source_file表示源文件,就是被拷贝的文件
destination_file 表示目标文件,就是拷贝产生的文件
destination_file 表示目标文件,就是拷贝产生的文件
这两个文件都可以用如下方式来表示 user@ip:file_name
user是登录名, ip 是域名(google.com) 或ip地址(216.58.206.238)
file name是文件路径。不要忘了中间的@号和冒号(:)
user是登录名, ip 是域名(google.com) 或ip地址(216.58.206.238)
file name是文件路径。不要忘了中间的@号和冒号(:)
从自己电脑拷贝文件到另一台电脑
scp file.txt root@192.168.1.5:/root
表示把我的电脑中当前文件夹下的file.txt文件拷贝到远程电脑
(ip地址是192.168.1.5)的用户root 的/root 目录下
(ip地址是192.168.1.5)的用户root 的/root 目录下
网络相关
server端的 ip地址
设置的网络连接是桥接的方式
例子
服务器端家目录有这些文件
复制name.txt到服务器端
在服务器端,多了个name.txt文件。
从另一台电脑拷贝文件到自己电脑
scp root@192.168.1.5:/root/file.txt file_changed_name.txt
表示从远程电脑(ip地址是192.168.1.5)的用户root的/root目录
把file.txt拷贝到我的电脑中当前文件夹下,并改名
把file.txt拷贝到我的电脑中当前文件夹下,并改名
修改端口
scp命令的默认端口号是22,和SSH一样
可以修改端口号,用-P参数(p是port的缩写,表示“端口”
scp -P 7821 root@192.168.1.5:/root/file.txt.
可以修改端口号,用-P参数(p是port的缩写,表示“端口”
scp -P 7821 root@192.168.1.5:/root/file.txt.
ftp & sftp 5
ftp
文件服务器
FTP 是File Transfer Protocol 的缩写,表示“文件传输协议"
FTP 协议已经有些年纪了,1985年诞生
FTP现在仍然是传输文件的最常用协议
FTP 协议已经有些年纪了,1985年诞生
FTP现在仍然是传输文件的最常用协议
使用FTP 主要分为两种情况
从公共的FTP服务器下载文件
从私有的FTP服务器上传或下载文件
安装ftp命令
sudo yum install ftp
连接到FTP服务器
ftp -p ftp.fr.debian.org
-p参数,p是passive的缩写,表示“被动的”
passive 是FTP 的一种模式
passive 是FTP 的一种模式
试着连接到Debian的镜像FTP服务器
https://www.debian.org/mirror/list
试试 Debian 在法国的FTP 服务器: ftp.fr.debian.org
https://www.debian.org/mirror/list
试试 Debian 在法国的FTP 服务器: ftp.fr.debian.org
链接进去了 让你填写用户名
对于公共的FTP 服务器,用户名( Name)一般都填写anonymous
anonymous 表示“匿名的"
anonymous 表示“匿名的"
password随便输入都被接收
在FTP服务器中操作
Is :列出当前目录的文件
pwd :显示当前目录的路径
cd:转换目录
pwd :显示当前目录的路径
cd:转换目录
也可以在浏览器上,输入ftp的地址登陆
用FTP 进行文件传输
如果你想上传及下载文件,需要知道两个命令
put:用于上传文件。put是英语“放入”的意思
get:用于下载文件。get是英语“获得”的意思
put:用于上传文件。put是英语“放入”的意思
get:用于下载文件。get是英语“获得”的意思
进入到debian文件夹中
列出里面的文件
用get命令下载README这个文档
链接到FTP服务器了 又想用本地的linux的命令
!
put上传,当前目录的文件
没有权限
其他的FTP命令
用man ftp来查看ftp的命令手册
比如,删除文件不是用rm命令,而是delete命令
比如,删除文件不是用rm命令,而是delete命令
ctrl+d退出ftp
也可以用bye , exit 或 quit 命令,效果是一样的
sftp 安全加密的ftp
概述
ftp命令虽然方便,但是有一个致命缺点:不安全
数据不是加密传输的
数据不是加密传输的
sftp是Secure FTP 的缩写。表示“安全的FTP
"sftp也是基于SSH 的,所以登录需要用户名和密码
"sftp也是基于SSH 的,所以登录需要用户名和密码
用法
sftp user@ip
例如 sftp osçar@xxx.com
sftp的默认端口号是22,和SSH一样
可以修改端口号,用-oPort参数
sftp -oPort 3592 oscar@89.231.45.67
可以修改端口号,用-oPort参数
sftp -oPort 3592 oscar@89.231.45.67
rsync 同步备份
rsync remote synchronize 的缩写
remote 表示“远程" , synchronize 表示“同步"
因此rsync命令主要用于“远程同步文件”
remote 表示“远程" , synchronize 表示“同步"
因此rsync命令主要用于“远程同步文件”
如果系统没有rsync命令,可以安装
sudo yum install rsync
sudo yum install rsync
rsync 命令使我们可以同步两个目录
不管这两个目录位于同一台电脑还是不同的电脑(用网络连接)
不管这两个目录位于同一台电脑还是不同的电脑(用网络连接)
rsync应该是最常用于“增量备份”的命令了
增量备份(incremental backup )是备份的一种类型
指在一次全备份或上一次增量备份后
以后每次的备份只需备份与前一次相比增加或者被修改的文件
指在一次全备份或上一次增量备份后
以后每次的备份只需备份与前一次相比增加或者被修改的文件
rsync 就好像更智能的scp命令
命令
用rsync备份到同一台电脑的其他目录
rsync -arv Images/ backups/
将Images 目录下的所有文件备份到backups目录下
-arv参数
-a:保留文件的所有信息,包括权限,修改日期,等等。
a是archive的缩写,是“归档”的意思
a是archive的缩写,是“归档”的意思
-r:递归调用。表示子目录的所有文件也都包括
r是recursive的缩写,是“递归的”的意思
r是recursive的缩写,是“递归的”的意思
-v冗余模式。输出详细操作信息。
v是verbose的缩写,是“冗余的”的意思
v是verbose的缩写,是“冗余的”的意思
删除文件
默认地,rsync在同步时并不会删除目标目录的文件
例如,你的源目录(被同步目录)中删除了一个文件
但是用rsync同步时,它并不会删除同步目录中的相同文件
例如,你的源目录(被同步目录)中删除了一个文件
但是用rsync同步时,它并不会删除同步目录中的相同文件
本地的目录删除了 ,远端也希望删除的话
rsync -arv --delete Images/ backups/
加上--delete参数就可以了。delete是英语“删除”的意思
用rsync备份到另一台电脑的目录
rsync -arv --delete Images/ oscar@89.231.45.67:backups/
更多参数,可以用man rsync学习
强大的rsynd
你可以自己配置rsync,使得它从指定目录(可以是多个目录)备份到指定的ip地址的目录下,而且可以指定哪些类型文件是要备份的,哪些类型不要备份,然后把这一长串命令统一用Shell脚本来写成一个文件(例如取名叫backup),使之可执行(用chmod +X命令),再把这个文件的路径添加到PATH环境变量中
连接远程终端
加密
ssh
服务器
安装
安装 SSH : yum install openssh-server
启动SSH : systemctl start ( restart) sshd
设置开机运行 SSH: systemctl enable sshd
启动SSH : systemctl start ( restart) sshd
设置开机运行 SSH: systemctl enable sshd
查看进程
ps -ef | grep ssh
列出所有被激活的,开机启动的
systemctl list-unit-files | grep enabled
使用
客户端
安装
Windows P端:安装 Putty, XShell 或 SecureCRT
Linux 客户端: yum install openssh-clients
macOS客户端:默认已经安装了SSH客户端
Linux 客户端: yum install openssh-clients
macOS客户端:默认已经安装了SSH客户端
linux
安装openssh
sudo yum install openssh-clients
sudo yum install openssh-clients
使用
ssh
连接服务器
免密登录
SSH 的两种安全验证方法
基于口令
用账户和密码来验证登录
基于密钥
客户机生成密钥对(公钥和私钥),把公钥上传到服务器
并与服务器的公钥进行比较
这种验证登录的方法更加安全,也被称为“公钥验证登录”
并与服务器的公钥进行比较
这种验证登录的方法更加安全,也被称为“公钥验证登录”
公钥验证登录
第1步:在客户机中生成密钥对(公钥和私钥)
ssh-keygen (默认使用RSA 非对称加密算法)
以上命令等价于 ssh-keygen -t rsa
ssh-keygen (默认使用RSA 非对称加密算法)
以上命令等价于 ssh-keygen -t rsa
搜索-t参数。、指定生成什么样的密钥
生成密钥
指定保存密钥对的路径
默认是在家目录的 .ssh目录下
不指定,直接回车就可以了
输入密钥对,加密的密码。再次输入密码
生成好了
在~/.ssh/目录下,会新生成两个文件
id_rsa.pub : 公钥
id_rsa:私钥
id_rsa.pub : 公钥
id_rsa:私钥
cat id_rsa
私钥一般比较长
第2步:把客户机的公钥传送到服务器
şsh-copy-id root@172.20.10.2
şsh-copy-id root@172.20.10.2
ssh-coopy-id默认就会把家目录下的id_rsa.pub文件 拷贝到远程的服务器上
ssh-copy-id 把客户机的公钥追加到服务器的一个文件
authorized_keys~/.ssh/authorized_keys
authorized_keys~/.ssh/authorized_keys
在服务器上
在客户端访问到服务器上
看下known_hosts里面的内容
输出keys
服务器上输出的就是我们 客户端的公钥
免密码登录测试
设置SSH 免密码后仍想使用密码登录
ssh -o PreferredAuthentications=password -o
PubkeyAuthentication=no user@host
PubkeyAuthentication=no user@host
为了免去每次用SSH协议连接远程机器都要输入用户密码的麻烦
我们可以创建一个用于验证身份的密钥对(公钥和私钥)
我们可以创建一个用于验证身份的密钥对(公钥和私钥)
公钥需要传输并储存到远程机器上
私钥则存在我们自己的电脑里
之后,我们的SSH 连接就不需要输入密码了
私钥则存在我们自己的电脑里
之后,我们的SSH 连接就不需要输入密码了
windows免密登陆的方式
用config文件配置SSH
服务器
看下sshd的状态
sustemctl status sshd
config 是英语 configuration 的缩写,表示“配置
"config文件可以配置SSH,方便批量管理多个SSH 连接
"config文件可以配置SSH,方便批量管理多个SSH 连接
全局config文件
SSH 客户端的配置: /etc/ssh/ssh_configSSH
服务端的配置: /etc/ssh/sshd_config
服务端的配置: /etc/ssh/sshd_config
查看config文件的使用手册
SSH 服务端 config文件的使用手册: man sshd_config
SSH 客户端 config文件的使用手册: man ssh_config
SSH 服务端 config文件的使用手册: man sshd_config
SSH 客户端 config文件的使用手册: man ssh_config
客户端
客户端的配置文件有两个
用户的配置文件
全局的配置文件
客户端config文件的常用配置参数
客户端config文件的配置例子
Hast imooc
HostName 172.20.10.2
Port 22
User root
HostName 172.20.10.2
Port 22
User root
用nano来看下ssh_config。这是全局的客户端的配置文件
#号开头的表示注释
服务端
服务端config文件的常用配置参数
查看服务端的
退出 输出y。重启sshd
全局的config加一行。保存退出 下次登录才会生效
修改全局的config文件后,重启sshd服务使之立即生效
sudo systemctl restart sshd
sudo systemctl restart sshd
局部config文件
在服务器端
先cd回到家目录,ls -al可以看到隐藏的目录
进入到.ssh。里面只有一个know_hosts
root 用户的家目录下如果没有.ssh目录
使用以下命令登录,来生成.ssh目录
ssh localhost
ssh localhost
局部的客户端config文件在用户家目录的.ssh隐藏目录中
~/.ssh/config
此文件一般默认是没有创建的,可以手动创建
~/.ssh/config
此文件一般默认是没有创建的,可以手动创建
在客户端配置
创建完~/.ssh/config文件之后
一般会把~/.ssh/config的权限修改为600
chmod 600 /.ssh/config
一般会把~/.ssh/config的权限修改为600
chmod 600 /.ssh/config
尽量去修改权限,要不然在某些时候会产生错误
客户端config文件的常用配置参数
nano打开配置文件
看一下刚才的修改
之前我们链接服务器是这样的
在配置文件内已经写入了这样一组配置
直接ssh imooc 自动识别要登陆172.20.10.2这个主机
输入密码后成功登陆
在config内再添加imooc2
多了一组配置
网络
IP地址
前置
System Administrator :系统管理员
host 和whois 命令:告诉我你是谁..
概念
每台连上网的电脑都会被一个IP地址所标识
这个IP地址是全球唯一的
这个IP地址是全球唯一的
大多数IP地址是这样的形式 43.136.208.71
这样的形式被称为IPv4 格式(以小数点分隔)
分隔开的部分的取值范围是0~255
这样的形式被称为IPv4 格式(以小数点分隔)
分隔开的部分的取值范围是0~255
因为是8位二进制数。2^8-1= 256 -1 = 255
IPv4 格式
IP是Internet Protocol ( "网际协议”或“互联网协议” )的缩写
v是version (“版本" )的首字母
4表示这是“第四版”
v是version (“版本" )的首字母
4表示这是“第四版”
IPv6 格式
因为IPv4的地址不够用的关系
现在已经有不少IP地址的格式是IPv6的格式了
已有的IPv4 地址也慢慢被替换成IPv6
现在已经有不少IP地址的格式是IPv6的格式了
已有的IPv4 地址也慢慢被替换成IPv6
IPv6 的IP地址类似这样ef70::103:72cd:cb50:17d2
上面是简写形式(两个冒号::用于合并连续的几组0),完整形式是
ef70:0000:0000:0000:0103:72cd:cb50:17d2
上面是简写形式(两个冒号::用于合并连续的几组0),完整形式是
ef70:0000:0000:0000:0103:72cd:cb50:17d2
IPv6 的IP地址是以冒号分隔的8组4位的16进制
也就是8组16位二进制,因为2的4次方是16
所以8*16=128
也就是8组16位二进制,因为2的4次方是16
所以8*16=128
IPv6 把IP 地址由IPv4的32位(4个2的8次方,4*8= 32)
增加到128位
增加到128位
2的32次方是4294967296 (近43亿)。随着互联网的快速成长,IPv4的近43亿个地址的分配最终于2011年2月3日用尽。
而IPv6的128位可以提供的IP地址数量可达2^128!3.402823669 x 10^38 (10的38次方)个。
几乎每个人家中的每件电器,每样东西,甚至地球上每一粒沙子都可以拥有好几个IP地址。根本用不完,IP多就是这么任性~
而IPv6的128位可以提供的IP地址数量可达2^128!3.402823669 x 10^38 (10的38次方)个。
几乎每个人家中的每件电器,每样东西,甚至地球上每一粒沙子都可以拥有好几个IP地址。根本用不完,IP多就是这么任性~
主机名
可以为每一个IP地址绑定一个主机名
主机名的英语是host name
主机名的英语是host name
这里的主机名其实应该被称为“完整主机名" : Fully QualifiedDomain Name (FQDN)。
FQDN 是由主机名( host name )和域名(domain name )一起构成。
我们一般会用主机名或域名来代称FQDN,其实不是那么准确。
FQDN 是由主机名( host name )和域名(domain name )一起构成。
我们一般会用主机名或域名来代称FQDN,其实不是那么准确。
host name (主机名)和domain name (域名)是不同的概念
Github的服务器的完整主机名是www.github.com
这里的www是主机名,github.com是域名
对应的IP地址是13.229.188.59 (不一定每次是这个IP地址,会变)
这里的www是主机名,github.com是域名
对应的IP地址是13.229.188.59 (不一定每次是这个IP地址,会变)
用主机名或域名代指FQDN相比于记忆一串数字(IPv4)或数字+字母(IPv6)的IP地址
人脑更擅长记住主机名
人脑更擅长记住主机名
IP地址和主机名的互相转换
host github.com (host www.github.com )
会得到IP地址13.250.177.223 (不一定每次获得的IP地址都一样
host 13.250.177.223 则会得到主机名的信息
会得到IP地址13.250.177.223 (不一定每次获得的IP地址都一样
host 13.250.177.223 则会得到主机名的信息
自定义解析
IP地址和主机名的解析是由DNS
(Domain Name System, “域名解析系统” )服务器完成的
(Domain Name System, “域名解析系统” )服务器完成的
当你在浏览器的地址栏里输入github.com时
你就能收到由网络上的DNS服务器帮你解析出来的IP地址
你就能收到由网络上的DNS服务器帮你解析出来的IP地址
你当然不能修改DNS服务器上的主机名和IP地址的对应关系列表
因为有风险,会影响到很多人
但是你可以自定义你电脑上主机名和IP地址的对应关系
因为有风险,会影响到很多人
但是你可以自定义你电脑上主机名和IP地址的对应关系
以root身份打开/etc/hosts文件
sudo vim /etc/hosts
可以添加自己的解析对,在IP地址和主机名之间至少要留一个空格
sudo vim /etc/hosts
可以添加自己的解析对,在IP地址和主机名之间至少要留一个空格
自定义解析的作用
有的时候,网络上负责解析域名的DNS服务器可能暂时出现故障(很少见),那这时你在地址栏直接输入IP地址可以访问对应网站,
但是输入主机名(域名)则不能访问了,因为没有DNS服务器解析,域名是不能被识别的
但是输入主机名(域名)则不能访问了,因为没有DNS服务器解析,域名是不能被识别的
例如你可以加一条Github的解析对
13.229.188.59 github.com
13.229.188.59 github.com
对于局域网,这个/etc/hosts文件也是很有用的
192.168.0.5 father-laptop
电脑IP地址对应的主机名在你这里就成为father-laptop 了
192.168.0.5 father-laptop
电脑IP地址对应的主机名在你这里就成为father-laptop 了
whois
了解有关域名的信息
whois 这个命令,由who 和is两部分组成
who是英语“谁”的意思,is是英语“是”的第三人称单数形式
所以whois表示:“是谁”
who是英语“谁”的意思,is是英语“是”的第三人称单数形式
所以whois表示:“是谁”
每一个域名在登记注册时都须要填写:姓,名,联系地址,联系方式,等等
whois 命令就可以帮助我们轻松获得域名背后的这些信息
whois 命令就可以帮助我们轻松获得域名背后的这些信息
如果你的Linux系统里没有whois命令,可以安装,例如
sudo yum install whois
sudo yum install whois
ifconfig
列出网络接口
ifconfig 用于显示或配置网络设备(网络接口卡)的命令
全称是Network Interface Configuration ( "网络接口配置")
全称是Network Interface Configuration ( "网络接口配置")
network 表示“网络
if是Interface 的缩写,表示“接口"
config 是configuration 的缩写,表示“配置"
if是Interface 的缩写,表示“接口"
config 是configuration 的缩写,表示“配置"
一般来说,你的电脑拥有好几个网络接口
也就是说有多种连接网络的方式
也就是说有多种连接网络的方式
如果你的CentOS系统里没有ifconfig这个命令
那么可以运行以下命令来安装
sudo yum install net-tools
那么可以运行以下命令来安装
sudo yum install net-tools
旧版的centOS里面运行ipconfig的显示
三个网络接口
eth0
对应有线连接(对应你的有线网卡),就是用网线来连接的上网(般是RJ45网线,就是平时我们用的那种网线。见下图),如果你的电脑目前使用网线来上网,那就是在使用这个接口。eth是Ethernet的缩写,表示“以太网"。有些电脑可能同时有好几条网线连着(有好几个有线接口),例如服务器,那么除了etho (第一块有线网卡),你还会看到例如eth1, eth2,等等
RJ45网线
lo
本地回环(Local Loopback的缩写,对应一个虚拟网卡)。可以看到它的IP 地址是127.0.0.1,似曾相识是吗?对啊,之前我们在/etc/hosts文件中看到对应localhost的就是这个IP。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为“本地回环”的原因:所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但有时为了某些缘故(可以百度或Google继续探究),我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把HTTPD服务器指定到回环地址,在浏览器输入127.0.0.1就能看到你所架设的Web网站了。但只有你自己能看得到,局域网的其它主机或用户无从知道
wlan0
对应Wi-Fi无线连接(对应你的无线网卡)。wlan是WirelessLocal Area Network 的缩写,表示“无线局域网” 。假如你有好几块无线网卡,那么会看到wlan1, wlan2,等等
分析网络
老版本的centOS的截图
图
子主题
有线连接就是用的这里的eth0。RX和TX表示发送包和接受包
给自己发送东西也是会发生的。
新版本的centOS里面运行ifconfig
enp0s3
新版用systemd替换掉了initd来引导系统
其带来的另外一个副作用(或者可以说是优点)
就是网络接口的命名方式变了
其带来的另外一个副作用(或者可以说是优点)
就是网络接口的命名方式变了
en代表以太网卡,是Ethernet的缩写
p0s3 代表PCI接口的物理位置为(0,3)
其中横座标代表bus(“总线” ),纵座标代表slot (“槽,插口”)
p0s3 代表PCI接口的物理位置为(0,3)
其中横座标代表bus(“总线” ),纵座标代表slot (“槽,插口”)
具体的可以参考这篇英文
也可以把enp0s3改成eth0这种格式,但是一般不推荐去改。
因为我们虚拟机采用的是桥接的方式,所以会有上面这种
如果不喜欢可以删掉
在服务器上运行和ifconfig。服务器上就没有虚拟的网络接口。
这是因为我们在服务器上用的是桥接模式。
ifconfig
列出网络接口
网卡名称、inet参数后面的IP地址
ether参数后面的网卡物理地址(又称为MAC地址)
RX,TX的接收数据包和发送数据包的个数,以及累计流量,
ether参数后面的网卡物理地址(又称为MAC地址)
RX,TX的接收数据包和发送数据包的个数,以及累计流量,
主要关注的是下面三个
mac地址
配置网络接口
接口的激活/关闭,使用格式如下:
ifconfig interface state
interface :由你想要修改的网络接口名称代替( eth0 / enp0s3
wlan0 等等)。interface是英语“接口”的意思
state :由up或 down代替,表示“激活”和“关闭”对应接口
up是英语“向上”的意思,down是英语“向下”的意思
state是英语“状态”的意思。设置状态需要root权限
up是英语“向上”的意思,down是英语“向下”的意思
state是英语“状态”的意思。设置状态需要root权限
关闭enp0s3这个有线接口
之后就没有任何网络传输会在enp0s3上进行了
sudo ifconfig enp0s3 down
之后就没有任何网络传输会在enp0s3上进行了
sudo ifconfig enp0s3 down
激活enp0s3 这个有线接口
sudo ifconfig enp0s3 up
sudo ifconfig enp0s3 up
ip addr
目前,Linux发行版里面,一般默认安装的是ip addr
而不是ifconfig。也可以用ip addr来获取网络接口的信息
addr 是address的缩写,表示“地址
而不是ifconfig。也可以用ip addr来获取网络接口的信息
addr 是address的缩写,表示“地址
关于ifconfig和ip addr
其他
统计网络
netstat
netstat都是net-tools包里面的
查询关于ifconfig的一些信息
which ifconfig
查询net-tools的信息
ip命令就属于iproute命令里面
查询iproute
同样会列出iproute的描述
netstat 命令很好记,它由两部分组成: net 和stat
net 是network的缩写,表示“网络"
stat 是statistics 的缩写,表示“统计”
net 是network的缩写,表示“网络"
stat 是statistics 的缩写,表示“统计”
netstat -i 网络接口的统计信息
netstat -i 列出你电脑的所有网络接口的一些统计信息
RX是receive (表示“接收” )的缩写
TX 是transmit (表示“发送” )的缩写
RX是receive (表示“接收” )的缩写
TX 是transmit (表示“发送” )的缩写
MTU : Maximum Transmission Unit 的缩写
表示“最大传输单元”
指一种通信协议的某一层上能通过的最大数据包大小(单位是字节)
表示“最大传输单元”
指一种通信协议的某一层上能通过的最大数据包大小(单位是字节)
RX-OK:在此接口接收的包中正确的包数
OK表示“没问题,好的"
OK表示“没问题,好的"
RX-ERR:在此接口接收的包中错误的包数
ERR 是error的缩写,表示“错误”
ERR 是error的缩写,表示“错误”
RX-DRP:在此接口接收的包中丢弃的包数
DRP是drop的缩写,表示“丢掉"
DRP是drop的缩写,表示“丢掉"
RX-OVR:在此接口接收的包中,由于过速
而丢失的数据包数。OVR是over的缩写,表示“结束”
而丢失的数据包数。OVR是over的缩写,表示“结束”
类似的,TX-OK, TX-ERR, TX-DRP 和TX-OVR
表示在此接口发送的包中对应的包数
表示在此接口发送的包中对应的包数
netstat -uta 列出所有开启的连接
-u:显示UDP 连接(u是udp的首字母)
-t:显示TCP连接(t是tcp的首字母)
-a:不论连接的状态如何,都显示(a是all(“所有”)的首字母)
-t:显示TCP连接(t是tcp的首字母)
-a:不论连接的状态如何,都显示(a是all(“所有”)的首字母)
TCP 和UDP是两种不同的协议
用于在网络上传输数据
用于在网络上传输数据
UDP ( User Datagram Protocol,“用户数据报协议”)
一般用于网络游戏,音频通讯(例如Skype)
一般用于网络游戏,音频通讯(例如Skype)
除此之外,一般来说TCP ( Transmission Control Protocol“传输控制协议”),是最常用的
一般在互联网上都是用TCP/IP 协议
一般在互联网上都是用TCP/IP 协议
可以只显示TCP 连接的信息netstat -ta
只显示UDP 连接的信息(不常用)netstat -ua
State含义
ESTABLISHED :与远程电脑的连接已建立
establish是英语“建立"的意思
establish是英语“建立"的意思
TIME_WAIT:连接正在等待网络上封包的处理
一旦处理完毕就开始关闭连接
time是英语“时间”的意思,wait是英语“等待”的意思
一旦处理完毕就开始关闭连接
time是英语“时间”的意思,wait是英语“等待”的意思
CLOSE_WAIT :远程服务器中止了连接
(也许你太久没什么动作,处在不活跃状态)
close是英语“关闭”的意思
(也许你太久没什么动作,处在不活跃状态)
close是英语“关闭”的意思
CLOSED :连接没有被使用。关闭了
CLOSING :连接正在关闭,但有些数据还没有发送完毕
LISTEN :监听着可能进入的连接
此时连接还没有被使用
listen 是英语“听”的意思
此时连接还没有被使用
listen 是英语“听”的意思
端口(port)
我们连接其他电脑,可以透过不同的端口(port)
有点类似门户
比如我去朋友家,可能进他们的厨房门,书房门,地下室门,等等
有点类似门户
比如我去朋友家,可能进他们的厨房门,书房门,地下室门,等等
“端口”是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口。其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,例如计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用的RJ11插口也属于物理端口的范畴
21端口用于FTP (File Transfer Protocol, “文件传输协议” )服务,FTP服务主要是为了在两台计算机之间实现文件的上传与下载。
80端口是为HTTP ( HyperText Transport Protocol , "超文本传输协议” )开放的,此为上网冲浪使用次数最多的协议,主要用于www (World Wide Web, “万维网” )传输信息的协议。可以通过HTTP 地址(即常说的“网址” )加:80来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入:80了
可以加上-n参数,假如你想让端口信息以数字的形式显示
110端口是为POP3 (Post Office Protocol version 3 的缩写,表示“邮件协议 第三版” )服务开放的,用于收发电子邮件
netstat -utan
之前的https就变成了443端口
netstat -It :只列出状态是 LISTEN 的统计信息
netstat -s:列出总结性的统计信息
s是summary的缩写,表示“总结”
更多的用man stats
ss命令
在iproute2 这个包中,和netstat对应的命令是ss
shell
第一个Shell脚本
创建脚本文件
vim test.sh
sh 就是shell 的缩写
后缀名.sh已经成为一种约定俗成的命名惯例
指定脚本要使用的Shell
在写一个Shell 脚本时
第一要做的事就是指定要使用哪种Shell来“解析/运行”它
因为Sh, Ksh, Bash 等等Shell 的语法不尽相同
第一要做的事就是指定要使用哪种Shell来“解析/运行”它
因为Sh, Ksh, Bash 等等Shell 的语法不尽相同
#! 被称作 Sha-bang ,或者 Shebang
运行命令
原则很简单:只需要写入你想要执行的命令
只输入ls命令。
注释
注释是不会被执行的行,但是可以用于解释我们的脚本做了什么
Shell脚本的注释以#(井号)开头
Shell脚本的注释以#(井号)开头
加一句注释
保存这个文件:x或者是:wq
刚才添加的文件的权限.当前的权限,没有可执行权限。
给脚本文件添加可执行的权限
加上可执行权限 chmod +x test.sh
运行脚本文件./test.sh
以调试模式运行
bug 是英语单词
本意是“臭虫、缺陷、损坏、犯贫、窃听器、小虫”等意思
电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题的统称
本意是“臭虫、缺陷、损坏、犯贫、窃听器、小虫”等意思
电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题的统称
调试一个脚本程序 bash-x test.sh
参数-x表示以调试模式运行Shell
就会把我们的脚本文件运行时的细节打印出来了
参数-x表示以调试模式运行Shell
就会把我们的脚本文件运行时的细节打印出来了
创建属于自己的命令
常用软件
0 条评论
下一页