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