Linux之旅--Bash


前言


Shell 是操作系统内置的,用于和内核(Kernal)通信,管理硬件的命令行。

内核,是真正在控制硬件工作的,有CPU进程、内存管理、硬盘输入输出等工作,内核是受到保护的,我们只能通过操作系统提供的API来与内核通信。

Shell,KDE,Application等提供了,通过操作系统API于内核通信的能力。

Linux 默认的 Shell 是 Bash,这是在 Sh 这个 Shell 的基础上发展来的。我们可以通过 /etc/shells 查看 操作系统支持的 Shell 。

用户默认登录取得的 Shell 写在 /etc/passwd 的最后一个字段。



为什么学习 Bash


命令行界面的 Shell 在各大 Distribution 都一样;

远程管理时命令行界面速度较快;

Shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 Shell 编写的。


变量


echo、unset、set、declare、env、export、source、read、$?、变量内容、alias、unalias、\、'、"、ulimit

echo:打印变量,例如 echo $HOME

unset:取消变量赋值

set/declare:显示环境变量和用户自定义变量,declare 可以定义变量类型,默认是字符串;declare -x 是定义环境变量,和export 功能一样

env/export:显示环境变量,不显示用户自定义变量;export 可以把自定义变量 变成环境变量

source:读取并执行文件中的命令,常用来加载环境变量;如果以 Shell 命令的方式执行 加载环境变量,则只会影响 子Shell,不能影响当前 Shell ,所以用source

read:读取键盘输入

$?:显示上一个命令的执行接过,0代表成功,其他数字代表失败

alias:命令别名,比如 ll 就是别名,type ll 可以看到,ll is aliased to `ls -l --color=auto' 

\:转义,比如 \r 回车 \n 换行,在 Shell 输入命令时,可以输入 \回车,就把回车转义了,可以分多行输入命令

'和'':单引号和双引号,变量赋值时,可以用,单引号里面只是纯粹的字符,双引号里面可以保护变量

ulimit:这里有个实战,http://blog.youkuaiyun.com/puma_dong/article/details/45001517

变量内容的删除、替换:是一些需要记忆的符号操作,比如,${变量#关键字},更多符号:#、##、%、%%、/、//等


变量设定方式:



操作环境


路径与命令查找顺序




环境配置文件


默认系统会有一些环境配置文件的存在,让 bash 在启动时直接读取这些配置文件,以规划好 bash 的工作环境。这些配置文件可以分为全体系统的配置文件以及用户个人偏好配置文件。

全体系统的配置文件:/etc/profile,/etc/profile.d/*.sh 会在这个文件的末尾执行

用户个人偏好配置文件:



数据流重定向



2>&1:标准输出和错误输出,都以覆盖的方式进行定位,例如,/bin/bash xx.sh > /dev/null 2>&1


管道命令


在每个管道后面接的第一个数据必定是“命令”,而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是“管道命令”,例如less,more,grep,tail,而ls cp mv就不是管道命令,也就是说:


cut、grep、sort、wc、uniq、tee、tr、col、join、paste、expand、split、UNIX2

cut:针对行分析,例如 echo $PATH | cut -d ':' -f 3,5  把$PATH 的值,以:为分隔符,取出第3和5列

grep:针对行分析,过滤字符串,常用于文件过大时,不适合用 vim 打开

sort:排序,cat /etc/passwd | sort -t ':' -k 3,用第三列排序

wc:统计,就像SQL中的group

uniq:去重

tee:双向重定向,例如,last | tee last.list | cut -d ':' -f 1

tr:字符转换命令,例如,last | tr '[a-z]' '[A-Z]' 小写换成大写; cat /etc/passwd | tr -d '\r' 将输出信息中的回车去掉

col:经常被用于将 man page 转存为纯文本文件以方便查阅,例如,man grep | col -b > grep.man

join/paste:文件联合操作

expand:就是将tab转成空格键,比较一下有没有expand的异同即可 grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 6 - | cat -A

split:文件切割命令

-:一般来说,如果需要 stdout/stdin,但偏偏又没有文件,有的只是一个-,那么这个-就会被当成 stdin 或 stdout

### 如何在 Linux 上搭建 SQLi-Labs 靶场 #### 准备工作 为了成功安装并运行 SQLi-Labs,在本地环境中需具备一定的前提条件。确保已安装 Docker 或者拥有 PHP 和 MySQL 的环境配置[^1]。 #### 安装依赖项 如果选择不使用 Docker,则需要手动设置 Web 服务器(如 Apache)、PHP 及其扩展模块以及数据库管理系统 MySQL/MariaDB。对于 Ubuntu/Debian 用户来说,可以通过 apt-get 来完成这些软件包的安装: ```bash sudo apt update && sudo apt install apache2 php libapache2-mod-php mariadb-server python3-pip -y ``` #### 获取 SQLi-Labs 源码 访问 GitHub 平台上的官方仓库下载最新版本的 SQLi-Labs 压缩文件或者克隆 Git 库到本地机器上: ```bash git clone https://github.com/Audi-1/sqli-labs.git /var/www/html/sqli ``` #### 数据库初始化 进入 `/var/www/html/sqli` 文件夹内找到 `setup/mysql.sql` 脚本并通过命令行工具将其导入至 MariaDB 中创建所需的表结构与初始数据集: ```sql mysql -u root -p < setup/mysql.sql ``` #### 修改配置文件 编辑位于同一目录下的 `sqli/config.inc.php` 文档来适配当前系统的 MySQL 连接参数,例如主机名、端口号、用户名密码等信息。 #### 启动服务 启动 Apache HTTP Server 和 MariaDB Database Service 确保它们处于活动状态以便能够正常提供网页浏览功能和服务请求处理能力: ```bash sudo systemctl start apache2.service mariadb.service ``` #### 测试部署成果 打开浏览器输入 http://localhost/sqli/Less-1 即可看到第一个实验页面 Less-1 登录界面,这标志着整个安装过程顺利完成可以开始学习之旅了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值