泷羽sec专题课笔记-- Linux基础(1)--基础命令/查找命令

  本笔记为 泷羽sec 《红队全栈课程》学习笔记,课程请可自行前往B站学习,课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等,请使用该课程、本笔记以及课程和笔记中提及工具的读者,遵守网络安全相关法律法规,切勿进行违法违规违纪的操作。

写在最前面的话,我们为什么要学习网络安全这门技术:

  • 维护国家安全

  防范网络攻击:网络安全威胁已成为国家安全的重要挑战。学习网络安全有助于识别和防范来自国内外的网络攻击,防止敌对势力通过网络手段窃取敏感信息、破坏关键基础设施或干扰社会正常运作。
  保护关键基础设施:现代社会高度依赖网络技术,金融系统、交通网络、电力供应等关键基础设施都依赖于稳定的网络环境。掌握网络安全知识有助于保护这些基础设施免受网络攻击,确保国家的正常运转。

  • 促进经济发展

  保障数字经济安全:数字经济已成为国家经济增长的重要引擎。通过学习网络安全,可以保障数字经济的健康发展,防止数据泄露和网络犯罪对经济活动的干扰。
  增强国际竞争力:在全球化的背景下,网络安全技术水平直接影响国家的国际竞争力。掌握先进的网络安全技术和策略,有助于提升国家在全球数字经济中的地位。

  • 提升社会稳定

  防范社会风险:网络犯罪和网络恐怖主义对社会稳定构成严重威胁。学习网络安全有助于及时发现和应对这些风险,维护社会的和谐与稳定。
  保护公民权益:网络安全直接关系到公民的隐私权和信息安全。通过学习网络安全,可以更好地保护公民的合法权益,增强公众对政府和企业的信任。

  • 推动科技进步

  创新安全技术:网络安全领域的技术创新不断推动信息技术的进步。学习网络安全有助于推动新技术的研发和应用,提升国家在科技领域的整体实力。
  促进国际合作:网络安全是全球性问题,需要各国共同努力应对。通过学习网络安全,可以参与国际网络安全合作,共同制定国际标准和规范,提升全球网络安全水平。

  • 强化法治建设

  完善法律法规:学习网络安全有助于推动和完善相关法律法规的制定和实施,确保网络安全工作有法可依、有章可循。
  提升执法能力:掌握网络安全知识可以提升执法部门的网络侦查和取证能力,有效打击网络犯罪,维护法律权威。

  • 培养专业人才

  构建人才梯队:网络安全领域需要大量高素质的专业人才。通过系统学习和培训,可以培养出一批具备专业知识和实战经验的网络安全专家,为国家的网络安全事业提供坚实的人才保障。  总之,学习网络安全不仅是个人职业发展的需要,更是维护国家安全、促进经济发展、保障社会稳定和推动科技进步的重要手段。通过不断提升网络安全意识和能力,我们可以更好地应对日益复杂的网络安全挑战,为实现国家的长期稳定和发展贡献力量。


以下为linux基础(1)视频对应的内容   视频传送门 ==> linux基础(1)_哔哩哔哩_bilibili


一、Linux基础命令

  1.touch命令

  该条命令最常用的方法是创建一个空文件,不过在日常学习和工作中,可能也有人会用echo>1.txt或者直接在桌面上鼠标右键创建文件。

  在具体使用过程中,也可以使用诸如touch ~/Desktop/1.txt  在指定目录创建文件,还可以一次性创建多个文件,比如touch 2.txt 3.txt 4.txt

touch [filename] 

touch [path/filename]

  -c参数,如果文件不存在,则不会创建文件。

touch -c [filename] 

  使用了-c参数,试图创建0.txt,结果并没有创建成功

   -a -m参数都和时间有关,不过说这两个参数之前,就要先说下touch的基础用法,直接touch一个已经存在的文件,另外需要结合stat命令一起学习。先把已经创建的文件清理干净,然后我们执行如下命令。

  我们可以看到文件touch后,查看文件的状态,有4个时间分别是Access、Modify、Change、Birth。

  Access是访问时间,如果文件最后一次被访问,记录的时间就会改变;

  Modify是修改时间,如果文件最有一次被修改,这个时间就会改变;

  Change是状态改变时间,如果文件的状态(权限、所有者等)调整,这个时间就会改变;

  Birth是文件的最初创建时间,这个时间从文件创建就被记录下来。

  我们首先鼠标右键,就用mousepad或者vim访问下,然后不保存,直接关闭,再用stat查看。

  我们可以看到文件访问时间被修改了,而当我们只使用-a参数,我们会发现,只修改了Access和Change的时间。

如果我们使用-m参数,我们会发现文件的Modify和Change参数一起被修改了。

  所以汇总下来情况,以及另外测试下其他几条命令对文件时间属性的影响如下

AccessModifyChangeBirth
touch 无参数×
touch -a××
touch -m××
echo >>××
ls××××
cat×××
mousepad 打开直接保存×××
mousepad 修改保存
vim 打开 :q!×××
vim 打开修改 :wq√(打开时间)√(写入时间)√(写入时间)×
chmod×××
touch  fileA -r fileB √(引入FileB访问时间)√(命令执行时间)××
touch file -t stamp√(stamp)√(stamp)××

  所有有些命令就很有意思了,比如echo > 或者 echo >> 这个只会修改文件的Modify和Change时间,而不会访问文件,也就说echo是在不访问文件的情况下对文件进行修改。

  而用mousepad或者vim ,打开文件就会修改访问时间,但是如果直接关闭或者无修改直接按保存,都不会修改其他时间属性。

  touch 的-f 参数,这条命令会引入其他文件的访问时间,以及使用-t 指定时间戳,这里有个比较搞笑的情况,执行这两命令时会发生:一个文件还没有创建但是文件已经被访问过的情况。

  2.mkdir命令

  mkdir命令用来创建文件夹,基础使用过程略,主要对一些参数进行讲解。

  mkdir -p 参数

  该参数可以创建多级目录,中间不存在的话会自动创建。比如我们要在家目录桌面连续创建3个3层目录深的文件夹,可以使用下面的命令格式,但是第4条命令是不对的,创建到根目录去了:

mkdir -p ~/Desktop/1/2/3

mkdir -p 2/3/4

mkdir -p ./3/4/5

mkdir -p /4/5/6 #这条命令变成在/根目录创建了,是错误的

  mkdir -m参数 

  -m 参数用于创建文件夹的时候,给文件夹赋予相应的权限,和chmod 777这种类似,这条命令也可以和-p 组合使用,但是实测下来,仅对最深一层文件夹生效。

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1              
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir -m 700 2       
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ ll
total 8
drwxrwxr-x 2 kali kali 4096 Nov  6 06:06 1
drwx------ 2 kali kali 4096 Nov  6 06:06 2
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir -m 700 -p 3/4/5
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ ll
total 12
drwxrwxr-x 2 kali kali 4096 Nov  6 06:06 1
drwx------ 2 kali kali 4096 Nov  6 06:06 2
drwxrwxr-x 3 kali kali 4096 Nov  6 06:06 3
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ cd 3      
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/3]
└─$ ll
total 4
drwxrwxr-x 3 kali kali 4096 Nov  6 06:06 4
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/3]
└─$ cd 4
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/3/4]
└─$ ll
total 4
drwx------ 2 kali kali 4096 Nov  6 06:06 5
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/3/4]
└─$ 
  mkdir -v参数

  可以显示命令的详细执行过程,组合-p命令的话,运行结果如下:

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir -p 1/2/3/4/5 -v
mkdir: created directory '1'
mkdir: created directory '1/2'
mkdir: created directory '1/2/3'
mkdir: created directory '1/2/3/4'
mkdir: created directory '1/2/3/4/5'

3.rm命令

  rm命令可以删除文件和文件夹,删除过程中可以结合通配符使用

  rm -v参数

  显示命令的详细执行过程

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt 2.txt 3.txt 11.txt 12.txt 13.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm ?.txt -v
removed '1.txt'
removed '2.txt'
removed '3.txt'
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm ?3.txt -v
removed '13.txt'
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm *.txt -v 
removed '11.txt'
removed '12.txt'
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ 
  rm -i/-I 参数

  删除前进行逐个提示/和提示一次

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt 2.txt 3.txt 11.txt 12.txt 13.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm -i *.*
rm: remove regular empty file '1.txt'? y
rm: remove regular empty file '2.txt'? y
rm: remove regular empty file '3.txt'? y
rm: remove regular empty file '11.txt'? y
rm: remove regular empty file '12.txt'? y
rm: remove regular empty file '13.txt'? y

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt 2.txt 3.txt 11.txt 12.txt 13.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm -I *.*                                   
rm: remove 6 arguments? y
  rm -r 参数

  递归删除,可以删除文件夹

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir -p 1/2/3/4/5   
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm 1     
rm: cannot remove '1': Is a directory
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm 1 -r -v
removed directory '1/2/3/4/5'
removed directory '1/2/3/4'
removed directory '1/2/3'
removed directory '1/2'
removed directory '1'
  rm -d 参数

  删除空目录

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1 2 3 4/5 -p
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree                                        
.
├── 1
├── 2
├── 3
└── 4
    └── 5

6 directories, 0 files
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm -d -v  
rm: missing operand
Try 'rm --help' for more information.
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rm * -d -v
zsh: sure you want to delete all 4 files in /home/kali/Desktop [yn]? y
removed directory '1'
removed directory '2'
removed directory '3'
rm: cannot remove '4': Directory not empty

  4.rmdir命令

  这条命令专门用于删除空的文件夹,其实我是用的不太多,因为rm命令也可以删除文件夹。这条命令可以看成是mkdir -p 的逆运算,具体演示如下:

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 4/5 -p -v
mkdir: created directory '4'
mkdir: created directory '4/5'
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ rmdir 4/5 -p -v
rmdir: removing directory, '4/5'
rmdir: removing directory, '4'

5、mv命令

  mv命令可以移动文件,如果同目录下面起到的是改名效果,命令执行过程中可以带-v查看具体执行过程。

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt                                 
# 将1.txt改名2.txt                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1.txt 2.txt 
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1           
# 将2.txt 移动到当前目录下面的1文件夹下                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 2.txt 1    
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree       
.
└── 1
    └── 2.txt

2 directories, 1 file
# 将移进去的文件再移回来,同时改名叫3.txt                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1/2.txt 3.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ ll                    
total 4
drwxrwxr-x 2 kali kali 4096 Nov  6 06:39 1
-rw-rw-r-- 1 kali kali    0 Nov  6 06:37 3.txt

  也可以批量移动文件,如下所示:

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt 2.txt 3.txt 11.txt 12.txt 13.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1.txt 2.txt 1
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree                                        
.
├── 1
│   ├── 1.txt
│   └── 2.txt
├── 11.txt
├── 12.txt
├── 13.txt
└── 3.txt

# 如果移动到一个不存在的目录就会出错                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1?.txt 3     
mv: target '3': No such file or directory

   还可移动文件夹(含下面的文件)

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1       
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1/1.txt                               
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 2
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree         
.
├── 1
│   └── 1.txt
└── 2

3 directories, 1 file
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1 2           
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree
.
└── 2
    └── 1
        └── 1.txt

3 directories, 1 file
  mv -i参数

  该参数是遇到覆盖文件的情况时发出提醒要求确认

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt 2.txt 3.txt 11.txt 12.txt 13.txt
# 无提醒                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1.txt 2.txt  -v
renamed '1.txt' -> '2.txt'
# 有提醒                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 3.txt 2.txt -i -v
mv: overwrite '2.txt'? y
renamed '3.txt' -> '2.txt'
  mv --backup参数

  该参数是遇到目的文件同名的时候,把目的文件扩展名加上个~,再把原文件移动过去,具体展示如下

┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1/1.txt                               
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ echo 11> 1/1.txt
# 请注意 桌面的1.txt 写入了00                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ echo 00>1.txt   
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1.txt 1/1.txt --backup 
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ tree         
.
└── 1
    ├── 1.txt
    └── 1.txt~

2 directories, 2 files
# 00的文件替换了目标文件夹中的文件                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ cat 1/1.txt
00
# 目标文件夹中的文件修改了扩展名                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ cat 1/1.txt~
11
   mv -n 参数

   不覆盖已存在的文件

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt                                 
                                                                                                                                                                                                             
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 2.txt             
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop]
└─$ mv 1.txt 2.txt -n  
mv: not replacing '2.txt'

  mv命令还有其他参数,初级阶段暂时用不到,具体可以执行mv --help查看及研究

  6、cp命令

  cp命令基础用法是复制一个文件或者文件夹,基础用法略,主要说明一下一些参数的用法。

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt                   
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir 1/2/3 -p
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1/2/3/4.txt
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cp 1 2 -r -v     # -r 是递归复制文件夹下面内容  -v 是详细输出
'1' -> '2'
'1/2' -> '2/2'
'1/2/3' -> '2/2/3'
'1/2/3/4.txt' -> '2/2/3/4.txt'
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ tree             
.
├── 1
│   └── 2
│       └── 3
│           └── 4.txt
├── 1.txt
└── 2
    └── 2
        └── 3
            └── 4.txt

7 directories, 3 files
  cp -a参数

  带属性复制,访问时间和修改时间会一同复制。

┌──(kali㉿kali)-[~/Desktop]
└─$ touch 1.txt -t 200011111111.11
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ stat 1.txt 
  File: 1.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 8,1     Inode: 436045      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    kali)   Gid: ( 1000/    kali)
Access: 2000-11-11 11:11:11.000000000 -0500
Modify: 2000-11-11 11:11:11.000000000 -0500
Change: 2024-11-06 07:32:20.121888956 -0500
 Birth: 2024-11-06 07:31:50.957834148 -0500
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cp 1.txt 2.txt   
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cp 1.txt 3.txt -a
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ stat *    
  File: 1.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 8,1     Inode: 436045      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    kali)   Gid: ( 1000/    kali)
Access: 2024-11-06 07:32:31.177866512 -0500
Modify: 2000-11-11 11:11:11.000000000 -0500
Change: 2024-11-06 07:32:20.121888956 -0500
 Birth: 2024-11-06 07:31:50.957834148 -0500
  File: 2.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 8,1     Inode: 436020      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    kali)   Gid: ( 1000/    kali)
Access: 2024-11-06 07:32:31.177866512 -0500
Modify: 2024-11-06 07:32:31.177866512 -0500
Change: 2024-11-06 07:32:31.177866512 -0500
 Birth: 2024-11-06 07:32:31.177866512 -0500
  File: 3.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 8,1     Inode: 436047      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    kali)   Gid: ( 1000/    kali)
Access: 2024-11-06 07:32:31.177866512 -0500  # 可以看到-a,Access和Modify 时间戳是保留的
Modify: 2000-11-11 11:11:11.000000000 -0500
Change: 2024-11-06 07:32:36.005830795 -0500
 Birth: 2024-11-06 07:32:36.005830795 -0500
  cp -l参数

  -l参数是用于复制硬链接,首先创建了1个txt文件内容为111,再用cp -l参数复制硬链接到2.txt,用echo>>向1.txt内2222文本信息,再对硬链接执行cat命令查看,可以看到2.txt也被修改。

┌──(kali㉿kali)-[~/Desktop]
└─$ rm *.txt   
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ echo 111>1.txt 
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cp -l 1.txt 2.txt
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cat 2.txt        
111
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ echo 2222>>1.txt
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ cat 2.txt
111
2222
  cp -b 参数

  这条命令是带备份复制,如果目标文件会被替换则会留好备份,可对文件夹进行设置查看到隐藏文件。

  cp -i 参数

  该参数是,如果在复制过程中如发生覆盖情况,则进行确认。

┌──(kali㉿kali)-[~/Desktop/test]
└─$ cp 1.txt 2.txt -i
cp: overwrite '2.txt'? n
  cp -p 参数

  该参数是复制文件的时候连同文件的权限一起复制,演示如下。

# 初始权限为664
┌──(kali㉿kali)-[~/Desktop/test]
└─$ ll
total 4
-rw-rw-r-- 1 kali kali 6 Nov  6 08:18 1.txt

# 将权限修改为777                                                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ chmod 666 1.txt
                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ ll
total 4
-rw-rw-rw- 1 kali kali 6 Nov  6 08:18 1.txt
                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ cp 1.txt 2.txt   

# 不带权限复制,复制后文件的权限还是664                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ ll
total 8
-rw-rw-rw- 1 kali kali 6 Nov  6 08:18 1.txt
-rw-rw-r-- 1 kali kali 6 Nov  6 08:26 2.txt   <---

# 使用-p带权限复制                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ cp 1.txt 3.txt -p

# 带权限复制的文件,和被复制文件的全息一样,都是666                                                                                     
┌──(kali㉿kali)-[~/Desktop/test]
└─$ ll
total 12
-rw-rw-rw- 1 kali kali 6 Nov  6 08:18 1.txt
-rw-rw-r-- 1 kali kali 6 Nov  6 08:26 2.txt
-rw-rw-rw- 1 kali kali 6 Nov  6 08:18 3.txt   <---
  cp -d 参数

  该参数专门用来复制软链接,具体演示如下(s开头表示实体文件,r开头表示软连接)

  根据演示可以看到,如果cp 直接复制软链接,则目标文件会变成实体文件(下面的cp r1.txt s2.txt命令),如果要带软链接复制,则必须加上-d参数。几条命令下来实际是有s1和 s2两个实体文件。

  另外,如果仅把软链接移动到文件夹内,软链接因为找不到实体文件,就会出错。但是把软链接对应的文件一同复制进来,则会恢复正常。此外,下图的r1.txt软链接虽然体现出错的红色图标,但只要关闭文件夹再打开次就会恢复正常)

  7、ln命令

   ln核心用途是创建链接,包括软连接和硬链接,ln 默认是创建硬链接,如果-s是创建软链接。我们用ls -i参数列出文件时可以看到文件inode,2个硬链接的文件的inode是一样的。

   ln还可以给文件夹创建软链接(无法创建硬链接,会提示出错)

   以上为ln的初级用法,ln其他用法可以--help进行查看。

 二、Linux查找类命令

  locate

  该命令的运行须依赖于一个预先建立的数据库,命令可以用来快速查找文件,如果数据库文件不存在或路径不正确,就会出错,所以需要先更新数据库,使用下面的命令

sudo updatedb

   待上述更新完毕后,如果要搜索gcc,则使用下列命令

locate gcc   # 列出所有带gcc的文件以及路径

locate -b gcc  # 仅列出带有gcc名字的文件

locate -c gcc  # 列出相应的匹配数字

# 名字及路径中带有gcc
┌──(kali㉿kali)-[~/Desktop]
└─$ locate -c gcc
1771

# 仅名字中带有gcc                                                                                   
┌──(kali㉿kali)-[~/Desktop]
└─$ locate -c -b gcc
191

locate -i gcc       # 不区分大小写

locate -l 10 gcc  # 列出10条就停止

locate -l 10 -0 gcc # 不换行显示

locate -r '/gcc$'  # -r 使用正则,匹配仅以gcc开头的文件

┌──(kali㉿kali)-[~/Desktop]
└─$ locate -l 10 gcc   
/etc/alternatives/i686-w64-mingw32-gcc
/etc/alternatives/i686-w64-mingw32-gcc-13
/etc/alternatives/i686-w64-mingw32-gcc-ar
/etc/alternatives/i686-w64-mingw32-gcc-nm
/etc/alternatives/i686-w64-mingw32-gcc-ranlib
/etc/alternatives/x86_64-w64-mingw32-gcc
/etc/alternatives/x86_64-w64-mingw32-gcc-13
/etc/alternatives/x86_64-w64-mingw32-gcc-ar
/etc/alternatives/x86_64-w64-mingw32-gcc-nm
/etc/alternatives/x86_64-w64-mingw32-gcc-ranlib
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ locate -l 10 -0 gcc # 不换行显示
/etc/alternatives/i686-w64-mingw32-gcc/etc/alternatives/i686-w64-mingw32-gcc-13/etc/alternatives/i686-w64-mingw32-gcc-ar/etc/alternatives/i686-w64-mingw32-gcc-nm/etc/alternatives/i686-w64-mingw32-gcc-ranlib/etc/alternatives/x86_64-w64-mingw32-gcc/etc/alternatives/x86_64-w64-mingw32-gcc-13/etc/alternatives/x86_64-w64-mingw32-gcc-ar/etc/alternatives/x86_64-w64-mingw32-gcc-nm/etc/alternatives/x86_64-w64-mingw32-gcc-ranlib
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ locate -r '/gcc$'                                      
/usr/bin/gcc
/usr/lib/gcc
/usr/libexec/gcc
/usr/share/gcc
/usr/share/bash-completion/completions/gcc
/usr/share/doc/gcc
/usr/share/doc/gcc-13-base/gcc
/usr/share/lintian/overrides/gcc

which/where

  这2条命都可以快速定位linux系统中,有没有相应的命令,但有时where查询到的结果更加多,比如where可以查到有2个python文件路径,where还可以查找ls这种操作系统的命令的路径,而which是无法查到或者查到的信息不够详细。

┌──(kali㉿kali)-[~/Desktop]
└─$ which python
/usr/bin/python
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ which python?
python? not found
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ where python 
/usr/bin/python
/bin/python
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ which ls     
ls: aliased to ls --color=auto
                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ where ls    
ls: aliased to ls --color=auto
/usr/bin/ls
/bin/ls

  不过总的说来,which一般在后渗透阶段,比如打到服务器里面,已经getshell了需要提权的情况下,我们服务器上信息收集的时候,会一次性使用which curl wget python …… (注意可以同时加多个参数),来查询这条服务器上有什么可执行的程序供我们利用。当然,where也可以附带多个参数。

┌──(kali㉿kali)-[/]
└─$ which curl wget python
/usr/bin/curl
/usr/bin/wget
/usr/bin/python
                                                                                             
┌──(kali㉿kali)-[/]
└─$ where curl wget python
/usr/bin/curl
/bin/curl
/usr/bin/wget
/bin/wget
/usr/bin/python
/bin/python

find

  find也是一个查找文件用的命令,和上面的locate相比,它的查询速度略慢,优点是可以设置不同的参数实现精确查找,但同时它查找的时候也会受到用户的权限限制,它无法在没有相应权限的目录中进行查找。

find ~ -mtime 2 -ls | sort -k9 -k10 | more

  这条命令实际应该是查询48-72小时之间被修改过的文件,日和时分排序

  参数说明

  • ~ 表示查询所在目录,如果是从根目录开始则改成/,如果从当前目录查找则改成.
  • -mtime 2 表示查找48-72小时内被修改的文件
  • -ls 是输出长输出格式,
  • sort -k9 -k10 第9、10列分别是“年月日时分秒”中的日和时分,默认升序排列,-r 可以倒序

  这里关于-mtime参数说明下,就查询区间和参数设置详见下表:

修改时间(小时)参数
[0-24)-mtime -1
[24-48)-mtime 1
[48,∞)-mtime +1
[0-48)-mtime -2
[48-72)-mtime 2
[72,∞)-mtime +2

  如果用一张图来表示的话,大概是下面这个样子

  另外结合上面学到的touch -t 时间戳可以修改文件的修改时间,我们结合这条命令验证下,1.txt是1天内的文件,2.txt是2天内的文件,以此类推。另外正好是24小时比较难验证,故未进行验资。

# 这里需要看下kali的系统时间,不一定是物理机时间
┌──(kali㉿kali)-[~/Desktop/test]
└─$ date +"%Y-%m-%d %H:%M:%S"                      
2024-11-06 18:04:25
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch 1.txt -t 202411061800.00  
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch 2.txt -t 202411051800.00 
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch 3.txt -t 202411041800.00 
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch 4.txt -t 202411031800.00 
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime -1 -type f -ls | sort -k9 -k10   
   427103      0 -rw-rw-r--   1 kali     kali            0 Nov  6 18:00 ./1.txt
#   k1        k2    k3        k4  k5       k6           k7  k8  k9  k10  k11
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime -2 -type f -ls | sort -k9 -k10
   427106      0 -rw-rw-r--   1 kali     kali            0 Nov  5 18:00 ./2.txt
   427103      0 -rw-rw-r--   1 kali     kali            0 Nov  6 18:00 ./1.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime 1 -type f -ls | sort -k9 -k10   
   427106      0 -rw-rw-r--   1 kali     kali            0 Nov  5 18:00 ./2.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime 2 -type f -ls | sort -k9 -k10
   427120      0 -rw-rw-r--   1 kali     kali            0 Nov  4 18:00 ./3.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime +2 -type f -ls | sort -k9 -k10
   427121      0 -rw-rw-r--   1 kali     kali            0 Nov  3 18:00 ./4.txt
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -mtime +1 -type f -ls | sort -k9 -k10
   427121      0 -rw-rw-r--   1 kali     kali            0 Nov  3 18:00 ./4.txt
   427120      0 -rw-rw-r--   1 kali     kali            0 Nov  4 18:00 ./3.txt

find . -type f -iname '*.sh' -mmin -30 -ls

  有了第一条命令的经验,那么这条命令相对比较好理解,是查找30分钟内修改过的类型是文件的,扩展名是.sh的文件,用-ls长格式输出。

  另外关于-name 和 -iname的区别,因为Linux是严格区分大小写,-iname sh的时候,会把sH/Sh都搜索出来。我们验证下:

┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch a.sh A.sh aa.sh aA.sh                   
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -name a.sh   
./a.sh

┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -iname "a.sh" 
./a.sh
./A.sh

┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -iname "?.sh"
./a.sh
./A.sh
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -name "?.sh" 
./a.sh
./A.sh
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -name "?a.sh"
./aa.sh
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -iname "?a.sh"
./aa.sh
./aA.sh

┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -iname "*.sh" 
./a.sh
./aa.sh
./aA.sh
./A.sh
                                                                                                                         
┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -name "*.sh" 
./a.sh
./aa.sh
./aA.sh
./A.sh

  根据上面的试验可以发现, 使用-name的时候是严格区分了大小写,而-iname的时候是忽略了大小写。另外无论是-name还是-iname均可以使用通配符。

find . -name "*.txt" -exec rm -rf {} \;

   这条命令是查找所有的txt文件,并执行删除操作,其中-exec 是find的一个比较有意思的参数,而且它的固定格式是 -exec .... {} \;   注意{}后面的空格和反斜杠\和分号;都不能省略。具体演示如下:

┌──(kali㉿kali)-[~/Desktop/test]
└─$ touch 1.111 2.111 3.111 4.111  

┌──(kali㉿kali)-[~/Desktop/test]
└─$ find . -type f -name "*.111" -exec rm -rf -v {} \;
removed './2.111'
removed './1.111'
removed './4.111'
removed './3.111'

find / -usr root -type f -perm -o=w -name "*.sh" 2>/dev/null

   这条命令是查找用户是root但是其他用户至少有写权限的sh文件,同时有许多文件夹我们无权限访问导致查找时会出错,为快速定位检索到的文件我们会选择丢弃错误信息。

┌──(kali㉿kali)-[~/Desktop/test]
└─$ find / -user root -perm -o=w -name "*.sh" 2>/dev/null
/etc/rc2.d/S01console-setup.sh
/etc/rcS.d/S01keyboard-setup.sh
/etc/alternatives/desktop-grub.sh
/etc/rc4.d/S01console-setup.sh
/etc/rc3.d/S01console-setup.sh
/etc/rc5.d/S01console-setup.sh
/usr/lib/java-wrappers/java-wrappers.sh
/usr/lib/java-wrappers/jvm-list.sh
/usr/share/desktop-base/grub_background.sh
/usr/share/desktop-base/kali-theme/grub/grub_background.sh

  关于2>/dev/null丢弃出错,其中2表示错误信息(stderr),1为正确信息(stdout),0表示标准输入(stdin);/dev/null是Linux系统中一个特殊设备,数据丢进去就会消失,Linux系统中类似设备还有很多,后续会遇到。我们除了丢弃错误信息以外,也可以把正确输出和错误输出分别输出到2个不同的tty设备;还可以把错误输出重定向到某个文件中,如果愿意的话。具体详细下图演示。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值