- 冒个泡
- 开篇
- 1 Linux 常见目录
- 2 Linux基础命令
- 2.0 环境变量
- 2.1 apt-get 安装
- 2.2 ls ll 和 alias
- 2.3 花式grep
- 2.4 git 命令
- 2.5 sed(stream editor流式编辑器) 命令
- 2.6 awk命令详解
- 2.7 命令
- 3 shell基础
- 4 脚本应用
- 4.0 crontab定时任务
- 4.1 监测进程并重启脚本
- 4.2 获取本机IP发送邮件
- expect脚本自动连接服务器
- 5 docker
- 5.1基础
- 5.2 dockerfile(构建docker镜像的文件)
- 5.3 docker网络
- 全文最重要的话
发点存货证明自己没有进去!!!
我以为只要小说会被催更,原来博客也会被催,谢谢大家的厚爱,日后会逐渐更新《Kali学习之从入门到入狱(一)》中的常用工具。
说一下一直不更新的原因:博主主要是做算法的,最近事情也比较多,玩渗透只是兴趣爱好,还有交了女朋友影响了我打字速度。。。奥,编不动了,其实主要是懒。
开篇相信看到这里的同学都已经玩过kali机了,kali是自带图形界面的,我们可以像Windows一样通过点击的方式去操作他。即使不会Linux一样可以点点点。但是如果想使用kali的渗透工具,全部都是命令行,完全无从下手。这一期把我学习Linux,shell、except的笔记,分享一下。
1 Linux 常见目录/etc/shells # 记录了当前Linux系统中所支持的shell版本 /etc/security/limits.conf # 对系统的内存,cpu,最大打开文件数等资源进行限制。 /etc/hosts /etc/profile # 系统级环境变量和开始程序 # 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行 # 并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/cron.d/ # 定时任务目录 /etc/sysconfig/network # 网络 /etc/rc.d/init.d # 启动的配置文件和脚本 /etc/rc.d # 启动的配置文件和脚本 /etc/passwd # 用户信息文件 /etc/group # 组信息文件 /etc/bashrc # 系统级 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. /var/log # linux默认应用的日志路径 /var/log/cron # 定时任务日志 /var/log/httpd/ # Apache相关日志 mod_jk, access, error /var/log/rpmpkgs # rpm packags /var/spool # 放置“假脱机(spool)”程序的目录,如mail、news、打印队列和其他队列工作的目录。每个不同的spool # 在/var/spool下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。 /proc/version # 查看linux版本信息 /proc/cpuinfo # cpu 信息 命令:lscpu /proc/meminfo # 内存 信息 /proc/interrupts # 查看中断 /proc/loadavg # 查看系统负载 /dev/null # 丢弃的文件 , 一般 2>dev/null ,将错误信息放入文件 strings /dev/urandom # 生成随机字符串的设备文件 /var 包含 系统一般运行时要改变的数据。 通常这些数据所在的目录的大小是要经常变化或扩充的。原来/ v a r目录中有些内容是在/ u s r中的,但为了保持/ u s r目录的相对稳定,就把那些需要经常改变的目录放到/ v a r中了。每个系统是特定的,即不通过网络与其他计算机共享。 /bin # 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。 /sbin # 该目录用来存放系统管理员的系统管理程序。 /etc # 该目录存放了系统管理时要用到的各种配置文件和子目录, # 例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。 /home # 用来存放该用户独立数据的主目录。 /lib # 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库 /lost+found # 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。 /mnt # 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。 /proc # 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的 /root # 如果你是以超级用户的身份登录的,这个就是超级用户的主目录 /tmp # 用来存放不同程序执行时产生的临时文件 /boot # 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息 /dev # 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口, # 你可以访问这些外部设备,与访问一个文件或一个目录没有区别。 # 键入"cd /dev/cdrom",就可以看到光驱中的文件;键入"cd /dev/mouse"即可看鼠标的相关文件。2 Linux基础命令 2.0 环境变量
# 连接到当前终端 是 /bin/bash 命令行 (pstree) 输入pstree 可以看到sshd这是因为我用item2通过ssh连接的服务器。出现两个sshd的原因我猜测是做过内网穿透的原因。 bash 就是我们当前连接的命令行,pstree说明我们在当前命令行执行了pstree命令 ─sshd───sshd───bash───pstree 当我们输入在命令行输入bash,发现执行成功但是看不出变化,继续输入pstree命令 bash 发现多了一个bash说明我们现在执行的命令已经是新的bash ─sshd───sshd───bash───bash───pstree # 两个bash会造成的影响,发现第二 echo $a 为空,说明变量a只是局部变量 a=10 echo $a bash echo $a # 我们设置全局变量后全部bash都可以访问 # 方法一(当前终端有效,窗口关闭后无效): export a=10 # 方法二(vi ~/.bashrc 或 ~/.bash_profile 用户环境变量,只对当前用户有效,且永久生效): # (vi /etc/bashrc 或 vi /etc/profile 系统环境变量,对所有用户有效,且永久生效) 进入文件写入 a=10 source ~/.bashrc
现在有了全局变量和局部变量的知识,那么问题来了,通过全局变量的设置,我们的Linux命令可以在任意bash下执行的,但是Linux为什么可以在任意目录下执行?这就要说到PATH变量。
PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行.
# 我们看一下系统默认设置的PATH路径 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 我们通过寻找 /bin 目录发现ls 命令在这个命令下 ll /bin/ | grep ls 所以,我们完全可以把下载好的应用拷贝到 /bin,/usr/bin 等任意目录, 我们下载的应用也可以像Linux自带的命令一样在任意位置执行。 # 或者直接将路径添加在PATH变量上: export PATH=/home/user/mysql/bin:$PATH # 或者把PATH放在前面 export PATH=$PATH:/home/user/mysql/bin
sh 和 source 区别
sh 执行脚本 : 新创建一个bash 在新建bash下执行 脚本 source 执行脚本 : 在当前 bash 执行脚本2.1 apt-get 安装
apt-get 命令是 Ubuntu 系统中的包管理工具,可以用来安装、卸载包,也可以用来升级包,还可以用来把系统升级到新的版本。 相比较Windows,需要打开应用商店,搜索软件,然后才能下载,安装。 Ubuntu只需要知道要下载的软件名一条命令就可以完成。 # 下载包目录:/var/cache/apt/archives # 安装应用目录:/usr/share或/usr/local apt-get install 软件名 # 删除已安装的软件包(保留配置文件),不会删除依赖软件包,保留配置文件; apt-get remove 软件名 # 删除已经安装过的的软件安装包;即自动将/var/cache/apt/archives/下的所有deb删掉 apt-get clean # 搜索:系统会列出与2.2 ls ll 和 alias名称相匹配的包 apt-cache search # 更新 apt-get update 是更新软件列表, apt-get upgrade 是更新软件。
ls 大家都知道是打印出当前目录的列表 ls -l 可以看到详细信息 ll 与 ls -l 的效果一样的 但是并不是有ll这个命令而是在环境变量中设置了别名 vi ~/.bashrc 在文末添加: alias ll='ls -l --color=auto' alias name=value # =两边不能有空格,可以自定义一些命令 source ~/.bashrc2.3 花式grep
# 找到id_all.txt中所有不在id_1k.txt中的字符串 取反 字符串匹配 全部匹配 指定规则文件 grep -v -F -w -f id_1k.txt id_all.txt -i 或 --ignore-case : 忽略字符大小写的差别。 -F 或 --fixed-regexp : 将样式视为固定字符串的列表。 -v 或 --invert-match : 显示不包含匹配文本的所有行。 -w 或 --word-regexp : 只显示全字符合的列。 -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。 -q 或 --quiet或--silent : 不显示任何信息。 -f<规则文件> 或 --file=<规则文件> : 指定规则文件,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 # grep 多种规则 ^$ 去除空行 grep -E'(John|Jerry|^$)' roster.txt # 通过pgrep来获得正在被调度的进程的相关信息 pgrep -l 程序名 -l:同时显示进程名和PID # fgrep 因为它搜索字符串而不是搜索匹配表达式的模式。 命令使用快速的压缩算法。 fgrep 使用相当于 grep -F 的效果 # egrep egrep命令检索扩展的正则表达式2.4 git 命令
# 用户标识(必须配置) git config user.name "username" git config user.email "email" git config --global user.name "zhangyiqian" #名称 git config --global user.email 496115313@qq.com #邮箱 # 局部配置 git config user.name "username" git config user.email "email" # 显示中文 git config --global core.quotepath false # 初始化 git init # git操作 git status # 查看文件状态 git add . # 所有文件提交到暂存区 git commit -m "new file" # 提交信息 git push # push 到远程仓库 # 忽略文件 .gitignore *.txt # 忽略.txt结尾文件 !lib.txt #lib.txt 除外 /temp # 忽略 /temp下所有文件 # 远程 ssh-keygen # 生成公钥,免密登录 id_rsa.pub # 公钥添加到gitee # 版本恢复 1、查看版本 git log # 方法1 git reset --hard 目标版本号 git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本 # 方法2 git revert -n 目标版本号 git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。 比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。 # 多人操作 分支 git branch # 列出本地分支 git branch -r # 列出远程分支 git branch [branch-name] # 新建分支 git checkout -b [branch] # 新建并切换分支 git merge [branch] # 合并指定分支到当前分支 git checkout -d [branch] # 删除分支 git push origin --delete [branch-name] # 删除远程分支 git branch -dr [branch] # 删除远程分支 # 远程分支使用 git checkout -b new_branch # 本地新建分支 git push <远程> <分支> # 提交到远程2.5 sed(stream editor流式编辑器) 命令
# 语法 sed [-hnV][-e


