这里用的是CentOS8配置虚拟机,找映像文件那几步就不写了。
远程连接Centos
下载finalshell 官网:FinalShell官网,下完后安装在你用来远程控制centos的机子里。
centos调出终端,输入ifconfig查看网络相关信息,这里主要是看IP地址。接下来进行finalshell连接,我这里之前连上过一次了,再演示一遍。
选择SSH连接
新建完成后双击新建的连接就连上了
既然连接上了就可以在shell里控制centos了,centos可以先最小化放一边但是不要关机。centos重启的时候ip地址可能会变,这时候再查看一下ip地址,把finalshell里的连接信息改一下就可以了。
文件结构基础命令
Linux的目录结构是一个树型结构,Windows 系统可以拥有多个盘符,如C盘、D盘、E盘,而Linux没有盘符这个概念,只有一个根目录 / ,所有文件都在它下面,感觉就像Linux只有一个盘。
在Linux系统中,路径之间的层级关系,使用 / 来表示,在Windows系统中,路径之间的层级关系,使用 \ 来表示。我印象里在windows文件管理器中用 / 也能识别。由于Linux是没有盘符的,所以路径开头一定是 /
windows文件(夹)路径举例: C:\Windows\System32
Linux文件(夹)路径举例: /usr/bin
Linux命令基础格式
command [-options] [parameter]
command为命令本身;-option是命令的一些选项,可以通过选项控制命令的行为细节;parameter为命令的参数,多用于命令的指向目标等。
ls命令
ls命令的作用是列出目录下的内容,语法细节如: ls [-a -l -h ] [Linux路径]
不加参数就是平铺列出来当前工作目录下的内容
Linux系统的命令行终端在启动的时候默认会加载当前登录的用户的HOME目录作为当前的工作目录,所以ls命令列出的是HOME目录的内容。
HOME目录是每个Linux操作用户的个人账户目录,路径在:/home/用户名,如图中的HOME目录为:/home/root ,其实就类似于windows里的users目录。
回到这条ls命令:ls [-a -l -h ] [Linux路径]
-a就是all,全部列出,文件名以.开头隐藏内容也会被列出来
-l就是list,以列表的形式展示详细信息
还可以混合使用-a -l 和-la,-al都一样的,既显示出来隐藏的,又列出详细信息。
-h就是更易于阅读的方式看文件大小,能够显示出单位K、M、G、等。-h必须和-l一起用,不然没意义了。这里看一下显示根目录的效果
cd切换工作目录
cd [路径] ,不写路径就是回到HOME。
没什么好说的,和windows差不多
pwd 打印当前工作目录
直接输pwd就行。
绝对路径与相对路径
和windows的相关概念差不多,不多写了。
特殊路径符: . 表示当前目录, .. 表示上一级目录, ~ 表示HOME目录
cd ../.. 就是切到上两级目录那里
cd ~/Desktop 切到HOME里的Desktop目录中
mkdir创建新文件夹
mkdir [-p] 路径
路径就是要创建的文件夹的路径,-p意思是创建不存在的父目录,用于创建连续多层级的目录。
mkdir ~/aaa/bbb ,这里如果你的HOME目录里没有aaa,就执行不了,加上-p就ok了,系统会自动给你把bbb的父文件夹创建出来
touch命令创建文件
touch 文件路径
还可以看到文件夹都是蓝色,文件都是白色的。或者是用ls -l命令,开头是d的是文件夹,开头是 - 的是文件。
我又在test.txt文件里随便写了点东西,一会cat要看。
cat和more查看文件内容
cat 文件路径
效果拔群。
扯个相关的,tac命令是从最后一行输出到第一行
more 文件路径
和cat不一样的是,cat是将全部内容都显示出来,而more支持翻页,如果文件内容过多,可以一页一页显示。按空格键翻页,q键退出查看
cp命令复制文件(夹)
cp就是copy。
cp [-r] 参数1 参数2
-r选项是复制文件夹的时候用的
参数1是Linux路径,表示被复制的文件或文件夹
参数2也是Linux路径,表示要复制去的地方
先新建一个文件夹叫NewDir
复制一下
复制到刚才那个新复制出的文件夹里
突然有个大胆的想法
看来不行,不允许把自己复制到自己里面。
mv移动文件(夹)
mv 参数1 参数2
参数1是被移动的文件(夹)路径,参数2是要移动到的地方,如果这个地方不存在,那就把要移动的文件(夹)改名为参数2
rm删除文件(夹)
rm [-r -f] 参数1 参数2 ……
-r就是删文件夹;-f是强制的意思,不会再弹出确认信息(root权限下删除会弹一行确认,不是root就不用管)参数可以写很多是指能一次删很多东西。
这里我把刚才那个test3.txt删了,又因为Desktop文件夹里就那一个东西,删了就变回空的了,所以ls命令显示不出来东西。
另外rm命令支持通配符*做模糊匹配,比如说name*表示匹配任何以name开头的内容,*name表示匹配任何以name结尾的内容,*name*表示匹配任何包含name的内容
比如说,如果我rm -r name* ,当前目录下所有以name开头的文件和文件夹都会被删掉。
话说就算是没学过Linux的人也会耳熟rm -rf /* 这个命令吧
意思是删除所有文件,不少计算机人拿这个命令开玩笑(bruh
另外前面提到的 -f只有root才能用到,输入su - root命令可以临时切到root用户,需要输root的密码。退出root权限的话输exit。
which命令找命令的位置
which 要查找的命令
find命令
按文件名查找文件
find 起始路径 -name “被查找文件名”
叫test的文件还挺多的
这里也能用通配符*进行模糊查询,通配符怎么用前面说了,这里不另记了
按文件大小查找文件
find 起始路径 -size +|-n[KMG]
+和-表示大于和小于,n表示大小数字,KMG就是大小单位,KB、MB、GB
使用的话就像是 find / size -10k 在根目录下找小于10KB的文件
grep命令过滤(筛选)文件行
grep [-n] 关键字 文件路径
选项-n 表示在结果中显示匹配行的行号
关键字就是表示要过滤出的关键字,最好用“”包起来
方便实验命令效果,先在HOME页新建一个文本文档
编辑一下文本内容
在shell看一下
ok来筛选一下带有关键词“love”的行。不加-n就是没有前面的数字表示行号。
wc命令统计文件内容信息
wc [-c -m -w] 文件路径
-c统计字节数量,-m统计字符数量,-l统计行数,-w统计单词数。
如果不加那几个可选项,则分别按 行数、词数、字节数输出。
管道符配合命令
管道符就是 | 这个东西,他能把两个命令隔开,这么做可以将左边命令的结果作为右边命令的输入,然后执行右边的命令。
结合这个例子理解一下。
还可以这样用,我们看一下bin文件夹里的命令,好多,头要晕了
我想找的命令,已经被淹没在茫茫命令海之中了。可以用grep筛选一下,这里就需要管道符 | 的辅助了。我想找pwd的话就只需要输一下
来数数bin文件夹里有多少命令。ls -l命令能够按行展示文件夹内的各文件详细信息,这么说来左边的输出结果有多少行就是有多少个命令,只需要数有多少行就可以了。
管道符也可以多个连用比如这样,我既要包括thee又要包括love
这个就很有迷惑性了,怎么输出的带了行号呢,我最后一个命令明明没加-n?那是因为前两个的命令输出的结果是带行号的,他们的结果成为了一个新的输入,输入进了最右边的命令中。我再写一句命令,这么对比看就很清晰了。
echo命令在命令行输出指定内容
echo 输出的内容
输出的内容建议用引号包一下,良好习惯
朴实无华的效果
飘号 ` 辅助命令执行
如果我想输出pwd
错啦,不是这个意思,我想把pwd这个命令的结果输出来
懂你意思,前面学过一个管道符
怎么是一串空行,搞不懂。
这里应该用 ` 围住命令当echo的参数,飘号内的命令会执行然后被echo输出
重定向符<和<<
>将左侧命令的结果,覆盖写入到符号右侧指定的文件中
>>将左侧命令的结果,追加写入到符号右侧的指定文件中
这个是>的用法,之前文本文档里的是十四行情诗还记得不,现在被新写入覆盖了
这个是>>的用法,在后面追加
这里用的是echo往里面写的,换成别的能产生结果的命令也是可以的
tail查看文件尾部内容,跟踪最新更改
tail [-f -数字 ] 文件路径
-f表示持续跟踪,-数字 表示查看尾部的多少行,不填默认为10行
拿刚才那个文件举例子,可以对照上面的看一下
如果我们只看倒着数五行的就是加上- 5,这个-5得写到文件路径之前,不能写在最后面,不然识别不了
另外就是这个-f要怎么理解了,持续追踪,就是一直盯着这个文件看,新的改动也会实时输出。可以看到命令行末尾并不是让我们输入下一个命令,似乎这个命令还没有执行完
方便实验我们再复制一个shell窗口,给这个文件追加点内容,可以看到刚才的窗口又输出一行内容,这就是追踪的效果
不想跟踪了就ctrl c一下
vim编辑器
vim 文件路径
如果文件路径不存在,则会新建这么一个文件进行编辑。
vim编辑器有三种模式:命令模式,输入模式,底线命令模式。
命令模式下按键都会理解为命令,来执行不同的功能;输入模式就是一般理解上的编辑模式,插入模式,可以对文件内容自由编辑;底线命令模式以 :开始,通常用于文件的保存退出。
进入vim编辑器默认为命令模式,输入键盘指令i可切换为输入模式,输入模式按ESC退回命令模式,命令模式输入 : 可切到底线命令模式,底线命令模式输入wq可保存并退出编辑器。
我这里新建了一个文本文档Vimtest.txt。在命令行输入vim Vimtest.
输完命令后shell进入了新界面
按i切到编辑(插入)模式,可看到左下角显示为INSERT,然后就可以随意编辑了,这三行是我自己写的
先编辑到这里,按ESC退回命令模式
按两下y就可以复制光标所在的那一行,按p粘贴到光标所在的那行
按u撤销一步,我这里按了好几次,撤回到了之前那个样子
打出来 :(冒号)进底线模式,输wq敲回车就是保存并退出
vim一些快捷键
命令模式
i或a或o或他们的大写进入编辑模式,就是进入后光标所在位置不一样,这个感觉无所谓了。
上下左右控制光标肯定不必多说,那如果我说i k j l也是对应上下左右控制光标,阁下该如何应对呢:)
0 (键盘上的数字0)光标移到当前行开头
$ 光标移到当前行结尾
翻页键翻页
/ 进入搜索模式
n 向下继续搜索
N 向上继续搜索
dd 删除当前行
ndd 删除当前光标和下面的共n行,n是数字
yy 复制当前行
p 粘贴
u 撤销
ctrl r 重做
gg 转到首行
G 跳到行尾
dG 从当前行开始删到最后
dgg 从当前行开始删到最初
d$ 从光标开始删到本行结尾
d0 从光标开始删到本行开头
底线命令模式
:wq 保存并退出
:q 仅退出
:q! 强制退出
:w 仅保存
:set nu 显示行号
:set paste 切到输入模式时会进入粘贴模式
用户、权限相关
超级管理员,在其他地方也该遇到好多次了,什么含义就不多记了
普通用户的权限比较低,出了它的home目录基本上就只能读和执行,写权限很少。
su命令
su – [用户名]
- 号是可选的,表示是否在切换用户后加载环境变量,带上比较好
用户名表示要切换的用户,不填就是切到root
切换完用户后,输exit退回上一个用户,按ctrl d 也行
普通用户切别的用户要密码,root用户切别人不用。
sudo
sudo命令为普通的命令授权,以临时的root权限执行。并不是所有的用户都能用sudo,得配置认证。
配置认证就得用root用户下执行visudo命令,它会用vim编辑器自动打开/etc/sudoers这个文件,在文件末加上:
用户名 all=(all) NOPASSWD:ALL
后面那个的意思是使用sudo命令不需要输密码,最后记得输 :wq 保存
弄好后,我切到我另一个不是root的账户里,删一个没用的文件夹
用户与用户组
跟Windows类似,Linux里也有用户和用户组配置选项
Linux可以配置多个用户,配置多个组,用户可以加入多个组中
Linux权限的管控级别:针对用户的权限控制,针对用户组的权限控制
创建用户组: groupadd 用户组名
删除用户组: groupdel 用户组名
理所当然都要root权限,sudo也ok
创建用户 useradd [ -g -d ] 用户名
-g用来指定用户的组,不指定的话就会创建一个同名的组并自动加入,如果要指定-g,要这个组存在才行,-d指定用户的home路径,默认在/home/用户名
删除用户 userdel [ -r ] 用户名
-r 删除用户的home目录,不加-r就保留。
查看用户所属组 id [用户名]
查看用户名所在的组,如果不写就看自己的
修改用户所属组 usermod -aG 用户组 用户名
将指定用户加入指定用户组
这里的命令都不太直观,就不上实例截图了
查看当前系统有哪些用户 getent passwd
好多,新建的用户一般都在下面
用户:密码(都是x):用户id:组id:描述信息:home目录位置:所用终端
查看当前系统中有哪些组 getent group
权限信息
查看文件夹各文件信息那里,开头前面的那一串是什么意思呢
分别对应的是
文件类型 文件权限 . 硬链接数 所有者 所属组 文件大小 最后修改时间 名称
这里着重讲一下文件权限:
权限信息显示为 所属用户权限 所属用户组权限 其他用户权限
rwx对应读写执,三个权限种类,有哪个就把哪个写上,缺哪个就补 –
chmod修改权限信息
chmod [-R] 权限 文件(夹)路径
-R是指对文件夹内的全部内容应用同样的操作
该命令只有文件(夹)所有者和root用户才能改
举个例子 chmod -R u=rwx,g=rw,o=r test
u指的是该文件所属用户,g指的是所在组,o是其他用户,注意这里是逗号。就是把test这个文件夹及内容权限改为rwxrw-r—
权限数字符号表示,有三位十进制数字,分别对应所属用户的权限,所属组的权限,其他用户的权限,如777,751等
对于每个用户来说,可以再理解为三位二进制数字,r三位的1,w是二位的1,x是一位的1,-是0。比如说r-x就是101就是5,那么751就是rwxr-x--x
那么就有了一个更简单的命令:chmod [-R] 三个数字 文件(夹)路径
比如 chmod -R 777 NewDir
chown修改文件(夹)所属用户(组)
chown [-R] [用户] [:] [用户组] 文件(夹)
-r的意思和上面的一样。冒号:用来分隔用户和组。该命令为root用户限定。
例子:chown :aaa test.txt 将文件所属用户组改为aaa(如果是用户名就改所属用户,组名前必须加冒号:)
chown root:testgrp test.txt 将文件所属用户改为root,所属组改为testgrp
常用快捷键
ctrl c 停止。 程序运行时用来停止程序;代码输错时按表示命令作废,重新输入
ctrl d退出登录。 可用于退出账户登录和一些特定程序的页面,但是vim不行。
history 查看历史命令
!命令前缀,执行历史中最近的匹配前缀的命令。一般对照history使用。
这里我!l匹配到了ls,如果是!ch就会匹配到chmod -R 777 NewDir
ctrl r 搜索命令。搜索久远的历史命令建议用这个,搜到之后按回车可以立刻执行,左右移动光标则可以修改该命令。按ctrl r后命令左边会变成这个样子
光标快速移动快捷键: ctrl a 跳到命令开头,ctrl e跳到命令结尾,ctrl ← 向左跳一个词,ctrl → 向右跳一个单词。
ctrl l 或clear 清屏
安装软件
yum命令在CentOS
yum是RPM包软件管理器,用于自动化安装配置Linux软件,并且可以自动解决依赖问题。CentOS中的安装包是rpm文件。
yum [-y] [install | remove | search ] 软件名称
-y意思是自动确认,无需手动一步步确认过程。这个命令要root权限。
搜一下wget这个应用程序
装一只
apt 命令在Ubuntu
Ubuntu中软件安装包格式是deb
apt [-y] [install | remove | search] 软件名称
用法过程和yum其实差不多。
systemctl命令控制软件启动关闭
能够被systemctl管理的软件,有个更熟悉的名字:服务
systemctl start | stop | status | enable | disable 服务名
系统内置的服务用的多一些,比如防火墙firewalld,sshd,NetworkManager
来看一下我防火墙的状态。防火墙一般是默认打开的,之前学网安的时候觉得碍事就手动关掉了。命令行里显示我的防火墙是未开启的,inactive(dead)
防火墙,启动!
还是关了吧,以后有用
另外部分的第三方软件也是可以用systemctl控制的。这里装了httpd。看一下http服务状态
还有一些没有集成到systemctl里的软件,也可以手动添加进去。
ln命令创建软连接
软连接类似于Windows的快捷方式,把文件文件夹链接到其他位置。
ln -s 文件(夹) 目的地 把文件(夹)链接到目的地
我这里建了一个软连接,但是怎么打不开呢
因为源路径必需为绝对路径,否则创建好的软链接就会出现Too many levels of symbolic links。还是重弄一遍吧。
这样就成功了,我们还可以给软连接进行软连接,实现链中链,在创建软连接的时候还可以给软连接命名
date命令看时间
date [-d] [+格式化字符串]
-d 选项用于按照给定的字符串显示日期,日期计算时常用
比如说明天就是+1天,年月日时分秒都可以加
格式化字符串:通过特定的字符串标记控制现实的日期格式
单打的话没啥用这几个,组合起来才直观
记得用引号包起来哈。
另外还可以看到时间显示的是PST(太平洋标准时间,常说的西八区),我们的时区应该是CST(北京时间,东八区)。来改一下
另外CentOS7可以用ntp时间同步服务,但我装的是CentOS8,不支持ntp了,这个版本一般用chronyd,我装一下。
装完了用vim打开这个配置文件
按i进编辑模式,在这个位置输入时间源,这里我用的阿里的,输完:wq保存。
重启一下服务,并允许开机自启
看一下同步情况
网络、设备信息
ifconfig 查看网络信息
它会显示出一大堆,centos的网卡一般都叫ens33,它系统里也有很多别的网卡。
inet后面的就是ip地址了
hostname 查看系统主机名
hostnamectl set-hostname 新主机名 修改主机名
就像这样,不要着急,shell这里还没改过来,重连一下就好
耶
Linux也是有host文件的,在/etc/hosts
配置静态IP地址
为什么要配置静态IP地址?一般上网直接用DHCP分个拿着玩就行了,但别忘了这里shell是要连CentOS的,如果CentOS的IP经常变,那shell岂不是还要不定期地重新配置IP地址,这肯定不行
先在vmware里配置,找到对应虚拟机的虚拟网络编辑器,配置好网段和网关。网关是网段地址最后的0变成2
在VMware配置好后后,切到Linux里,用vim打开/etc/sysconfig/network-scripts/ifcfg-en33 文件
将BOOTPROTO项改为static
在最后面添加上这四行,IP就是你想固定为的IP,DNS填网关的地址就行
保存收工。
另外注意,本次改完后(重启后)可能shell会连不上,这时候把shell连接配置做相应的修改就ok
ping命令
ping [-c num] 域名或ip地址
-c选项开启次数限制,num是数字,就是要ping几次。不加-c就是无限ping,当然按ctrl c可以停下。
ping命令也是老命令了,检测与目标是否联通,用法跟windows里的也差不多,就是Windows的ping次数用-n而Linux是-c
wget下载
wget [-b] url链接
-b是后台下载,会将日志写入到当前工作目录的wget-log文件
通过tail命令可以监控后台下载进度:tail -f wget-log
好我们来下载原神
开什么玩笑,你染上原神了?按ctrl c停止下载
不管你下没下完,下载的文件它还是会产生,取消下载后记得删掉临时文件。
开什么玩笑,居然阻止我玩原神,我要 -b偷摸下一只
开什么玩笑,看我用tail命令把你揪出来
curl命令
curl可以发送http请求,用来下载文件获取信息等
curl [-O] url链接
-O用来下载文件,如果url是下载链接,可以用这个保存文件。
赫赫,不让我玩原神,那我看看原神的官网吧
怎么乱七八糟的,但总感觉很熟悉。我去,这不是我们的网页源代码吗,html标签快突我脸上了。
端口
端口是什么就不写了。
公认端口:1~1023,用于一些系统内置或知名程序的预留使用,比如ssh服务的22端口,https服务的443端口。非特殊需要,不要占用这个范围的端口。
注册端口:1024~49151,一般可以随便用,用来松散的绑定一些程序服务什么的。
动态端口:49152~65535,通常不会绑定程序,而是程序对外进行网络连接时的临时使用。
用nmap扫描端口: nmap ip/域名
nmap网安人的老朋友了也是。用之前记得提前下载nmap
netstat-anp命令显示端口信息。单打这个命令显示的巨多,建议配合管道符|和grep命令筛选一下
进程
ps [-e -f]
-e显示出全部的进程,-f以完全格式化的形式显示全部信息
也是建议用管道符 | 和grep筛一下。
UID就是启动进程的用户ID,PID进程号,PPID进程父ID,C进程的占用率,STIME进程的启动时间,TTY启动此进程的终端序号(如果显示为?则表示非终端启动),TIME进程占用CPU时间,CMD进程的启动命令或启动路径。
kill [-9] 进程id 关闭进程
-9表示强制关闭。有些进程要是不体面,我们就帮它体面。不加-9关闭成功会返回一个terminated,加了-9会返回killed
top查看系统资源占用
单打一个top就ok
这个页面是动态会更新的,相当于Linux的任务管理器了
磁盘信息监控
df [-h] 查看硬盘使用情况
-h显示单位
iostat [-x] [数字] [数字]
选项-x显示更多信息
第一个数字是刷新间隔;第二个数字是刷新次数
加了-x是这样
环境变量
跟windows里的概念差不多。
env 查看系统中记录的环境变量
查看环境变量path
$符号,这个符号用于取变量的值。
$环境变量名 用于查看该环境变量的值,这个不能直接执行,得用其他的命令输出出来,比如说echo $PATH ,echo $PATH
还可以用大括号包起来要取到值的环境变量,利用它的值进行其他操作,比如拼接字符串,比如${PATH}111111
编辑环境变量
export 变量名 = 变量值 临时设置环境变量
永久生效:
针对当前用户:编辑当前用户的~/bashrc文件
针对所有用户:编辑/etc/profile文件
通过语法 source 配置文件 使之立刻生效,或者重新登陆FinalShell
这里演示一下针对当前用户的:
添加进PATH
我也想输我自己的小脚本就能直接执行
先新建个文件夹、文件,文件内容用vim编辑一下,记得给权限执行。
可惜这么好的程序,只能切到它所在的文件夹才能执行
到处都能执行的话该怎么实现呢,把这个路径添加进PATH就好了
编辑一下配置文件:
注意这个地方,一定要PATH=$PATH: 这样写,然后跟着补充新加的路径,不然就把之前的覆盖了,后果不堪设想。
保存后看一下PATH内容
这样的话切回任意目录,都可以执行我们的小脚本了
上传下载文件
使用finalshell
用finalshell传文件就很方便了
可以看到finalshell下方是有当前Linux的文件系统视图的,可以直接把里面的东西下载到宿主电脑上,也可以把宿主机的文件直接拖进去上传。
当然这个也是有权限制约的,普通登录用户只能看自己的文件夹,root都可以看,但是sudo命令得到的root权限也不能看。
rz,sz命令进行文件传输
先安装: yum -y install lrzsz
sz 文件名 把该文件下载到宿主机
rz 弹出一个窗口,宿主机选择文件上传到linux系统(速度慢不推荐)
这两个命令还是配合finalshell用的,只能在finalshell里用
压缩解压文件
Linux常用的压缩文件格式为zip,tar,gzip。后二者更多一些。
.tar文件,tarball,归档文件,只是简单地将文件组装到一个.tar文件里,主要起封装作用
.gz文,有时候显示为.tar.gz,gzip格式文件的压缩程度会高一些。
tar [ -c -v -x -f -z -C ] 文件1 文件2 文件3
-c 创建压缩文件
-v 显示过程进度
-x 解压模式
-f 要创建的文件或要解压的文件,-f后必须跟文件
-z gzip模式,不加-z就是tarball模式
-C 选择解压的目的地,解压模式用的
tar -cvf test.tar 1.txt 2.txt 3.txt 意思是把这三个文本文档压缩成一个叫做test.tar的新压缩文件
tar -xvf test.tar -C /home/NewDir意思是把该压缩文件解压到/home/NewDir
zip和unzip命令也可以分别用来压缩和解压缩
zip [-r] 文件1 文件2 文件3
-r 要压缩的东西包含文件夹的时候要加-r
比如说 zip -r test.zip NewDir 1.txt 2.txt 就是把这仨东西压缩为test.zip
unzip [-d] 参数
-d指定解压的位置
比如说 unzip test.zip -d /home/NewDir 看得懂啥意思吧应该