一、Linux简介
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991年10月5日(第一次正式向外公布时间)。Linux存在许多不同的版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备上,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux 这个词本身只表示 Linux 内核,但人们已经习惯了使用 Linux 来形容整个基于 Linux 内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux 的发行版说简单点,就是将 Linux 内核与应用软件做一个打包。
二、shell
在计算机科学中,shell 俗称外壳(用来区别于内核),它类似于Windows的DOS,够接收用户的命令并翻译给操作系统执行,是用户与操作系统(内核)之间的桥梁(中间人)。
shell开机自启,如果没有shell,我们无法使用Linux。
- 查看正在使用的shell:echo $SHELL
- 查看系统支持的shell:cat /etc/shells
shell与终端的区别:
终端:接收用户的输入,并传递给shell程序,接收程序输出并展示到屏幕
shell:接收并解析用户的命令给操作系统执行,将结果输出到终端。
三、SSH系统服务
SSH服务是目前比较可靠,专门为远程登录服务器和其他网络服务提供安全的协议。相当于Windows的远程桌面协议(mstsc)。
SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有较高的安全性。
SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。
SSH对我们主要的作用是:操作远程服务器系统
Kali配置SSH服务:
1、安装leafpad
apt-get install leafpad
2、使用编辑器打开SSH配置
leafpad /etc/ssh/sshd_config
(1)搜索PermitRootLogin
将其更改为
更改之后,允许root账户登录
(2)搜索PermitEmptyPasswords
更改为
更改之后,允许空密码登录
3、重启SSH服务
service ssh restart
其他命令:
- 使用命令行模式开启SSH服务:
service ssh start
- 查看服务开启状态:
service ssh status
4、登陆测试
使用xshell、MobaXterm、putty等工具测试。
使用本机cmd远程连接:
(1)查看虚拟机IP,在Kali终端允许命令
ip a
(2)打开本机cmd,先查看能否与Kali远程连接
ping 192.16.2.3
(3)在本机cmd运行以下命令
ssh root @192.16.2.3
输入远程连接Kali账户的密码即可,注意密码是不可见的,输入回车即可
使用MobaXterm远程连接:
一般使用MobaXterm,免费,且支持协议较多,安装简单,图形化界面较好,缺点是没有中文版。
点击Session,选择SSH,填入远程连接地址、账户名,输入密码
连接好后,就可以将虚拟机挂起,直接通过MobaXterm使用虚拟机了。
虚拟机挂起,IP一般不会改变,可以持续连接,但如果关机了,IP就会改变了。如果IP改变了,重新设置一边就可以了。
如果出现乱码,设置一下字体即可,Sessions -> 右键IP -> Edit session
使用Xshell远程连接:
rz
:上传文件sz
:下载文件
四、vim编辑器
VM编辑器是Unix及Linux系统下标准的编辑器,相当于Windows系统中的记事本,它的强大不逊色于任何文本编辑器,是我们使用Linux系统不可缺少的工具。
vim具有程序编辑的能力,其会依据文件扩展名或者文件内的开头信息,判断该文件的内容,自动执行该程序的语法判断式,再以颜色显示程序代码与一般信息,可以辨别语法的正确性。
vim加入了许多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。这些功能可以帮助我们在Linux上进行一些配置文件的修改。
vim编辑器模式
命令模式(默认):刚进入vim的时候,默认为命令模式,可以复制行、删除行等
输入模式:可以输入内容
模式转换
i
:在当前光标所在字符的前面,转为输入模式I
:在当前光标所在行的行首,转为输入模式Esc
:输入模式转为命令模式a
:在当前光标所在字符的后面,转为输入模式A
:在光标所在行的行尾,转为输入模式o
:在当前光标所在行的下方,新建一行,转为输入模式O
:在当前光标所在行的上方,新建一行,转为输入模式s
:删除光标所在字符,转为输入模式x
:删除光标所在字符,留在命令模式dd
:删除光标所在行r
:替换光标所在字符yy
:复制一行p
:粘贴
命令模式下,关闭、保存文件
- Shift + 冒号
- w:保存
- q:退出
- wq:保存退出
- x:保存退出
- q!:强制退出
- w!:强制保存,管理员权限
查找
- /正则:从当前位置向后查找
- ?正则:从当前位置向前查找
五、Linux常用命令
帮助命令:在 Linux 环境中,如果遇到困难,可以使用帮助命令来取得帮助
- 输出cat命令的帮助:
cat --help
- 输出date命令的帮助:
date --help
常用系统工作命令:
系统状态检测命令:查看Linux配置系统的基本命令
工作目录切换命令:在Linux中,工作目录指的是用户当前在系统中所处的位置
echo——用于在终端输出字符串或变量提取后的值
- echo [字符串]
- echo [$变量]
- 将123写入到1.txt中(>覆盖内容,>>追加内容):
echo 123 > 1.txt
echo $SHELL
rm——删除文件
rm 1.txt
date——用于显示及设置系统的日期或时间
data [选项] [指定的格式]
date
date "+%Y-%m-%d"
date -d "1 day ago"
date -s 20080808
date -s "20080808 01:01:01"
poweroff——用于关闭系统
poweroff
reboot
——重启
init——需要root权限
- 关机:
init0
- 切换为命令行格式:
init3
- 切换为图形化页面:
init5
- 重启:
init6
top——显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率等,使用q键退出
- top [参数]
- top
PID:进程号
USER:用户
COMMAND:名称
kill [进程号]
——杀死某个进程
ps
——查看进程
ifconfig——用于获取网卡配置与网络状态等信息
ifconfig
ifconfig [网络设备] [参数]
ip a
——可以查看IP
ip add
——可以查看IP
uname——用于查看系统内核与系统版本等信息
- 查看版本:
uname -a
- 查看uname帮助文档:
uname --help
who
——用于查看当前登入主机的用户终端信息
id
——查看当前登入主机的用户终端信息
whoami
——查看当前登入主机的用户终端信息
history
——用于显示历史执行过的命令
- 执行历史号为32的命令:
!32
pwd
——用于显示用户当前所处的工作目录
cd
——用于切换工作路径
- 切换到root目录:
cd ~
- 切换到home目录(主目录):
cd /
- 回到上一级:
cd ..
ls
——用于显示目录中的文件信息,目录为蓝色,普通文件为白色,压缩包为白色
- 查看当前目录的状态(d开头代表路径,l开头代表目录,-开头代表文件):
ls -l
ll
——查看文件详情
d
目录-
文件l
链接r
可读w
可写x
可执行
六、文本文件编辑命令
cat
——用于查看纯文本文件(内容较少的)
- 打开a文件:
cat a
- 打开a文件,在有内容的行前添加行数:
cat a -b
- 读取用户信息:
cat /etc/passwd
more
——用于查看纯文本文件(内容较多的)
- 回车键往下查看内容
- Ctrl + b 往上查看内容
- 等于号显示当前行数
- 等于号后输入数字,意味着在当前行数下添加该数字的行数
- v 可以调用vim编辑器
- q 退出
head
——用于查看纯文本文档的前N行
- 输出a文件的前10个字符:
head a -c 10
- 输出a文件的前5行:
head a -n 5
- 输出文件头:
head a -q
wc
——用于统计指定文本的行数、字数、字节数
- 统计字节数:
wc a -c
stat
——用于查看文件的具体存储信息和时间等信息
- 格式化输出123:
stat -c 123 a
七、文件目录管理命令
touch
——用于创建空白文件或设置文件的时间,创建时间和最近改动时间无法更改
- 创建3个空白文件:
touch 1.txt 2.txt 3.txt
- 将1.txt文件的时间更改为1天前:
touch -d "1 day ago" 1.txt
- 设置时间格式:
touch -t 2008080808.08 1.txt
mkdir
——用于创建空白的目录
- 创建text目录:
mkdir text
- 创建多级目录:
mkdir hello/test/ -p
- 创建test2目录,设定权限为可读可写可执行:
mkdir hello/test2 -m 777
cp——用于复制文件或目录
- 将a文件复制到a2:
cp a a2
- 将hello目录复制到hello2,r命令是递归,可以复制文件:
cp hello/ hello2 -r
- p命令可以复制格式、权限:
cp hello/ hello2 -r -p
- b命令可以产生备份文件:
cp hello/ hello2 -r -b
mv——用于移动文件或将文件重命名
- 将1.txt文件移动到hello目录下:
mv 1.txt hello/
- 将hello2目录移动到hello目录下:
mv hello2/ hello/
- 将所有txt文件移动到hello目录下:
mv *.txt hello/
file——用于查看文件的类型
- 查看1.txt文件的类型:
file 1.txt
- 不显示文件名称:
file 1.txt -b
- 版本信息:
file 1.txt -v
八、打包压缩命令
tar——用于对文件进行打包压缩或解压,压缩-cvf,解压-xvf(c为压缩,x为解压,v为路径,f为文件)
- 打包(没有压缩)当前目录下的所有txt文件,放到root目录下,命名为a.tar.gz:
tar -cvf /root/a.tar.gz *.txt
gzip——一般与tar一起使用,tar只负责打包并未做压缩,使用 -z 选项可以调用gzip压缩,完成打包压缩
- 打包压缩:
tar -zcvf /root/a2.tar.gz *.txt
- 打包压缩:
tar -zcvf abc.tar.gz a.txt b.txt c.txt
- 解压到指定路径:
tar -xvf a2.tar.gz -C /root/hello
zip——压缩效率比不上gzip
- 压缩所有txt文件为1.zip:
zip 1.zip *.txt
- 解压1.zip:
unzip 1.zip
九、搜索命令
which
——用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
使用which命令,可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令,此命令会去搜索$PATH环境变量中的目录路径,可以使用echo $PATH 查看。
- 查找id命令:
which id
whereis
——与which命令相似,whereis也可以查找到命令的绝对路径。两者不同的是,which会列出这个命令的别名记录,而whereis会显示出这个命令的帮助文档所在位置。
whereis id
locate
——根据文件名来搜索文件的命令。区别于 find 命令,locate 命令无需指定路径,直接搜索即可,运行速度较快,可以根据关键字列出所有文件。
locate 命令在 mlocate.db 数据库下搜索,这个数据库位于 /var/lib/mlocate/mlocate.db,它包含了系统里所有文件的索引,并且会在每天早上由 cron 工具自动更新。但是 locate 命令有个弊端,它无法搜索当天所创建的文件,因为它的数据库一般只在早上更新一次,我们可以使用 updatedb 命令手动去更新它的数据库。
updatedb
locate 1.txt
find——用于在一个目录(及子目录)中搜索文件,可以指定一些匹配条件,如按文件名、文件类型、用户等条件查找文件。默认从当前路径开始检索,其搜索速度比locate慢。
- 查找root目录下命名为hello的目录或文件:
find /root/ -name hello
- 不区分大小写:find /root/ -iname hello
- 指定文件类型(f表示文件,d表示目录):
find /root/ -name 1.txt -type f
- 指定权限查找:
find /root/ -name hello.txt -perm 777
-exec command {} \;或-ok command {} \;
将查找到的文件执行command操作,-ok
是交互的,需要用户确认,-exec
不用,{}
和\;
之间有空格,固定格式,{}
表示命令的参数,即为所找到的文件,\
是转义,;
表示命令结束
列举hello路径下的文件:find /root/ -name hello -exec ls {} \;
列举hello所在的路径:find /root/ -name hello -exec pwd {} \;
直接执行指令:find /root/ -name hello -exec whoami \;
grep——一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。
- 在filename文件中查找python:
grep "python" filename
- 在多个文件中查找python:
grep "python" filename filename1 filename2
- 显示所有的进程,匹配所有带ssh服务的进程(a代表显示所有的进程,j代表命令格式):
ps -ajx | grep ssh
grep
可以与find
结合使用
- 列出a目录下的所有文件,通过grep匹配出hello(
|
是管道符,作用是将左边的输出当右边的输入,即将find /a
命令的输出结果当作grep hello
命令的输入进行过滤):find /a | grep hello
十、文件管理权限命令
chmod——进行文件的权限修改,Linux中文件和目录的权限有所不同
文件的权限:
r
:可以读文件,数值为4w
:可以写文件,数值为2x
:可以执行文件,数值为1- 赋予可读可写可执行:
chmod 777 文件名
目录的权限:
x r
:可以复制(cp
)和查看(ls
)目录的内容(即文件和目录),同时还需要可执行权限x w
:可以在目录里创建文件(touch
)和目录(mkdir
)和删除文件(rm
)和目录(rmdir
),同时需要可执行权限x x
:可以进入目录(cd
)和执行文件