2019-11-07 22:45:23 gaoshiyuba 阅读数 51

操作系统文件属性

一. 操作系统文件属性组成

       索引  
       文件类型 
       文件权限 
       硬链接数 
       属主 
       属组  
       文件大小
       时间信息

(1)索引(inode和block)

   ①  inode:
	概念介绍: 文件索引信息 目录
	特点说明: 
	1) 存储一个数据属性信息 (类型 权限 链接数 属主/属组 大小 时间) ???
	2) 存储指向相应block指针信息
	3) 数据存储会占用一个inode
	诞生过程:
	操作磁盘进行格式化--> 创建文件系统--> inode
	查看方法:
	# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      51379712 63429 51316283    1% /

②     block:
	概念介绍: 文件数据信息 内容
	特点说明:
	1) 存储文件数据真实内容(文件)
	2) 存储目录下面文件名称(目录)
	3) 数据存储会占用多个block
	诞生过程:
	操作磁盘进行格式化--> 创建文件系统--> block
	查看方法:
	# df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda3      102709252 3665740  99043512   4% /

    block大小调整方案:影响数据存储效率
    都是大数据===block调小
    都是小数据===block调小
         PPS:xfs文件系统默认 =4k 而所有文件存储,就相当于把文件拆分成多个4k
              在放入xfs中

(2)文件类型

  普通文件	
	  文本文件       
	  二进制文件(命令文件)
	  数据文件(压缩文件)
	  file 文件信息  --- 获取文件类型 
	d 目录文件
	l 连接文件(软链接)
	c 字符流文件   
	b block块文件           存储设备文件信息     
	s socket文件(网络编程)
	
	特殊扩展名标记文件
	xxx.txt    --- 文本文件 
	xxx.log    --- 日志文件
	xxx.conf   --- 配置文件
	xxx.sh     --- shell脚本文件
	xxx.py     --- python脚本文件
	xxx.zip/xxx.gz/xxx.tar.gz   --- 压缩文件
	xxx.db     --- 数据库文件 database 数据(表01 表02 表03)=库 == 更加
	               完善 功能更强 excel
	
	补充: 和文件相关命令
	which    --- 查看命令文件保存路径  
	whereis  --- 查看命令文件保存路径 以及 查看命令相关文件保存路径
	locate   --- 快速检索一个文件保存的路径  == everything
	             yum install -y mlocate
				 updatedb

(3)文件权限

-由于文件权限会单独出一篇,所以这里就简答一下

   rw-  r--  r--        文件权限包含9个权限位  12位权限
	属主 属组 其他用户
	
	属主: 读r 写w 执行x  - 没权限
    属组: 只有读权限 
	其他用户: 只有读权限  
	
	r-xr----    文件权限解释:  属主(读权限和执行权限)属组(可读权限)    
	540                      其他用户(没有任何权限)
	rwxrw-rw-   文件权限解释:  属主(读写执行)        属组(读写)         
	766                      其他用户(读写)
	-w-r-xr--   文件权限解释:  属主(写权限)          属组(读权限和执行) 
	254                      其他用户(读权限)
	
    r - 4  每三位权限为一组, 做求和运算 数值进行输出
	w - 2 
	x - 1
	- - 0  

	666  670 776 771 --> 符号表示
	rw-rw-rw-  rw-rwx---  rwxrwxrw-  rwxrwx--x   
	
	0  ---  
	1  --x   
	2  -w- 
	3  -wx
	4  r-- 
	5  r-x
    6  rw- 
    7  rwx 

(4) 硬链接数

软链接 硬链接
文件数据快捷方式 查看数据内容的门
软链接会指向源文件 硬链接会指向相同inode
如果源文件删除,则软链接失效 如果源文件删除,硬链接不受影响
可以给目录创建软链接 只能给普通文件创建硬链接
link[ln -s 源文件 软链接] link[ln 源文件 硬链接]
操作方便 可防止文件误删

创建的目录------默认有2条硬链接
创建的文件------默认有1条硬链接

(5)属主、(6)属组

属主: 用户信息 文件数据创造者
属组: 用户组信息 给一个组赋予相应权限
其他用户: 不是属主 不属于属组成员的用户信息

	oldboy.txt  -- 创造者 oldboy  rwx  
	               属组   oldgirl olddog oldbaby  --> oldboy组  rw-
                   alex tony kinve  r--
				   
	系统用户分类:
	超级管理员       皇帝      root      user id  uid信息: 0
	虚拟用户         傀儡      nobody    uid: 1-999  centos7 
	                             特点01: 不能登录系统   管理服务进程信息???
	                                    uid: 1-499  centos6  
	                             特点02: 没有家目录
	普通用户         平民      oldboy    uid: 1000+  centos7  
                                         uid:  500+  centos6
										 
    用户 和 用户组关系:
	1 vs 1 关系: 一个用户组中 只有 一个用户
	1 vs n 关系: 一个用户可以属于多个用户组
	n vs 1 关系: 一个用户组中 可以有多个用户
	n vs n 关系: 多个用户可以属于多个用户组

(7)文件时间信息

    访问时间: access time - atime   查看文件时间 
    
	修改时间: modify time - mtime   文件内容被修改编辑时间  
	
	改变时间: change time - ctime   修改文件属性信息

    时间相关命令 - date (显示时间信息/修改时间信息)
	显示时间信息:
	a 按照指定格式信息显示
    date "+%Y-%m-%d %H:%M:%S"
    2019-10-31 17:47:02
	b 按照指定格式显示未来或过去时间
	date +%F_%A -d "-10 day"  显示过去时间信息
	date +%F_%A -d "+10 day"  显示未来时间信息
    %y : 年份
	%m : 月份  --> %F : 显示年月日
	%d : 日期
	%H : 小时
	%M : 分钟  --> %T : 显示小时分钟秒
	%S : 秒
	
    find /oldboy -mtime +3/-3/3
    实际用途:查询系统中历史数据, 批量删除, 节省磁盘空间  
    例如:
	find /oldboy -type f -name "*.txt" -mmin -10
	
	-mtime: 按照天进行查找数据
	-mmin:  按照分钟查找数据信息
	
	根据文件权限查找数据
	find /oldboy/ -type f  -perm 666

(8)文件大小信息
这个貌似没什么好说的,就不说了

2019-11-12 21:14:19 weixin_43592512 阅读数 65

一、Linux 操作系统文件目录

1、Linux 操作系统文件目录

(1)Linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层目录是“/”,然后在次目录下再创建其他的目录。
在这里插入图片描述

  • / 这是Linux的根目录
    • bin (/usr/bin、./usr/local/bin)是Binary的缩写,该目录存放着最经常使用的命令。
    • sbin (/usr/sbin、./usr/local/sbin),s就是Super User 的意思,该目录下存放的是系统管理员使用的系统管理程序。
    • home 该目录是存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
    • root 该目录为系统管理员,也称作超级权限者的用户主目录。
    • boot 该目录存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
    • dev 该目录类似于Windows的设备管理器,把所有的硬件用文件的形式存储。
    • etc 所有的系统管理员所需要的配置文件和子目录。
    • lib 该目录是系统开机所需要的最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
    • lib64
    • lost+found 该目录一般是空的,当系统非法关机后,这里就会存放一些文件。
    • media Linux新系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。
    • mnt 该目录是为了让用户临时挂载别的文件系统,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
    • opt 该目录是给主机额外安装软件所摆放的目录,如安装Oracle数据库就可以放到该目录下,默认是空的。
    • proc 该目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
    • selinux SELinux是一种安全子系统,它能够控制程序只能访问特定文件。
    • srv sev是service的缩写,该目录存放一些服务启动之后需要提取的数据。
    • sys 该目录下安装了2.6内核中新出现的一个文件系统,是Linux2.6内核的一个很大的变化。
    • tmp 该目录是用来存放一些临时文件的。
    • usr 该目录存放用户的应用程序和文件,类似与windows下的program files目录。
    • var 该目录中存放着不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。
    • /user/local 该目录是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序。

(2)Linux文件目录总结

  • Linux 的目录中只有一个根目录/
  • Linux 的各个目录存放的内容是经过规划的,不要随便乱存放文件
  • Linux 是以文件的形式管理我们的设备,因此Linux 系统中一切皆为文件
2018-05-19 20:18:00 EliminatedAcmer 阅读数 177

操作系统文件操作

增加2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)

代码:

#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

using namespace std;

string name,content;
string judge;
string fname,newname;
string file;

int main()
{
    cout << "1. write (append or write)"<<endl;
    cout << "2. rename (rename files)" << endl;
    cout << "3. list (list files)" << endl;
    cout << "4. chmod (change mode of files)" << endl;
    cout << "5. exit (exit)"<<endl;
    cout << "Enter order:";
    int cmd;
    while(cin >> cmd)
    {
        if(cmd == 1)
        {
            cout << "Input the name of the file(*.txt):";
            cin >> name;
            FILE *fp;
            cout << "Choose the mood(w or w+):";
            cin >> judge;
            if(judge == "w")
            {
                if((fp=fopen(name.c_str(),"w"))!= NULL)
                    puts("open successfully");
                else
                {
                    puts("Fail to open");
                    break;
                }
            }
            else if(judge == "w+")
            {
                if((fp=fopen(name.c_str(),"w+"))!=NULL)
                    puts("open successfully");
                else
                {
                    puts("Fail to open");
                    break;
                }
            }
            else
            {
                cout << "Don't exist" << endl;
            }

            cout << "Enter the content:";
            cin >> content;

            fputs(content.c_str(),fp);

            fclose(fp);
        }
        else if(cmd == 2)
        {
            cout << "Enter the old name:" << endl;
            cin >> fname;
            cout << "New name:";
            cin >> newname;
            int result;
            result = rename(fname.c_str(),newname.c_str());
            if(result == 0)
            {
                puts("Rename Successfully!");
            }
            else
            {
                puts("Fail to rename");
            }
        }
        else if(cmd == 3)
        {
            cout << "enter file name or all files(*):";
            cin >> fname;
            if(fname == "*")
            {
                system("attrib *");
            }
            else
            {
                string tmp = "attrib " + fname;
                system(tmp.c_str());
            }
        }
        else if(cmd == 4)
        {
            long file;
            struct _finddata_t find;

            if((file=_findfirst("*.*",&find))==-1L)
            {
                printf("NULL\n");
                exit(0);
            }

            printf("%s\n",find.name);
            while(_findnext(file,&find) == 0)
            {
                printf("%10s\t%5d\t%d\n",find.name,find.size,find.attrib);
            }
            _findclose(file);
        }
        else if(cmd == 5)
        {
            break;
        }
        cout << "Enter your order:";
    }
    return 0;
}

 

posted @ 2018-05-19 20:18 Nikki_o3o 阅读(...) 评论(...) 编辑 收藏
2019-05-25 16:17:26 qq_40149612 阅读数 184

内存inode

我们知道inode索引节点是UNIX操作系统的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息,当用户搜索一个文件时,操作系统会根据文件名在磁盘上的inode表中找到该文件对应的inode,该inode包含文件的属主ID,属主的组ID,文件大小,文件使用磁盘块数量,修改时间等信息。但是在实际操作中,操作系统操作的都是内存上的内容,所以内存中会有磁盘上部分的inode表中的数据或者叫做inode表的一个缓存,用于对inode的快速访问,内存中的这块inode叫做内存inode。

系统文件打开表

系统文件打开表(Open file table)存在于内存中,整个操作系统只维护一张这样的表,用于保存已经打开文件的FCB文件号、共享计数(打开共享)、读写位置、打开模式、修改标志等信息,其中还有一个比较重要的属性就是一个指向内存inode的一个指针,这个指针的作用我们后面会介绍。

用户文件打开表

用户文件打开表(File Descriptor table)是每个进程都有的一张表,用于记录用户打开的文件的一些信息,主要的属性有文件描述符fd和 一个指向系统文件打开表项的指针。

不同的共享关系

​用户文件打开表、系统文件打开表和内存inode的关系如下

在这里插入图片描述

同进程复制fd

在这里插入图片描述

在同一个进程中共享同一个open file table表项,结果是两个文件共享一个句柄,可以dup()实现。

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(){
    int fd = open("test.txt",O_RDONLY);
    int fdcopy = dup(fd);
    char buff1[10];
    char buff2[10];
    read(fd, buff1, 5);
    read(fdcopy, buff2, 5);
    printf("buff1:%s\n", buff1);
    printf("buff2:%s\n", buff2);
    close(fd);
    close(fdcopy);
}

其中test.txt中的数据是:

ABCDEFGHIJ

结果:

buff1:ABCDE
buff2:FGHIJ

跨进程复制fd

在这里插入图片描述

父进程通过fork命令实现子进程对父进程的一种复制,该父子进程的用户文件打开表一样。

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(){
    int fd = open("test.txt",O_RDONLY);
    pid_t pid = fork();
    char buff[10];
    if(pid > 0){
	read(fd, buff, 5);
	printf("father:%s\n", buff);
    } else{
	read(fd, buff, 5);
	printf("son:%s\n", buff);
    }	
}

结果:

father:ABCDE
son:FGHIJ

共享数据独立访问

父子进程之间共享数据独立访问

在这里插入图片描述

两个进程访问同一个文件,但是其系统文件打开表指向不同。代码和上面的跨进程复制fd几乎一样,只是这个open函数在fork函数之后执行,导致两个进程file ptr分别指向系统文件打开表不同位置。

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(){
    pid_t pid = fork();
    int fd = open("test.txt",O_RDONLY);
    char buff[10];
    if(pid > 0){
	read(fd, buff, 5);
	printf("father:%s\n", buff);
    } else{
	read(fd, buff, 5);
	printf("son:%s\n", buff);
    }	
}

结果:

father:ABCDE
son:ABCDE

同一进程之间共享数据独立访问

在这里插入图片描述

同一个进程操作同一文件,但是对应的系统文件打开表表项不一样。

int main(){
    int fd1 = open("test.txt",O_RDONLY);
    int fd2 = open("test.txt", O_RDONLY);
    char buff1[10];
    char buff2[10];
    read(fd1, buff1, 5);
    read(fd2, buff2, 5);
    printf("buff1:%s\n", buff1);
    printf("buff2:%s\n", buff2);
    close(fd1);
    close(fd2);
}

结果:

buff1:ABCDE
buff2:ABCDE
2017-06-10 00:27:10 a271917994 阅读数 498

linux与其他操作系统文件共享方法

前言:
我将Linux文件共享的方法分为以下几类:
1)通过简单的文件夹属性设置,提供文件的访问和拷贝;
2)通过ssh(secure shell)服务;
3)通过scp(secure copy)命令;
4)搭建文件服务器。
.......

目前我所接触到的linux文件共享的方法也就是上面几种,下面大致介绍一下各类方法的操作。

1. 文件夹属性设置

其实很多人不知道,在windows/MacOS与linux之间传输文件,都可以简单的通过文件夹属性的设置达到,windows通过设置文件夹属性为共享,添加共享的权限为everyone或其他用户;MacOS在设置-共享,选择文件共享,添加共享文件夹和用户。在ubuntu中点击alt+f2出来的搜索框中输入windows或MacOS主机的\ip地址,即可看到其所有共享的文件夹。这样就能实现从其他系统向linux拷贝文件,但是如何设置将linux文件拷出呢?办法类似于windows文件共享的设置方法。在windows中查看linux文件是通过开始-运行中输入linux主机的\ip地址,MacOS中在Finder中command+k输入linux主机的\ip地址。
上述这种方法适用于所有同学使用,尤其是非码农的同学一定要学会这种操作,节约大量的文件拷进拷出的时间。

2. 通过ssh服务

windows电脑中安装一个mobaxterm或putty(pscp)。通过ssh登录,mobaxterm可以直接拖拽文件到linux目录,也可以从中拖出。putty的附带程序pscp可以很好的实现文件拷贝,pscp是个exe文件,但是需要通过命令行来执行,放到C:\WINDOWS\system32下就能直接在命令行下使用pscp命令了,一般用法:

pscp -参数 文件名 用户名@主机ip:/目标目录
pscp -r test.file root@192.168.1.12:/home/test

3. 通过scp命令

windows to linux
scp -参数 文件名 用户名@主机ip:/目标目录
scp -r test.file root@192.168.1.12:/home/test
linux to windows
scp -参数 用户名@主机ip:/文件目录 目标目录 
scp -r root@192.168.1.12:/home/test.file ./ 

4. 通过安装文件服务器

之前为了实现文件的共享,安装了samba服务器,安装起来也十分简单,详细可见我的另外一篇博客。

5. 其他方法

NAS或自己搭建的文件服务器。
家里的路由和移动硬盘组合可以当作文件服务器使用,我现在把东西都放在移动硬盘里,将移动硬盘插在路由器上,在家里的任何一台电脑上都可以访问移动硬盘里面的数据,而且速度非常快。
除了路由之外,也可以通过树莓派来作为主体,在树莓派上搭建samba,将移动硬盘挂载到树莓派上,来作为文件服务器使用。

操作系统 文件共享

阅读数 1104

没有更多推荐了,返回首页