暑假日记之linux

稍微画一些时间学习一下,这边预计3天学习完吧。
1.输出echo

pwd:显示当前目录whoami:显示当前登入用户echo:输出内容>:定向符号
讲讲一下问题: 就是我一开始想要试着执行这个文本文件所有使用我会的chmod指令,但是后来一下这不是可执行的文件啊。应该用cat或者vim查看。
2.$(指令)

$(命令) 是命令替换,会先执行括号内的命令,再将结果替换到外层命令中
讲一讲问题: 其实这个部分很简单,因为echo我本来就会,就是这个$后面的指令先执行我确实不懂。还有一个点就是echo+文件怎么就光输出文件名了。另外,其实~这个代指根目录,没有讲其实,不过正常也直到。echo只是用来输出文本内容。。。。。。。
3.help

--help — 查看简要帮助
讲一讲问题: 这关没什么好说的,其实最主要的就是学会打开手册,然后就是直接>,使用这个定向符号可以直接保存内容。
4.ls和cd

ls — 列出当前目录ls -l — 长格式(权限、大小、时间)ls -a — 显示隐藏文件(以 . 开头)ls -la — 长格式 + 隐藏文件ls -lh — 人类可读的文件大小
cd /path — 切换到指定目录cd .. — 返回上级目录cd ~ 或 cd — 回到家目录
讲一讲问题:
其实这个我感觉比较关键的是etc这个文件。
在这里,我就不列举etc是什么了。etc
5.mkdir和touch

mkdir 创建目录mkdir dir — 创建单个目录mkdir -p a/b/c — 递归创建多级目录touch — 创建空文件touch file.txt — 创建空文件&& — 连续执行 eg:cmd1 && cmd2 — cmd1 成功后才执行 cmd2
讲一讲问题:
这边有一个小点 我就是利用mkdir创建了两个目录,导致不满足写入文件的条件,就导致一直报错说这个是一个目录,之后rm的用法也不对,我以前的印象里面rm就是用来删除文件的,但是这边rm删除不了目录,或者说rm+文件名这个用法不适合删除目录,其实目录就是一个文件夹拉,所以实际删除文件夹的命令是用rmdir,dir:direction。
然后就是这边我没有使用到touch这个创建空文件的命令,以及&&这个连续执行我没有使用到,下一次我会注意点,至少当前关卡给出的命令都要使用到。
6.cp和mv

cp src dst — 复制文件cp -r dir1 dir2 — 递归复制目录
mv old new — 重命名文件mv file dir/ — 移动文件到目录
讲一讲问题:
其实看到这个mv我就想起之前isctf上的一题web利用mv移动相同名字的文件会产生碰撞的情况,产生webshell。
嘶,我记得我写过文章,怎么不见了。



稍微贴下别人的博客。
讲回命令学习,一开始犯下的错误就是敲键盘敲得太快,想当然的敲指令,造成的错误。
对了对了,cp这个指令容易复制不了太大的文件,因为我以前试过。
7.rm

rm file — 删除文件rm -r dir — 递归删除目录及其内容rm -f file — 强制删除,不提示rmdir dir — 删除空目录
讲一讲问题:
首先其实在创建没有内容的文件时,直接用touch就行了。其次,其实一开始比较不理解的是touch能不能递归创建?一般我用的是nano,和vim,这边看了一下,其实是我的指令有用问题,要mkdir olddir && touch olddir/a.txt这样。
还有就是在删除的时候,我老是喜欢/文件名,但这个不是指当前文件的根目录下的文件,而是系统根目录,根据pwd来看其实,如果非要这样,就得 /home/student/olddir ,不然就到系统根目录去了。
如果非要用/文件名,那就要~/文件名。
8.cat,less,more

cat file — 一次性输出全部内容less file — 分页查看(q 退出,空格翻页)more file — 类似 less 的简化版
讲一讲问题: 没什么,我唯一新奇就是less这个按页读取有点意思。more其实实际操作起来感觉就是cat。
9.head和tail

head -n 3 file — 显示前 3 行tail -n 3 file — 显示最后 3 行tail -f file — 实时跟踪文件末尾(日志常用)
讲一讲问题: 其实感觉起来,这个tail指令有点意思,ctf简单的比赛里面还能遇到,比如cat吃ban的时候。总体而言,tail和head这两个指令就是用于查看大内容的细致部分。
9.nano

nano file — 打开或创建文件Ctrl+O — 保存文件Ctrl+X — 退出编辑器Ctrl+K — 剪切当前行Ctrl+U — 粘贴
没什么问题,nano我很经常用。
10.vim

vim 基础vim 是 Linux 最强大的文本编辑器之一。
三种模式普通模式 — 默认模式,用于导航和命令插入模式 — 按 i 进入,用于输入文字命令模式 — 按 : 进入,用于保存退出等常用操作i — 进入插入模式Esc — 回到普通模式:w — 保存:q — 退出:wq — 保存并退出:q! — 不保存强制退出dd — 删除当前行yy — 复制当前行p — 粘贴有点意思的是,这个靶场的容器无法自带vim得自己下载,其实有点不符合教学用意,或者说应该在旁边的教学给出下载的指令,这个靶场是面向新手的的,所以应该认真一点,不是吗,不过首领大人没改,应该是觉得没有必要了。
这个靶场是河南的一个师傅做的。
sudo更新一下软件园,然install就行了。

讲一讲问题:
有点卡,导致一开始vim必须强制不保存退出来,在创建功能下nano比vim好用,但是在编辑功能下,vim就更加有优势了。
11.grep

grep pattern file — 搜索匹配行grep -i — 忽略大小写grep -n — 显示行号grep -r — 递归搜索目录grep -v — 反向匹配(不包含的行)grep -c — 只显示匹配行数
讲一讲问题: 其实说实话,很像string,我之前在windows下安装过这个程序便能跟linux系统一样直接搜索,其实这个就是一个搜索的指令。
12.find

find /path -name 'pattern' — 按文件名查找find /path -type f — 只查找文件find /path -type d — 只查找目录find /path -size +1M — 查找大于 1MB 的文件find /path -mtime -7 — 最近 7 天修改过的文件目录查询,也是文件夹内查询。

讲一讲问题: 首先find,string,grep这个三个都是搜索的指令,第一个find是目录种搜索文件,string就是选择字符串,其实感觉grep跟string是一样的功能。
之后就是一个问题,就是一个是 find /etc -name '*.conf' ,这边多了一个星号。
星号在这边是匹配字符的意思,或者说它是一个占位符,表示 xxx.conf。
星号 * 是通配符,表示:
匹配任意数量的任意字符,包括 0 个字符。
之后有一个需要了解的是conf是什么文件?
13. 管道符|

管道 |管道将前一个命令的输出作为后一个命令的输入。
ls | wc -l — 统计文件数量cat file | grep pattern — 搜索文件内容ps aux | grep nginx — 查找进程history | tail -20 — 查看最近 20 条历史命令
讲一讲问题:
其实没什么,就是一个连续使用命令的方法而已,关键应该是记一下这个 wc -l 这个指令我还真不知道,统计数量。

这还有个看进程的说法,其实一般不都是直接ps的吗?
14.重定向和追加

重定向> — 覆盖写入文件(文件已有内容会被清空)>> — 追加到文件末尾
输入重定向< — 从文件读取输入
错误重定向2> — 将错误输出重定向到文件2>&1 — 将错误输出合并到标准输出
讲一讲问题:
个人感觉比较重要的就是这个错误重定向。
15.sort和uniq和wc

sort file — 按字母排序sort -n — 按数字排序sort -r — 逆序
uniq — 去除相邻重复行(需先排序)uniq -c — 显示重复次数
wc -l — 统计行数wc -w — 统计单词数wc -c — 统计字节数
讲一讲问题: 我去,被阴到了,这个\n就是换行,我还以为就是直接这么输入的。
16.chmod

chmod 用于修改文件权限。
4 — 读 (r)2 — 写 (w)1 — 执行 (x)
三位数字分别代表:属主、属组、其他人644 — 属主读写,其他人只读755 — 属主全部,其他人读+执行600 — 仅属主读写700 — 仅属主全部权限
17.chown

chown 用于修改文件的属主和属组。
chown user file — 修改属主chown user:group file — 同时修改属主和属组chown -R user dir — 递归修改目录
讲一讲问题: 首先就是创建这个用户,题目没有给代码,我是自己查询得到的代码,创建了一个普通用户,之后就是正常创建文件,写入内容。然后就是在修改用户属性的时候,权限不够,需要sudo提权一下。
sudo useradd -m xxx18.useradd和groupadd

用户管理useradd user — 创建用户userdel user — 删除用户passwd user — 设置密码id user — 查看用户信息
组管理groupadd group — 创建组usermod -aG group user — 将用户加入组groups user — 查看用户所属组
讲一讲问题:
有点卡管理员权限了,所有操作都要提权sudo。
19.sudo和su

sudo 与 susudo — 以其他用户身份执行命令sudo command — 以 root 身份执行sudo -u user command — 以指定用户身份执行需要当前用户在 sudo 组中su — 切换用户su user — 切换到指定用户su - user — 切换并加载用户环境su - user -c 'cmd' — 以指定用户执行命令区别sudo 执行单条命令,不切换 shellsu 切换整个用户会话
讲一讲问题: 首先就是创建用户后,忘记设置密码,导致无法使用账号,然后就是我犯了个打错就是直接切换用户进行操作了,什么权限都没有。
20.ps和top

ps — 进程快照ps — 当前终端的进程ps aux — 所有进程详细信息ps -ef — 另一种格式显示所有进程
top — 实时监控top — 实时显示进程(按 q 退出)
ps aux 输出列USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
讲一下问题:
嘶这个默认student用户不是root很烦,虽然权限很高但是根本没有ps到root的进程,我一开始或许就需要用 su - root -c 'ps aux' 来做。
21.kill

kill PID — 发送 SIGTERM(15),请求终止kill -9 PID — 发送 SIGKILL,强制终止kill -HUP PID — 发送 SIGHUP,重新加载配置kill -l — 列出所有信号
pgrep name — 按名称查找进程 PIDpkill name — 按名称终止进程killall name — 终止所有同名进程
22.jobs后台任务

command & — 在后台运行命令Ctrl+Z — 暂停当前前台任务
jobs — 查看后台任务列表fg %n — 将任务 n 调到前台bg %n — 让暂停的任务在后台继续运行
nohup command & — 退出终端后继续运行
好吧,感觉这个任务描述不对,第四点完全没有用,还会误导。
23.systemctl

systemctl start name — 启动服务systemctl stop name — 停止服务systemctl restart name — 重启服务systemctl status name — 查看状态systemctl enable name — 开机自启systemctl disable name — 取消自启
查看服务列表systemctl list-units --type=serviceservice --status-all(兼容旧系统)
讲一讲问题:
感觉不出这个 systemctl 有什么用,没有感觉出这个会在ctf做题中起到的作用,没有什么意思。
然后就是应该就是单纯版本问题ubuntu的版本过新,导致这个项目一直弹一些没有用的信息。
24.cron定时任务

分 时 日 月 周 命令
* * * * * command常用操作crontab -e — 编辑当前用户的定时任务crontab -l — 列出当前定时任务crontab -r — 删除所有定时任务
时间示例* * * * * — 每分钟0 * * * * — 每小时0 0 * * * — 每天午夜0 0 * * 0 — 每周日午夜
讲一讲问题:
我快被这个linux终端的显示搞死了,长指令无法换行导致我看的巨难受。
然后就是依旧是没有 cron 这个定时任务,还得我自己装。
最后就是,我tf的crontab控制,没有全是所有都得sudo然后指定用户。
printf '%s\n' '* * * * * date >> ~/cron_log.txt' | sudo crontab -u student -sudo crontab -u student -l > /home/student/my_crontab.txtcat /home/student/my_crontab.txt最后还是小小借助ai整合了一下指令。
25.ip和ifconfig

- `ip addr` — 查看所有网络接口和 IP 地址- `ip link` — 查看网络接口状态- `ip route` — 查看路由表
- `ifconfig` — 查看所有网络接口- `ifconfig eth0` — 查看指定接口
- `lo` — 本地回环 127.0.0.1- `eth0` — 第一个以太网接口- `wlan0` — 无线网卡
26.ping和traceroute追踪

ping 与 traceroute
ping — 测试连通性ping host — 持续 ping(Ctrl+C 停止)ping -c 3 host — 只 ping 3 次ping -W 2 host — 超时 2 秒
traceroute — 路由追踪traceroute host — 显示到目标的路由路径tracepath host — 类似 traceroute
27.curl和wget

curl — 传输数据curl url — 获取页面内容curl -O url — 下载文件(保留原名)curl -o file url — 下载并指定文件名curl -I url — 只获取响应头curl -X POST url — 发送 POST 请求
wget — 下载文件wget url — 下载文件wget -O file url — 指定保存文件名
28.ss和netstat监听

ss — Socket Statistics(推荐)ss -t — 显示 TCP 连接ss -u — 显示 UDP 连接ss -l — 只显示监听端口ss -n — 显示数字端口号ss -p — 显示进程信息ss -tlnp — 常用组合:TCP 监听端口+进程
netstat(旧版)netstat -tlnp — 类似 ss -tlnp
讲一讲问题: 监听还蛮有用的,一般是需要用临时服务来接收对方信息,或者来构造一个服务向对方发送信息的。我还没有搞一台服务器,之后得搞一下了,日本的vps存在断连,顶多拿来当梯子勉强用了。
29.dns和dig

DNS 配置文件/etc/resolv.conf — DNS 服务器配置/etc/hosts — 本地主机名映射
查询工具dig domain — 详细 DNS 查询nslookup domain — 简单 DNS 查询host domain — 最简洁的查询
/etc/hosts 格式127.0.0.1 localhost::1 localhost
讲一讲问题:
这关没做好啊,感觉 ,应该更有教学感一点,比如dns是什么有什么意思,这个配置文件是什么?
30.apt包管理

apt 包管理apt update — 更新包索引apt install pkg — 安装包apt remove pkg — 卸载包apt search keyword — 搜索包apt list --installed — 列出已安装的包
dpkgdpkg -l — 列出所有已安装包dpkg -i file.deb — 安装 deb 包dpkg -L pkg — 查看包安装的文件
讲一讲问题:
其实就是一个简单查看项目包,嘶,这个到底怎么讲,不是很清楚,就叫库或者包吧,最常用的操作,因为有有很多简化的操作都是利用这些包来完成的。
31.环境变量env
image-20260723185359959

环境变量env — 查看所有环境变量echo $VAR — 查看单个变量printenv VAR — 另一种查看方式
设置环境变量export VAR=value — 设置并导出VAR=value — 仅在当前 shell 有效unset VAR — 删除变量
常见环境变量HOME — 家目录PATH — 命令搜索路径USER — 当前用户SHELL — 当前 shell
讲一讲问题:
环境变量,在ctf里面还挺经常出现的,很多时候都会看看环境变量是否有什么比较重要的信息,比如key密钥,目录啊,甚至flag。
32.path和alias



讲一讲问题: 首先就是path,前面讲过了。

这个就是设置搜索目录的。
然后就是比这个别名,我猜到了,就是讲长指令用简单的来代替,就像是你的名和你的字,无论叫哪一个都是在叫你。
33.打包和压缩



讲一讲问题:
这次是让ai帮我直接做的,因为一开始报错后,我喂给ai就变成直接命令。
首先讲一讲ai给的,前两步跟我自己的一样,而后面的打包压缩我就有点不明白了,一个czf一个xzf,不过狗来我也明白了,c指的是create创建,z指的是gzip,f指的是指定文件夹,后面-C是指文件夹,而不是文件。
至于mkdir的-p其实没有什么用,按ai讲法就是创建目录所在的父目录,已经有了就没有什么用创建的就是student这个目录。
tar的-x就是解开的意思,我其实好奇一个点gzip压缩跟zip压缩有什么区别呢?
34.shell变量

Shell 变量与引号VAR=value — 定义变量(等号两边不能有空格)$VAR 或 ${VAR} — 引用变量readonly VAR — 只读变量
双引号 "" — 变量会被展开单引号 '' — 原样输出,不展开变量反引号 ` ` 或 $() — 命令替换eg:NAME="World"echo "Hello $NAME" # Hello Worldecho 'Hello $NAME' # Hello $NAME
讲一讲问题:
其实就是一个单引号和双引号的问题,其他比如这个shell我其实觉得没有体现。
然后就是这个执行文件是~/vars.sh,而不是我自己虚拟机里面linux的使用方法。
然后就是一个cat > xxx << ‘EOF’,这个是直接使用直接创建的,也是ai特别喜欢给我的答案。
35.条件判断

if基本语法if [ 条件 ]; then 命令elif [ 条件 ]; then 命令else 命令fi
文件测试[ -f file ] — 文件存在且是普通文件[ -d dir ] — 目录存在[ -e path ] — 路径存在[ -r file ] — 文件可读
字符串比较[ "$a" = "$b" ] — 相等[ -z "$a" ] — 为空[ -n "$a" ] — 非空
数字比较[ $a -eq $b ] — 等于[ $a -gt $b ] — 大于[ $a -lt $b ] — 小于
36.循环

for循环for i in 1 2 3 4 5; do echo $idone
for i in $(seq 1 5); do echo $idone
for file in *.txt; do echo $filedone
while 循环i=1while [ $i -le 5 ]; do echo $i i=$((i+1))done

讲一讲问题:
我用vscode来写指令了。说实话,有点尴尬,我不是学指令,怎么像学代码了。
37.函数和脚本

定义函数greet() { echo "Hello, $1!"}greet World
脚本参数$0 — 脚本名$1, $2, ... — 第 1、2 个参数$# — 参数个数$@ — 所有参数$? — 上一条命令的返回码
返回值return 0 — 函数返回成功return 1 — 函数返回失败

讲一讲问题:
其实关于使用这个函数,是~/文件 参数,这个参数是我们输入的也就是我们输入给函数的,所以第二个参数的输入应该是~/文件 参数1 参数2。

image-20260723204309708

结束,学的还行,马马虎虎。
- 版权声明:本文由 余林阳 创作,转载请注明出处。
喜欢这篇文章吗?
点击右侧按钮为文章点赞,让更多人看到!
在下余林阳