Linux命令行
约 3260 字大约 11 分钟
2025-04-07
身份及位置查询
- whoami : 查询当前用户
whoami- pwd : 查询当前所在目录
pwd目录管理
- cd :跳转目录
- 主目录:主目录是用户的家,每一个用户都会在/home 有一个主目录,root除外
- 普通用户主目录
/home/<username> - root用户主/root
cd <dir>
# 参数:
# 当前目录:.
# 父目录:..
# 主目录:~
# 上一个目录:-- ls:显示当前目录下的文件
ls <option>
## 参数:
# -a :查看隐藏文件
# -l:查看文件详细信息
# -la :查看隐藏文件的详细信息
# -R:递归查询
# -r:查询结果以倒序列出(文件名首字母)
# -t :查询结果按时间顺序排序文本与文件管理
- echo :对shell说一句话(输入一段话或一段字符串)shell对这段话进行显示
echo Hello,linux
echo "Hello,linux" >` hello.txt
echo "Hello,linux" >`>` hello.txt注意
- 替换:
echo “str”> <file> - 增加:
echo "str" >> <fiel>
- cat : 查看文件内容
cat hello.txt- less: 以分页方式查看文件内
less ~/.zsh_history用法
- 使用↑ ↓ 按键进行翻行
- 跳转到文件首行
- G:跳转到文件末行
<shift+g>/<search>`:查询的字符或串内容 - q: 退出查看
- mkdir :创建一个目录
mkdir "module one" # 创建名称包含空格的目录
mkdir dir2 dir3 # 创建多个目录
rm -rf dir2 dir3 # 删除目录
mkdir -p {test1,test2}/{recon,exploit,report} # 层级化创建多个目录- clear :清除当前屏幕
clear- touch : 创建一个文件
$touch hello2- file:查询文件(file)或目录(dir)属性
file hello2 test
file test
file hello2- rm:删除文件
rm test1
rm -r test用法
- 命令格式:
rm <参数> <文件名> - 删除文件:
rm <filename> - 强制删除:
rm -r <fielname or dirname> - 强制删除无法恢复(谨慎使用):
rm -rf <filename or dirname>
- grep : 从文件中中筛选包含关键字的内容打印
grep 'str' file
cat file | grep 'str'注意
与 ‘|’配合使用,实现或的查询(注意单引号中不要有空格): grep 'str1|str2' fiel
参数:
- -v 排除指定内容
- -o 只显示抓取到的字符,而不是显示一行(每匹配到一个,另起一行打印)
- -A 显示匹配字符行和上一行
- -B 显示匹配字符行和下一行
- -C 显示匹配字符行和上下行(相当于-A 加 -B)
- -E 与管道符配合,对文件内容模糊查询与egrep相同 grep 'str1 * str2' file (* 占位一个字符)
- -r 递归查询,查询目录中的所有文件
- -R 同样是递归查询,但是可以行进一步glob匹配查询
- -c 只显示匹配到字符的行数
- -i 不区分大小写
- -l "str"
<文件名(多个)>找到包含字符串的文件 - -L "str"
<文件名(多个)>找到不包含字符串的文件 - -e 可以连续指定多个参数 grep -e 'h' -e 'k' hello2
- cp 作用:复制,将一个文件复制为另一个文件 格式:cp
<file-s><file-d>复制目录:cp -r <dir-s> <dir-d>复制多个文件到目标目录下:cp <./file1> <./fiel2> <./file3> <....> <d-dir>备注:如果目标目录下有相同名称的文件时会被覆盖cp -i <file-s> <fiel-d>: 当目标中有相同名称的文件时打印提醒
cp file1 file2mv
作用:替换,将一个文件替换为另一个文件 命令格式:mv <file-s> <file-d>
mv fiel1 fiel2查找文件
which
在环境变量中定义的目录中查找文件,此变量中定义了一个目录列表,当发出指令时,linux 会在列表中搜索文件,当匹配到目标时,会显示完整路径。
echo $PATH
which sdblocate
通过locate.db 一个内置的数据库来定位文件,而不是从磁盘查找。因此查找文件比较快捷。
- 通过updatedb命令升级locate.db
sudo updatedb
locate historyfind
find 命令是这三种搜索工具中最复杂、最灵活的搜索工具。掌握它的语法有时很棘手,但它的功能强大,超出了正常的文件搜索。
find / -mtime 0 #搜索最近24小时修改过的文件
# 参数:
# -atime 访问时间
# -ctime 变更时间
find . -type f -iname '*.sh' -mmin -30 -ls
# 搜索最近30分钟修改过的文件
find . -name .svn -exec rm -rf {} \;
# 对搜索结果执行命令(删除)
find . -name .svn |xargs rm -rf
# 对搜索结果执行命令(删除)
# -name : 文件名称
find / -type f -perm -u=s -ls 2>`/dev/null
# 搜索启用SUID权限的文件
# -perm :用户权限
# -u=s 至少属主有S权限
# u=s 属主只有S权限
find /test/ -type f -user kali -perm /220 -name test1
# -type : 文件类型
# d:目录/l:链接/b:块设备/c:串行设备/s:套接字文件/f:文件
# -user :用户属主
# -grep :用户属组
find -name“*.txt”-maxdepth 1
# -maxdepth 1 表示查询目录深度为 1help
作用:查看帮助信息
grep --helpman
- 大多数用于Linux命令行的可执行程序都提供了一份正式的文档,通常称为 man 或man page 。 man 手册通常有名称、概要、命令用途描述以及相应的选项、参数或开关。让我们看看ls命令的man手册:
man ls手册页不仅包含有关用户命令的信息,还包含有关系统管理命令、编程界面等的文档。本手册的内容分为几个部分,编号如下:
- 1、用户命令(普通命令)
- 2、内核系统调用的编程接口
- 3、C语言的编程接口
- 4、设备节点和驱动程序等特殊文件
- 5、文件格式
- 6、游戏和娱乐相关如屏幕保护
- 7、其他
- 8、系统管理命令
man 手册使用
要找到你想看到man手册内容,只需通过关键字搜索,然后通过section 查看命令详情。举例:
- 查看/etc/passwd 的文件格式
man -k "^passwd" #or man -k 'passwd'- 在上述命令的结果中可以看到 passwd 相关的man手册,其中一个是 passwd(5),这就是我们要的选项,可以进一步查看详情:
man 5 passwd运用示例
man手册查看openssl passwd的使用方式
man -k "passwd"
man lssl "passwd"
openssl passwd -1 asd # openssl 生成密钥,并自动加盐
#vim 替换 /etc/passwd/中的密码,apropos
我们可以根据关键字在man手册描述列表中搜索可能的匹配项,例如我们忘记了磁盘分区的命令,可以直接搜索"partition(分区)"。
apropos partitionalias
作用:为命令创建别名 alias <别名>="命令" 备注:"="两边不带空格 取消命令别名 :unalias <别名>
alias lsa = "ls -a"
unalias lsalinux服务管理
- 服务的启用,查看,与停止
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl status apache2
sudo systemctl stop apache2- 查看端口占用
sudo ss -plantu | grep 22- 查看可用服务列表
systemctl list-unit-files更新与卸载工具
- 更新仓库列表
sudo apt update- 安装或跟新软件 如果不指定,则默认跟新全部
sudo apt upgrade <packages>- 查找需要安装的软件包
sudo apt search <package>- 查看软件包的详情,包括版本,依赖等
sudo apt show <package>- 离线安装 需要手动不解决依赖
sudo dpkg -i <package>cd download
sudo apt install ./<package>- 卸载软件包
sudo apt remove --purge <package>查看历史命令
history
history 命令可以查看当前用户的历史命令,如果想执行以前执行过的命令则使用'!'+ 编号 历史命令以文件形式存储,一般在 /.bash_history, kali 在/.zsh_history
history # 查看历史命令
!1 # 执行编号为1 的命令history 文件配置
针对history的配置在~/.bashrc 中 HISTSIZ: 控制当前会话存储在内存中的命令数量 HISTFILESIZE : 控制历史文件中保存的命令数量
使用 [CTRL+R] 在shell 中开启history命令搜索功能
当你在命令行中执行[CTRL+R] ,输入关键字,就会匹配到最新执行过的包含关键字的命令,点击回车可执行。
┌──(kali㉿bogon)-[~]
└─$
bck-i-search: _┌──(kali㉿bogon)-[~]
└─$ sudo apt purge fcitx-rime
bck-i-search: im_┌──(kali㉿bogon)-[~]
└─$ sudo apt purge fcitx-rime
[sudo] password for kali:管道符和重定向
管道符"|" , 重定向 ">>" "<<"
- 利用重定向符来计算文件中的字符数
┌──(kali㉿bogon)-[~]
└─$ echo "that is maintained and funded by Offensive Security" >`>` redirection_test.txt┌──(kali㉿bogon)-[~]
└─$ cat redirection_test.txt
that is maintained and funded by Offensive Security┌──(kali㉿bogon)-[~]
└─$ wc -m < redirection_test.txt
52文件操作
grep
grep -Ri passwd . #对当前目录中所有文件进行递归搜索
grep -E ^root /etc/passwd # 对搜索结果进行过滤,过滤出以root开头的行
grep sh | grep -v nologin # -v 反选,抓取包含sh 且不含nologin的行sed
sed是强大的流编辑器,对一组文件或其他命令输出执行流编辑操作 当可以在目标shell中可以使用命令但是是非交换的shell时,可以通过sed命令进行文件编辑。
- 例:当无法使用vi时,用sed替换/etc/passwd中的root密码
openssl passwd -1 123
sed 's/x/$1$pD3eBFtC$uv/sG.z8LOMHI1ZQLV2pk0/g' >` /etc/passwdcut
cut 从一行中提取一段文本并将其输出到标准输出。
cat /etc/passwd | cut -d ":" -f 1,7 |grep sh -v nologinawk
awk 和cut 的共功能一样,但是 -F 可以指定多个字符作为分隔符。
cat /etc/passwd | awk -F ":abc" '{print $1,$7}' |grep sh -v nologinsort
sort的功能是排序
cat access_log.txt | cut -d " " -f 1 |sort | uniq -c | sort -run- sort 命令排序
- sort 默认按第一个字符正序
- sort -u 去重
- sort -run 按数值从大到小排序
uniq
使用 uniq 进行统计 uniq -c 按出现次数进行数值统计
文件内容比较
comm
comm <file1> <file2>- 三列
- 第一列: 只在第一个文件里有
- 第二列:只在第二个文件里有
- 第三列:两个文件中相同的内容
comm -12 <file1> <file2> # 只显示相同的
comm -3 <file1> <file3> # 只显示不同diff
diff -c <file1> <fiel2> # 两部分显示
diff -u <file1> <file2> # 一起显示vimdiff
略
meld 图形化文件目录对比工具
略
作业管理
后台运行进程:
- 方法一:在命令末尾使用 &
ping -c 400 localhost > ping_results.txt &- 方法二:Ctrl + Z 挂起后 bg 切换后台运行
┌──(kali㉿bogon)-[~]
└─$ ping -c 400 localhost > ping_results.txt
^Z
zsh: suspended ping -c 400 localhost > ping_results.txt
┌──(kali㉿bogon)-[~]
└─$ jobs
[1] + suspended ping -c 400 localhost > ping_results.txt
┌──(kali㉿bogon)-[~]
└─$ bg
[1] + continued ping -c 400 localhost > ping_results.txt将后台进程切换为前提运行
┌──(kali㉿bogon)-[~]
└─$ jobs
[1] + running ping -c 400 localhost > ping_results.txt
┌──(kali㉿bogon)-[~]
└─$ fg %1
[1] + running ping -c 400 localhost > ping_results.txt• %Number : job编号,如 %1 or %2 • %String : 命令名称,如 %ping • %+ OR%%: 当前的job • %- : 上一个job
进程管理
ps
用于查找进程ID
ps -ef• -e: 显示所有进程 • -f: 显示所有列 (UID, PID, PPID, etc.) • -C: 按命令名称显示
kill
向指定ID的进程发送信号.
kill <process-id>对文件和命令进行实时监控
在渗透过程中实时监控文件和命令是非常有价值的,tail 和 watch 这两个命令对此非常有帮助
tail
• -f :随着文件内容的增长不断跟新显示 • -n :指定显示的行数,不带此选项,则默认10行 示例:监控apache2日志,显示行数为5
sudo tail -f -n 5 /var/log/apache2/access.logwatch
用于设定定时任务 • -n : 指定间隔时间 示例:每间隔5秒列出登录用户
watch -n 5 w文件下载
wget
用于下载 http/https/FTP 协议的文件 • -O : 将下载后的文件以与源文件不同的名称在本地保存 示例:下面的命令将下载的文件保存为report_wget.pdf
wget -O report_wget.pdf https://www.offensivesecurity.com/reports/penetration-testing-sample-report-2013.pdfcurl
curl 是使用多种协议(包括IMAP/S、POP3/S、SCP、SFTP、SMB/S、SMTP/S、TELNET、TFTP等)向服务器传输数据或从服务器传输数据的工具。 用法与 wget 相同
curl -O report_wget.pdf https://www.offensivesecurity.com/reports/penetration-testing-sample-report-2013.pdfaxel
是一个下载加速器,支持断点续传。 • -n: 指定要使用的多个连接的数量 • -a: 简洁的进度指示器使用 • -o: 为下载的文件指定不同的文件名 示例:
axel -a -n 20 -o report_axel.pdf https://www.offensivesecurity.com/reports/penetration-testing-sample-report-2013.pdf~/.bashrc
- 中保存了history的设置参数、自定义环境变量、命令别名,因此有可能泄露敏感信息。
- Bash中交互shell的行为由/etc/Bash.bashc中的系统范围的bashrc文件决定。可以通过编辑任何用户主目录中的.bashrc文件来覆盖系统范围的Bash设置。
- .bashrc脚本在用户登录时执行。由于此文件是一个shell脚本,因此我们可以插入任何可以从命令提示符执行的命令。
