Linux通过进程ID查看文件路径

Linux通过进程ID查看文件路径,第1张

1、用ps -ef |grep xxxxx 得到该进程的pid

2、输入ls -l ,结果中 exe链接对应的就是可执行文件路径

$ ls -l /proc/18283

以下是/proc目录中进程18283的信息

/proc/18283 pid为N的进程信息

/proc/18283/cmdline 进程启动命令

/proc/18283/cwd 链接到进程当前工作目录

/proc/18283/environ 进程环境变量列表

/proc/18283/exe 链接到进程的执行命令文件

/proc/18283/fd 包含进程相关的所有的文件描述符

/proc/18283/maps 与进程相关的内存映射信息

/proc/18283/mem 指代进程持有的内存,不可读

/proc/18283/root 链接到进程的根目录

/proc/18283/stat 进程的状态

/proc/18283/statm 进程使用的内存的状态

/proc/18283/status 进程状态信息,比stat/statm更具可读性

Linux的 文件系统分层结构标准 :FHS Filesystem Hierarchy Standard

参考文档: http://www.pathname.com/fhs/ 其中对每个文件目录有详细说明

/ :根目录,最顶级目录,也是 管理员的家目录

/boot:引导文件、内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此

/bin: 所有用户 使用的基本命令(二进制文件)

/sbin:管理类的基本命令 (仅由root执行)

​ /bin与/sbin:不能关联至独立分区,OS启动即会用到的程序

/etc 配置文件目录

/home/USERNAME:各个用户家目录,存放用户数据

/proc: 用于输出内核与进程信息相关的虚拟文件系统

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/usr: universal shared, read-only data (通用只读文件)

lib:32位使用

lib64:只存在64位系统

include: C程序的头文件(header files)

share:结构化独立的数据,例如doc, man等

local:第三方应用程序的安装位置

bin, sbin, lib, lib64, etc, share

/var: variable data files (可变数据)

cache: 应用程序缓存数据目录

lib: 应用程序状态信息数据

local:专用于为/usr/local下的应用程序存储可变数据

lock: 锁文件

log: 日志目录及文件

opt: 专用于为/opt下的应用程序存储可变数据

run: 运行中的进程相关数据,通常用于存储进程pid文件

spool: 应用程序数据池

tmp: 保存系统两次重启之间产生的临时数据

/dev:设备文件及特殊文件存储位置

/tmp:临时文件存储位置

/srv:系统上运行的服务用到的数据

/media:便携式移动设备挂载点(优盘)

/mnt:临时文件系统挂载点

/opt:第三方应用程序的安装位置

注意:CentOS 7 以后版本目录结构变化 (以下两者相同)

/bin 和 /usr/bin

/sbin 和 /usr/sbin

/lib 和/usr/lib

/lib64 和 /usr/lib64

范例:

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIRECTORY, /usr/local/etc

帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

用 ll 命令查看首字母:

(-) 普通文件

d 目录文件

b 块设备

c 字符设备

l 符号链接文件

p 管道文件pipe

s 套接字文件socket

每个shell和系统进程 都有一个当前的工作目录(current work directory,简称CWD)

显示当前shell CWD的绝对路径: 使用pwd命令 (printing working directory)

范例:

[图片上传失败...(image-8b8689-1596285623724)]

基名 :basename,只取文件名而不要路径

目录名 :dirname,只取路径,不要文件名

范例:

命令 cd : change directory 改变目录(可以使用绝对或相对路径)

选项:-P 切换至物理路径

切换至父目录 : cd ..

切换至当前用户家目录: cd

切换至上一个工作目录 : cd -

相关的环境变量:

PWD:当前目录路径

OLDPWD:上一次目录路径

文件相关信息:metadata(属性,元数据), data(数据内容)

每个文件有三个时间戳: (touch创建已存在的文件时,刷新3个时间戳)

access time 访问时间,atime,读取文件内容

modify time 修改时间,mtime,改变文件内容(数据)

change time 改变时间,ctime,元数据发生改变(属性)

mtime的改变必然引起ctime的改变

执行ll命令默认显示mtime

范例:

用来匹配符合条件的多个文件,方便批理管理文件

通配符采有特定的符号,表示特定的含义,此特符号称为 元字符

范例:只显示文件夹

别外还有在Linux系统中预定义的字符类:命令man 7 glob可以查看

使用以上通配符,需要双重中括号!!!!!!!!!!!!!!

{a..e} 与 [a - e] 排序内容不相同!!!

范例:

范例: 创建一个以昨天日期命名的.log文件

cp 命令格式:

默认cp=cp -i,提示是否覆盖

范例:

1、将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见

2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求 保留原有权限

mv 命令可以实现文件或目录的 移动和改名

常用选项:

-i交互式

-f强制

-b 若目标存在,覆盖前先备份

利用 rename 可以 批量修改文件名

范例: (改名对象打不打引号都可以)

使用rm 命令可以删除文件

常用选项

-i 交互式

-f 强制删除

-r 递归,对目录进行 *** 作时必须使用

--no-preserve-root 用来删除根目录

范例:删除特殊文件

rm虽然删除了文件,但是被删除的文件仍然 可能被恢复

在安全要求较高的场景下,可以使用shred安全删除文件

补充技巧: 防止rm造成严重后果,定义别名进行备份 (修改配置文件永久有效)

配置文件目录:/root/.bashrc

显示目录树 tree

常见选项:

-d:只显示目录

-L level:指定显示的层级数目

-P pattern: 只显示由指定wild-card pattern匹配到的路径

常见选项:

-p: 存在于不报错,且可自动创建所需的各目录 (用于一次创建多层目录)

-v: 显示详细信息

-m MODE: 创建目录时直接 指定权限!!!!!!!!!!

rmdir 只能删除空目录 ,如果想删除非空目录,可以使用rm -r 命令递归删除目录树

常见选项:

-p 递归删除父空目录

-v 显示详细信息

练习

(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a,

/testdir/dir1/y/b

(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b

(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

inode = (index node)

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的 元数据

这些元数据存放在 inode表中

inode 表 中有很多条记录组成, 第一条记录保存元数据,包括以下信息:

inode number 节点号(身份z号)

文件类型

权限

UID

GID

链接数(指向这个文件名路径名称个数)

该文件的大小和不同的时间戳

指向磁盘上文件的数据块指针

有关文件的其他数据

一般情况下inode表会占用系统磁盘inode总量的1%

节点号表示 文件的唯一编号 !!!整个系统中 节点号是有限的

当节点号用尽时,即使还有储存空间,也会提示无剩余空间 !!!!!!

目录 是个特殊文件,目录的元数据保存了 目录中文件的列表及节点号的对应关系!!!

系统引用文件是 使用 inode号

实际用户是 通过文件名 来引用一个文件

目录是 目录下的文件名和文件inode号之间的映射

执行cp命令:

执行rm 命令:

执行mv命令:

硬链接本质上就 给一个文件起一个新的名称 ,实质是同一个文件

范例:对文件f1.log创建新的名称f1link.log,两者inode都是132

硬链接特性

目录的链接数至少为2,因为目录中的 . 即为自身

创建子目录会导致链接数增加!

一个符号链接指向另一个文件, 就像windows中的快捷方式

软链接特点:

关于源文件相对路径:只有跨分区创建软链接时才有此问题!

案例一:

提示空间不足 No space left on device,但是 df 查看磁盘空间剩余很多

案例二:

提示储存空间不足,删除无用的大文件后,空间并未释放,什么原因?如何解决?

读入数据:Input

输出数据:Output

打开的文件都有一个 fd : file descriptor (文件描述符)

Linux给程序提供 三种 I/O 设备

I/O重定向:将默认的输入,输出或错误 对应的设备进行修改,指向新的目标

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端

支持的 *** 作符号包括:

把STDOUT重定向到文件或其他终端

重定向到文件时,若文件不存在则创建,若文件存在则覆盖内容

再次重定向到同一文件,内容再次覆盖

若 >符号之前不输入命令,则效果为生成空文件或清空目标文件

是迅速清空文件内容的一种方式

借助/dev/null也可实现同样的功能

磁盘空间不足时,大文件被占用不能停,而且rm删除无法立即腾出空间,应使用 >或/dev/null >

把STDERR重定向到文件或其他终端

set - C 命令, 禁止将内容覆盖已有文件,但可追加 (此时>|可以强制覆盖)

set + C 命令,允许覆盖

强制覆盖

用 ( )或者{ }合并多个命令的out或err, 注意使用花括号的格式!!!

使用 <来重定向标准输入:从文件中导入STDIN,代替当前终端的输入设备

使用 单行或多行重定向 来创建新文件,并输入指定内容

同时存在 <>,优先进行 输入运算

只能对新文件进行!!!!!

只能对新文件进行!!!!!

使用 "<<终止词" 命令 把接下来输入的多行内容进行重定向,

直到终止词位置之前的所有文本都发送给STDIN

终止词 可以是任何一个或多个符号,

比如:!,@,$,EOF(End Of File),magedu等, 其中EOF比较常用

易错点: tr命令实现的是 单个字符一一对应的转换关系!!!!

基本格式:

常见用途: 全局大小写转换

-d 删除 所有含有SET1的字符

-c 取字符集的补集,即 取反(一般与-d搭配使用)

-s 把 连续重复的单个字符 以单独一个字符表示,即 去重

管道(使用符号“|”表示) 用来连接多个命令

功能说明:

注意:STDERR默认不能通过管道转发,可利用2>&1 或 |&实现,格式如下

因此, 当不确定命令的输出结果,或者已知结果中存在error时 ,应该使用上述命令

范例:将 /home 里面的 文件打包 ,不生成文件,而是传送到 stdout,经过管道后,

将 tar -cvf - /home 传送给后面的 tar -xvf - , 最后的这个 - 表示 取前一个命令的 stdout

利用tee命令 可以既重定向到文件,又显示在屏幕

tee的功能:

基本用法

若后面不加命令2

参考: https://docs.python.org/3/library/os.html

Python中对OS模块的定位是:提供了使用 *** 作系统的工具接口。

如果你想读写文件,可以参考open();

如果你想 *** 作文件路径,参考os.path模块;

如果你想在命令行读取所有文件的所有行,参考fileinput模块;

如果你想创建临时文件或目录,参考tempfile模块;

如果你想更高级的文件和路径处理,参考shutil模块;

内置的OSError异常类型,比如在使用os模块中的函数接口时,在参数中提供了无效的文件或路径,就回报错os.error。

该变量返回当前 *** 作系统的类型,当前只注册了3个值:分别是posix , nt , java, 对应linux/windows/java虚拟机。

在Python中,文件名,命令行参数和环境变量都是用字符串类型来表示。

接下来的这些函数和数据提供了当前进程和用户的信息状态和 *** 作接口。

返回进程控制终端的文件名,适用于Unix系统。

返回字符串到环境变量的映射。

改变当前工作目录到指定的路径,path为要切换到的新路径。

通过文件描述符改变当前工作目录。

文件描述符是内核为了高效管理已经被打开的文件所创建的索引,

进程通过文件描述符来访问文件。 在程序刚启动的时候默认有3个文件描述符:0(标准输入),1(标准输出),2(标准错误),系统默认提供了 0~2的文件描述符,之后的 当我们进行 open,create等 *** 作的时候 自动添加进表

所以int creat(const char * ,mode_t)返回的文件int 就是你所进行 *** 作的文件的唯一身份标示,

然后你只要拿着这个ID 然后告诉系统给我找xx, write(int fd,char *buf,int lenght) 通过fd得到准确文件 然后写入。

当我们新建creat,打开open 之后,得到的fd 是从3开始的 因为前面的三个被系统占了在OS X系统下测试 文件描述符表 自增,当释放close之后,fd变成-1,如果再继续新建 则填补之前的空缺。

返回当前工作目录。

把字符串类型的文件名翻译成bytes类型的文件名;os.fsdecode()实现相反的功能。

返回路径的文件系统表示。

如果环境变量中存在key,返回环境变量key的值,否则返回default的值。

设置环境变量key的值为value。

使用当前uid/gid检测对路径path是否有访问权限。其中,path为要检测是否有权限的路径,mode为权限类别,值可以为os.F_OK、os.R_OK、os.W_OK、os.X_OK中的一个或多个;

切换当前的工作路径为path指定的路径。

设置路径path的标记为flags,flags为数字标记,多个flags可以使用or组合。flags可以为以下值或以下值的组合:

更改文件或目录的权限。

path -- 文件名路径或目录路径

mode -- 可用以下选项按位或 *** 作生成, 目录的读权限表示可以获取目录里文件名列表, 写权限表示可以获取文件并且可以修改内容,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。

更改路径的拥有者和group id为uid和gid。如果不修改可以设置为-1,并且需要超级用户权限来执行权限修改 *** 作。

path -- 设置权限的文件路径

uid -- 所属用户ID

gid -- 所属用户组ID

更改当前进程的根目录为path。

返回当前工作目录。

返回path目录路径下的文件列表,列表没有固定的顺序。

创建目录path。如果目录已经存在,会抛出异常FileExistsError。

递归的目录创建,递归的意思是创建所有到达叶子目录的中间目录。

从原始设备号(通常是stat中的st_dev或st_rdev)中提取设备major号码。

从原始设备号(通常是stat中的st_dev或st_rdev)中提取设备minor号码。

根据设备的major号码和minor号码组成原始设备号。

删除文件路径path。如果path指向的是目录路径,会抛出异常IsADirectoryError。如果要删除目录,使用rmdir。

递归的删除目录。与rmdir功能相似,不同的是,如果叶子目录被删除之后,removedirs会连续的删除每一层上级目录,直到抛出异常(异常会被忽略,因为异常通常意味着上层目录为非空目录)。

重命名文件或路径src为dst,如果dst已经存在,会抛出异常。

递归的重命名文件或目录。功能与rename类似,不同在于,renames首先创建new路径(即重命名之后的路径)的中间路径,然后创建完整new路径,最后,会使用removedirs删除掉old路径(实际上删除的是old路径与new路径不重合的部分)。

重命名文件或路径src为dst。如果dst是目录,抛出异常OSError。如果dst是文件且已经存在,且用户具有权限,dst会被替换掉。

删除path目录。如果path不存在,或者path非空,会抛出异常FileNotFoundError或OSError。如果要删除整个目录树,可以使用shutil.rmtree()。

返回path的绝对路径,效果等同于使用normpath:normpath(join(os.getcwd(), path))。

返回路径path的文件名,也就是对path调用os.path.split函数返回的元组的第二个元素。

paths为一个序列类型,其中每个元素表示一个路径,函数返回结果为每个元素所表示的路径的最长公共子路径。如果paths为空,或者paths同时包含绝对路径和相对路径,或者paths同时包含不同驱动类型的路径(比如Linux系统的路径和Windows系统的路径),则抛出异常ValueError。

list中的每个元素表示一个路径,函数返回每个路径的最长的共有路径前缀,因为计算方式为逐个字符进行比较,所以可能返回的结果并非有效的路径,如果要返回有效路径,可以使用commonpath。

返回path路径的目录部分,也就是对path调用os.path.split函数返回的元组的第一个元素。

如果path指向的路径已存在,则返回True,否则返回False。

在Unix和Windows系统中,返回path路径中的~被替换成用户的home目录之后的结果。

path路径中的 {name}被环境变量中对应名称的值替代。

返回最后一次访问path的时间,返回值的格式为一个float类型的数值,表示距离epoch基准时间1970-01-01 00:00:00的秒数。如果path表示的路径不存在或者没有权限,抛出异常OSError。

返回最后一次修改path的时间,返回值的格式为一个float类型的数值,表示距离epoch基准时间1970-01-01 00:00:00的秒数。如果path表示的路径不存在或者没有权限,抛出异常OSError。

返回path表示的文件或路径的大小,以byte字节为单位。如果path表示的路径不存在或者没有权限,抛出异常OSError。

如果path是绝对路径,返回True,否则返回False。

如果path表示的是已存在的文件路径,返回True。

如果path表示的是已存在的目录,返回True。

如果path表示的是链接,返回True。

判断path是否为挂载点。

连接一个或多个路径,path和多个*paths的连接会使用路径分隔符。

对path的字母大小写进行normalize。在Windows系统中,path中的所有字母都转成小写,并且把正斜杠转成反斜杠。在其他 *** 作系统中,返回path本身。

对path进行normalize,删除多余的路径分隔符。

split the path into a pair (head, tail),其中tail是path中最后的部分,并且永远不会含有斜杠,head是除了tail之外的部分。如果path以斜杠结尾,tail为空;如果path中不包含斜杠,head为空;如果path为空,head和tail都是空。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8056196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存