《信息安全系统设计基础》 pwd指令学习

ops/2024/12/15 5:10:19/

任务一

学习pwd指令">学习pwd指令

该命令用来显示目前所在的工作目录。指令英文原义:print work directory

  • 执行权限All User
  • 指令所在路径:/usr/bin/pwd 或 /bin/pwd
    Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。
    在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。
参数长参数描述
-L-logical当目录为连接路径时,显示连接路径
-P-physical显示实际物理路径,而非使用连接(link)路径
-help显示命令在线帮助
-version显示命令版本信息
  • 显示当前目录所在路径 pwd

  • 显示当前目录的物理路径 pwd –P

[root@DB-Server init.d]# cd /etc/init.d [root@DB-Server init.d]# pwd -P /etc/rc.d/init.d
  • 显示当前目录的连接路径:pwd -L
[root@DB-Server networking]# cd /etc/init.d [root@DB-Server init.d]# pwd -L /etc/init.d [root@DB-Server init.d]# pwd /etc/init.d

然而这里我在运行pwd -Lpwd -P指令时显示路径是相通的,并没有与期望的在网上找到的实例相同

我认为这里是虚拟机的系统不同,在虚拟机的计算机中已经没有r.cd这个系统文件,而是将其分为好几个小的分组文件,而init.d也是一个独立的文件所以pwd -L的命令链接路径和物理路径是相同路径
 


 

(这里查询了pwd -Lpwd -P指令的差别)
-L
如果 PWD 环境变量包含了不包含文件名 .(点)或 ..(点点)的当前目录的绝对路径名,则显示 PWD 环境变量的值。否则,-L 标志与 -P 标志一样运行。
-P
显示当前目录的绝对路径名。与 -P 标志一起显示的绝对路径不包含在路径名的绝对路径中涉及到符号链接类型的文件的名称。

任务二

研究pwd实现需要的系统调用(man -k;grep),写出伪代码


在pwd的系统点用中发现了dir的系统内部代码,这里查询了dir的系统命令

  • 这里是pwd的实现过程
    每个目录下都至少有两个内容‘.’和’..’,其中‘.’代表当前目录,’..’代表上级目录。每个目录或文件都有对应的i-节点号,根目录的‘.’和’..’相同,所以i-节点号相同。通过命令’ls -1ia’(数字1,不是字母l)可以查看当前目录下的文件名和对应的i-节点号。
    image
    image
    概括来讲,就是:
    1.找到本目录的i-节点
    2.进入父目录,找到i-节点对应的文件名
    3.循环以上过程,直到到达根目

linux 中的文件系统中,文件=N(N>=1)个inode +M(M>=1)个数据块。

数据块,存放文件的内容数据,数据块的数目根据文件内容的大小而定。

inode称为信息节点,其作用有二:1、存储跟文件相关的属性信息,如修改时间、所有者、文件类型和文件长度,注意这些信息里并没有文件名;2、存储指向文件内容数据块的指针信息。

在一个文件系统中,一个inode代表一个文件,并使用一个整数值来标志该inode,称为inode-number,该值对于一个文件系统而言是唯一的,即通过该值可以找到其对应的inode。一般情况下,一个文件只有一个inode信息用来描述它。
image
目录,在linux中,其实也是一种文件,所以它也是由“inode+数据块”构成的。而其文件内容是一个列表,每一个列表项记录“inode-number+filename"。

因此,我们通常所说的目录a"包含"文件b,其实现层面上的意思是,目录a的内容列表里有一个关于文件b的列表项,即“b的inode-number+ b的filename”。

综上,linux中,一个文件(包括目录)的文件名,及文件名与inode的对应关系,都是由包含该文件的目录所描述的。

其中,有两个特殊的文件名“.” 和 “..”,“.”代表当前目录自身,".."代表包含当前目录的上一级目录。
linux 文件系统树:
image

任务三

实现mypwd

代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>ino_t get_inode(char*);
void printpathto(ino_t);
void inum_to_name(ino_t,char*,int);
int main()
{printpathto(get_inode("."));  //print path to hereputchar('\n');return 0;
}void printpathto(ino_t this_inode)
{ino_t my_inode;char its_name[BUFSIZ];/*如果本目录的i-节点与上级目录不同,即本目录不是根目录*/if (get_inode("..")!=this_inode)                                 {chdir("..");         //进入上级目录inum_to_name(this_inode,its_name,BUFSIZ);my_inode = get_inode(".");printpathto(my_inode);printf("/%s",its_name);}
}
void inum_to_name(ino_t inode_to_find,char* namebuf,int buflen)   //找到i-节点对应的文件名,并放在字符数组里
{DIR* dir_ptr;struct dirent* direntp;dir_ptr = opendir(".");if (dir_ptr == NULL){perror(".");exit(1);}/*下面这块每太搞明白,功能是寻找制定i-节点的目录,将目录名复制到namebuf中。但是没明 白他是怎么寻找的*//*明白了,每次循环direntp都会指向下一个文件,详见testreaddir.c。但这是怎么做到的呢?*/while((direntp = readdir(dir_ptr)) != NULL){if(direntp->d_ino == inode_to_find){strncpy(namebuf,direntp->d_name,buflen);namebuf[buflen-1] = '\0';closedir( dir_ptr);return;}}fprintf( stderr , "error looking for inum % d\n" ,inode_to_find);exit (1) ;
}
ino_t get_inode(char* fname)            //根据文件名,返回-i节点
{struct stat info;if ( stat( fname, &info) == -1){fprintf( stderr , "Cannot stat ");perror(fname);exit (1);}return info.st_ino;
}

测试结果截图


http://www.ppmy.cn/ops/142008.html

相关文章

Linux系统综合配置:yum源设置、逻辑卷制作与Ansible(自动化运维)环境搭建及ansible-vault加密配置

前言&#xff1a;这里是生产环境红帽系统&#xff0c;如果是别的系统&#xff0c;本地源的配置方法不一样。 一、主节点服务器Redhat8 配置使用阿里源&#xff1a; 备份&#xff1a;sudo /etc/yum.repos.d/CentOS-Base.repo /opt/yum/ 下载新的CentOS-Base.repo 到 /etc/yum.…

微信小程序做电子签名功能

文章目录 最近需求要做就记录一下。 人狠话不多&#xff0c;直接上功能&#xff1a; 直接搂代码吧,复制过去就可以用&#xff0c;有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…

python 将数据保存到现有的Excel文件的新工作表

out_file ‘query.xlsx’ df1 pd.DataFrame(out_data) 若直接写入&#xff1a; df1.to_excel(out_file, indexFalse, sheet_name‘v5v7’) # 将第二个DataFrame保存到现有的Excel文件的新工作表 with pd.ExcelWriter(out_file, engine‘openpyxl’, mode‘a’) as writer:…

音视频入门基础:MPEG2-TS专题(16)——PMT简介

一、引言 PMT&#xff08;Program Map Table&#xff09;与PAT表成对出现&#xff0c;其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息&#xff0c;从而找到音视频流&#xff1a; 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…

Environment Modules安装配置

Environment Modules安装配置 Environment Modules是一款用来管理计算机软件环境的软件&#xff0c;通过简单的命令来控制计算机环境变量。本文接受该软件的安装和配置方法 系统&#xff1a; Linux OpenSUSE 15.6 软件版本&#xff1a; modules 5.5 依赖&#xff1a; gcc 7.5…

生产慎用之调试日志对空间矢量数据批量插入的性能影响-以MybatisPlus为例

目录 前言 一、一些缘由 1、性能分析 二、插入方式调整 1、批量插入的实现 2、MP的批量插入实现 3、日志的配置 三、默认处理方式 1、基础程序代码 2、执行情况 四、提升调试日志等级 1、在logback中进行设置 2、提升后的效果 五、总结 前言 在现代软件开发中&#xff0c;性能优…

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

ESP32-S3模组上跑通ES8388(28)

接前一篇文章:ESP32-S3模组上跑通ES8388(27) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第10段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: ​…