大家好呀!今天来和大家分享一些超实用的 linux知识。(有基础的无基础的的都可以看看哦,掏心掏肺把觉得比较精华有用的都掏出来了,点个赞吧......)
一、系统和包管理器
大众常见的 Linux 系统主要分为 debian 和 redhat 两种类型。
-
debian 系列:
-
发行版:包含 ubuntu 和 kali。ubuntu 特点是图形化程度较高,kali 则是集成了各类工具,主要面向渗透测试人员。
-
软件包:大部分的软件包的都是deb(debian 专属简写)的格式,kali 或 ubuntu 换源的时候配置的就是 deb 包(源就是下载源)。最好的理解方式就是类似windows的exe扩展名,是个直接可以执行的东西。
-
包管理工具:使用 apt 管理工具,通过 apt-get 命令来管理 deb 包。
-
下面是对它的基本使用,比如怎么下载一个应用?直接install。还有就是update,它就是从软件源(软件仓库)中获取最新的软件包信息
-
-
redhat 系列:
-
发行版:如 centos 等。
-
软件包格式:RPM。和上面一样理解就可以了
-
包管理方式:可直接使用 RPM 安装,当然现在也可使用更高级的包管理器 YUM 来安装软件。(具体的区别自行查找)
-
用法也就是yum install,makeache这些(我没有centos这里借一下别人的图)
-
二、Shell 脚本解释器
-
Shell 与解释器的概念:我们进到linux里面是不是有一个命令行窗格?那个就是SHELL,它的字面意思是壳,是用户与操作系统沟通的桥梁。我们也可以叫它Shell 解释器,它的作用就是能够将命令转换为可执行代码。
-
常见的 Shell 解释器
-
sh:是 Unix/Linux 系统的默认 shell。
-
bash:是 sh 的增强版,功能更加丰富,也是许多系统的默认 shell。
-
dash:轻量级 shell,常用于 Debian 系统,其启动速度快,但功能相对较少。在 Debian 系统及其衍生版中,/bin/sh 指向 /bin/dash。
-
zsh,最新的kali里面用的就是这个
-
三、目录与特殊变量
1.特殊目录(你真的知道吗)
提问:home目录是家目录吗?~是什么?分不清根本分不清(滑稽)
概念:
home 目录用来存放以用户命名的文件夹,里面包含用户的相关设置,当我们创建用户的时候linux系统会自动帮我们创建它们,用来隔离各自的用户环境。这个/home它是共享的,比如我有两个用户,hzhz和kiritio1024513,我们进到任何一个用户的/home目录里面都会有这么两个文件夹/hzhz和/kiritio1024513
在这两个文件夹里面有什么呢?就分别用户各自的文件,比如各自的桌面Desktop,如下图
那~ 目录是什么呢?它就是等同于以用户命名的文件夹。比方说我在kiritio这个用户使用~,它就是会到home目录下对应的用户文件位置了
举一反三
root 用户的 home 目录就是 /root(刚刚说共享的时候没有说这个,一般用户是看不到root用户的home目录的)
2.父子进程和变量作用
A.父子进程
一旦讨论到变量,我们肯定离不开作用域,这里在讲作用域之前我们先讲一下子进程。
进程就是正在运行程序的实例,刚刚说的在Linux里面的shell就是一个进程(你可以ps列出进程看下),子进程呢就是复刻父进程的克隆,唯一不同的是它是有点虚拟化的意味的,当系统在判断一个程序运行是否会崩溃的时候,就会让子进程先去逝世,崩溃了也不会对父进程有太大影响。
所以我们在使用shell的时候也可以整一个子shell,如下图
当我们输入一个bash的时候就已经进入一个子进程shell了,我这个截图是ctrl+d退出以后的截图
B.作用域
了解完父子shell以后我们就可以讲作用域了
a.局部变量,和任何一门编程语言一样都只能在函数内部调用
b.全局变量,只能在当前进程使用,在新的进程和子shell里面是输出不了的。$x=1,它只会在当前这个shell窗口(也就是当前进程输出),新开一个窗口是没有的,如下图
新进程:
子shell:
c.环境变量
环境变量,学过windows的应该都有接触过环境变量的概念,如下图,环境变量的作用就是用于配置系统行为、指定文件路径的
我们在linux里面使用env 命令来显示环境变量,下面是实例
环境变量和上面两个变量还有一个突出的区别就是永久性的问题,我们平常在用 export 设置的就是暂时的环境变量,它会在 env 输出中显示。但是他们都是临时,重启以后都会不见的,想要设置永久的话就要写入.shellrc的配置文件里面,比如.bashrc或者.zshrc)。
临时设置:
使用 export 命令如下
我们也可以直接添加到环境变量里面的$PATH
例如export PATH=$PATH:/tmp/hello2
永久设置:
使用.shellrc 文件可用于应用设置的环境变量、别名、函数、shell 选项等配置。这里我的是zshrc
常用的环境变量
第一个$PATH,当前找可执行文件的路径
第二个$SHELL,当前的shell解释器
第三个$HOME,当前的home目录
四、输入输出流
在每个运行中的命令行程序其实都连接着三个数据流,作为其与外部环境沟通的渠道
1.标准输入 (0):向程序输入数据
2.标准输出(1):程序的输出 (默认输出到当前终端)
3.标准报错(2):报错消息(默认输出到当前终端)
(ls ./test 2>error.txt报错信息藏起来只要成功信息,这里我们可以丢到dev/null里面,null字面意思也都知道,就是用来放垃圾信息的,这样我们在执行命令的时候就可以避开报错信息,不会在整个页面了)
五、常用命令
find:
find. -type (d/f/l) -name ".*"命令
在当前目录及子目录中查找类型为目录(d)、文件(f)或链接(l)且名称匹配的文件。*是通配符表示所有
例:find. -type f -name "*.txt"在当前目录及子目录中查找所有扩展名为.txt 的文件。
pwd:
pwd 会显示当前的路径,会造成一定的信息泄露。
(我们在渗透的时候如果有机会敲这个命令,就可以通过这个判断当前程序的位置,在传webshell的时候就很有用)
sudo:
sudo命令用于以超级用户(root)权限执行命令。
例如,sudo apt-get update会以root权限执行软件包更新操作
sudo su直接切换到root用户
systemctl
systemctl命令可用于对服务进行各种操作,具体如下:
restart:用于重启服务,例如systemctl restart sshd会重启sshd服务;
stop:用于停止服务;
status:用于查看服务状态,例如systemctl status apache2会查看apache2服务的当前状态;
enable:用于设置服务开机自启。
systemctl list-units --type=service命令用于列出所有服务。
注:在对服务配置文件进行修改后,常需执行systemctl daemon-reload命令重新加载系统服务,之后再执行如systemctl restart docker(以重启Docker服务为例)等相关操作,使修改生效。
history
这个命令再常用不过了,history看历史输入。
但是我们不一定每次都能实时看到history,这里我们的思路就是去找它的存储位置。然后cat查看它的文件。
history存储在.shell_history里面,比如.zsh_history 文件。(在~家目录里,用于存储部分历史命令)
实际就可以这样运用