精华内容
下载资源
问答
  • 文件管理基础命令4.1 pwd4.2 cd4.3 ls4.4 tree4.5 mkdir(目录)4.6 touch 1.文件管理概述 ​ 创建 复制 移动 删除 查看 编辑 压缩 2.系统的目录结构 在Linux中,所有的文件或者目录的起点或者顶点都是以/开始的 ...

    目录

    1.文件管理概述

    创建 复制 移动 删除 查看 编辑 压缩

    2.系统的目录结构

    在Linux中,所有的文件或者目录的起点或者顶点都是以/开始的
    linux的目录结构就像是一个倒挂的树形结构

    img

    必知必会的目录及文件
    • /usr/bin
      存放系统命令的目录 ,bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令

    • **/usr/sbin:**存放系统命令的目录 需要管理员权限才可以执行的命令

    • /boot:
      系统引导目录,这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

    • /dev :
      dev 是 系统设备目录,Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

      •        ```bash
        

        /dev/cdrom #光盘镜像
        /dev/null #黑洞设备 将一些不用的数据导入到黑洞设备
        /dev/zero #字符设备 会源源不断的产生数据,字符
        /dev/random #产生随机数的设备

        /dev/stderr -> /proc/self/fd/2 #错误输出 2>
        /dev/stdin -> /proc/self/fd/0 #标准输入 <
        /dev/stdout -> /proc/self/fd/1 #标准输出 >

        /dev/pts/ #存放的是虚拟终端信息
        #磁盘设备及分区
        /dev/sda
        /dev/sda1
        /dev/sda2
        /dev/sda3

        
        
        
        
    • /etc:
      etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的主配置文件和程序配置文件目录

    • /etc/sysconfig/network-scripts/ifcfg-*	#查看网卡配置文件
      /etc/hosts#	本地域名解析文件	#记录ip地址与主机名的对应映射关系
      /etc/resolv.conf	#本地DNS配置文件
      /etc/fstab	#挂载设备目录配置文件	开机自启动挂载列表
      /etc/hostname	#主机名字配置文件
      
    • /home
      普通用户的家目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

    • /usr/lib
      lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

      • /lib #库文件目录 32位库文件
        /usr/lib64 #库文件目录 64位库文件
    • /lost+found
      这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

    • /media
      linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

    • /mnt
      系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

    • /opt
      opt 是早期第三方软件安装目录, optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

    • /proc

      虚拟可变的目录 记录了系统的实时状态–>类似于汽车的仪表盘

    • /root
      该目录为系统管理员,也称作超级权限者的用户主目录。root的家目录

    • /sbin
      s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

    • /selinux
      这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

    • /srv:(了解)
      物理设备所产生的一些文件

    • /sys:(了解)

      物理设备的驱动信息文件

      这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

      sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

      该文件系统是内核设备树的一个直观反映。

      当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

    • /tmp
      公共临时目录 公共场所 只能针对自己的文件进行操作 系统会定时的删除这个目录下长时间没有访问的文件

    • /usr

      /usr #系统目录 系统文件目录 跟windows目录一样
      /userlocal #系统软件安装目录 跟windows的一样

    • /usr/bin:
      系统用户使用的应用程序。

    • /usr/sbin:
      超级用户使用的比较高级的管理程序和系统守护程序。

    • /usr/src:
      内核源代码默认的放置目录。

    • /var

      这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

    /var/log	#系统日志存放目录
    /var/log/messages	#系统级别日志
    /var/log/secure	#用户登录日志
    /var/tmp	#程序运行时所产生的一些进程文件
    
    
    • /run
      进程运行时产生的一些pid文件,是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

    在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

    /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

    /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

    值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

    • stderr -> /proc/self/fd/2 #错误输出2>
      stdin -> /proc/self/fd/0 #标准输入<
      stdout -> /proc/self/fd/1 #标准输出>

    3.路径的定位

    #包含整个文件名称及文件的位置	这样的定位称之为路径
    #路径就是对于文件的定位的一种方式
    #每个目录下都有一个.和..
    
    .	#表示的是当前所在的目录
    ..	#当前目录的上一级目录  /根
    ./	#用于表示当前目录
    ../	#从当前目录的上一级目录开始
    
    #什么是决定路径	什么是相对路径
    #绝对路径:	凡是以/开始的路径就是绝对路径	或者以~为开头的路径也是绝对路径
    #相对路径:	不是以/开头的路径就是相对路径	针对当前路径而言的
    

    4.文件管理基础命令

    4.1 pwd

    显示当前工作目录的绝对路径,通俗点就是:告诉我,你在哪里

    4.2 cd

    切换路经,没有什么选项可用

    [root@localhost ~]# cd	#直接切换到当前用户的家目录,等价于cd ~
    [root@localhost ~]#
    
    [root@localhost ~]# cd .
    [root@localhost ~]# cd ./	#保持当前目录不变
    
    [root@localhost usr]# cd ./local/
    [root@localhost local]# pwd
    /usr/local
    
    
    [root@localhost local]# cd ../etc/	#进入当前目录的上一级目录/user/etc
    [root@localhost etc]# pwd
    /usr/etc
    
    cd	-	切换到上一步所在的目录,快速的到达上一次的命令
    

    4.3 ls

    显示文件或者目录的列表信息 相当于windows双击一次打开目录

    #常用选项
    -l	#以长格式显示文件的属性信息
    -i	#显示文件或者目录的inode信息  索引节点信息
    -h	#以字节大小的形式显示文件的大小  
    -a	#显示所有的文件,隐藏文件,所有以点开头的文件就是隐藏文件
    -S	#以文件大小进行排序
    -t	#根据时间进行排序,最新的时间在最上面
    -r	#倒序
    -F	#给不同的文件加上不同的标识符
    	/	#目录
    	*	#可执行文件
    	=	#表示的是套接字文件	socket文件
    	|	#管道文件
    -1	#以行的形式显示文件的名称
    

    4.4 tree

    以树状形式显示目录列表,默认不显示隐藏文件

    #常用选项
    -a	#显示所有文件或者目录	隐藏文件
    -d	#只显示目录和目录的数量
    -h	#显示所有文件的大小
    -F	#给不同类型的文件加上标识符
    		/	#目录
    	*	#可执行文件
    	=	#表示的是套接字文件	socket文件
    	|	#管道文件
    -L+数字	#显示级别
    

    4.5 mkdir(目录)

    root@localhost ~]# mkdir /data   #使用绝对路径进行创建
    
    [root@localhost ~]# mkdir data   #使用相对路径进行创建
    
       File exists    =======    #文件已经存在
         {}        #生成序列,有规律的用..分割   无规律的使用逗号分割
         -v        #显示创建的过程
    [root@string ~]# mkdir -pv one/two/treee/four
    mkdir: created directory ‘one/two’
    mkdir: created directory ‘one/two/treee’
    mkdir: created directory ‘one/two/treee/four’
         -m        #创建的时候,给目录设置一个权限
         -p        #创建多级目录 递归创建   当目录已经存在时,再次创建不会报错
                    #注:  (在相同的路径下,不能存在相同的文件名称
                    #      在不同的路径下,可以创建相同的文件名称)
    [root@string ~]# mkdir -p abc/bcd/cde/def
    [root@string ~]# tree abc/
    abc/
    └── bcd
        └── cde
            └── def
    

    4.6 touch

    创建文件 创建空文件 当文件已经存在时,会改变文件的时间戳

    在linux系统中,创建文件是会区分大小写的,可以区分a,A;在windows中不会区分大小写,不可能存在A,a一样的文件夹

    #文件
    # 创建单个文件
    [root@string test]# touch 1.txt
    [root@string test]# ls
    1.txt
    
    # 创建多个文件
    [root@string test]# touch 3.txt 2.txt
    [root@string test]# ls
    1.txt  2.txt  3.txt
    
    # 匹配创建多个文件
    [root@string test]# touch {a..z}.txt
    [root@string test]# ls
    1.txt  3.txt  b.txt  d.txt  f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
    2.txt  a.txt  c.txt  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
    [root@string ~]# touch {abc,bcd,fgh}.txt
    [root@string ~]# ls
    abc.txt  bcd.txt  fgh.txt  
    
    展开全文
  •  表示上一层目录 - 表示前一个工作目录 ~ 表示当前用户所在的家目录 ~robinson 用户robinson所在的家目录 二、目录命令pwd 显示当前目录(绝对路径) [oracle@oradb ~]$ pwd /home/oracle [oracle@oradb ~]$ cd /...

    Linux 的命令非常之多,而使用的最多最广最基本的莫过于一些常用的命令,如目录命令即是如此。Linux的常用目录命令与DOS中的目录命

    令非常相似,只不过使用了不同单词的缩写而已。如cd(change directory)等同于Windows中的cd,ls命令等同于Windows中的dir。尤其对早期

    使用过DOS的人而言,这些并不陌生。同样在Linux中的绝对路径、相对路径的概念与Windows中的路径表述其实质是一样的。本文仅仅列出几个

    常用的目录命令以及各个命令的常用参数。

    一、目录路径绝对路径

    由根目录写起的路径。如:/home/oracle/robinson

    对于shell scripts中建议使用绝对路径

    相对路径

    相对于当前工作目录的路径。如:~/robinson 或 cd ./robinson

    主要是简化路径

    有关目录的操作

    .     表示此层目录或当前目录或当前目录

    ..    表示上一层目录

    -     表示前一个工作目录

    ~      表示当前用户所在的家目录

    ~robinson 用户robinson所在的家目录

    二、目录命令pwd 显示当前目录(绝对路径)

    [oracle@oradb ~]$ pwd

    /home/oracle

    [oracle@oradb ~]$ cd /u01/bk

    [oracle@oradb bk]$ pwd

    /u01/bk

    cd  切换目录

    cd 目标位置(绝对路径或相对路径)

    cd ..

    cd

    cd ~

    cd ~username

    [oracle@oradb bk]$ pwd

    /u01/bk

    [oracle@oradb bk]$ cd ~         #切换到当前用户的家目录

    [oracle@oradb ~]$ cd /u01/bk

    [oracle@oradb bk]$ pwd

    /u01/bk

    [oracle@oradb bk]$ cd ..        #切换到上一级目录

    [oracle@oradb u01]$ pwd

    /u01

    [oracle@oradb u01]$ cd

    [oracle@oradb ~]$ cd /u01/oracle

    [oracle@oradb oracle]$ cd ~

    mkdir 创建目录

    mkdir [-mp] 目录名

    -p 若建立的目录的上层目录未建立,则自动建立

    -m 建立目录时,指定权限

    [oracle@oradb ~]$ mkdir robinson

    [oracle@oradb ~]$ mkdir ~/robinson/scripts

    [oracle@oradb ~]$ mkdir -p ~/robinson/bak/archive_log  #使用-p参数创建目录archive_log,同时也创建了上层目录

    [oracle@oradb robinson]$ mkdir -m 775 tmp               #创建目录时指定了775权限

    [oracle@oradb robinson]$ ls -hltr

    total 12K

    drwxr-xr-x 2 oracle oinstall 4.0K Nov  8 20:39 scripts

    drwxr-xr-x 3 oracle oinstall 4.0K Nov  8 20:39 bak

    drwxrwxr-x 2 oracle oinstall 4.0K Nov  8 20:42 tmp

    rmdir 删除空目录

    rmdir [-p]目录名

    -p 连同上层的空目录一起删除(一般不常用)

    [oracle@oradb robinson]$ rmdir tmp

    [oracle@oradb robinson]$ ls -hltr

    total 8.0K

    drwxr-xr-x 2 oracle oinstall 4.0K Nov  8 20:39 scripts

    drwxr-xr-x 3 oracle oinstall 4.0K Nov  8 20:39 bak

    [oracle@oradb robinson]$ rm -rf scripts                #使用rm命令带参数-rf同样可以删除一个目录

    三、文件路径变量:$PATHPATH用于指定执行文件所在的路径。如在任意路径下输入ls,cd或其它应用程序的命令能成功执行而不报错,这取决于路径设置的正确。

    同样在Windows平台也存在一个path用于设定可执行文件的路径,只不过windows平台中的变量定义没有区分大小写

    Linux中的变量名通常使用大写,可以使用echo $PATH来查看PATH的值,$表示后面跟的字符串将作为变量

    C:\Documents and Settings\Robinson Cheng>path

    PATH=d:\app\RobinsonCheng\Oracle_client\product\11.2.0\client_1\bin;C:\windows\system32;C:\windows;C

    :\windows\System32\Wbem;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\IDM Computer Solutions

    \UltraEdit\

    [oracle@oradb robinson]$ echo $PATH

    /u01/oracle/10g/bin:/bin:/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin

    [oracle@oradb robinson]$ echo $path

    [oracle@oradb ~]$ ls -hltr /bin/ls

    -rwxr-xr-x 1 root root 93K Feb 24  2010 /bin/ls

    [root@oradb ~]# mv /bin/ls /tmp

    [root@oradb ~]# ls

    -bash: ls: command not found

    [root@oradb ~]# PATH="$PATH":/tmp         #使用该方式修改PATH变量,以使得能找到ls命令

    [root@oradb ~]# echo $PATH

    /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/tmp

    [root@oradb ~]# ls

    anaconda-ks.cfg  Desktop  install.log  install.log.syslog

    [root@oradb ~]# /tmp/ls                   #使用直接路径方式调用ls命令

    anaconda-ks.cfg  Desktop  install.log  install.log.syslog

    原文链接:

    http://blog.csdn.net/robinson_0612/article/details/6967962

    展开全文
  • Linux命令:pwd

    2021-05-11 22:43:13
    打印当前目录的完全路径。-L 打印路径包含符合路径-P 打印路径不含符合路径。...换言之,要判断自己是否通过符号链接进入的,或者什么符号链接进入的,可以用pwd -L和pwd -P的打印进行比较来确...

    打印当前目录的完全路径。

    -L  打印路径包含符合路径

    -P  打印路径不含符合路径。

    -LP,可能打印的不同,取决于你对进入当前目录的方式是通过符号链接进入,还是物理目录进入。如果是符号链接进入,则-L和不带-L打印的一样,和-P的不一样;如果是从物理目录进入的,则所有情况打印的都一样。

    换言之,要判断自己是否通过符号链接进入的,或者什么符号链接进入的,可以用pwd -L和pwd -P的打印进行比较来确定。

    help pwd

    pwd: pwd [-LP]

    Print the name of the current working directory.

    Options:

    -L print the value of $PWD if it names the current working

    directory

    -P print the physical directory, without any symbolic links

    By default, `pwd' behaves as if `-L' were specified.

    Exit Status:

    Returns unless an invalid option is given or the current directory

    cannot be read.

    linux命令 --&gt&semi; pwd命令

    关于 pwd 命名前面在cd命令中已经出现过啦!!不过还是简单的说一下吧! pwd命令简单的介绍: pwd - print name of current/working directory(这... ...

    每天一个linux命令&lpar;3&rpar;:pwd命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

    linux命令(3):pwd命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

    每天一个Linux命令(3):pwd命令

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

    Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

    linux命令——磁盘管理pwd

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径(绝对路径). 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录.在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的 ...

    linux命令之pwd&lpar;print working drectory&rpar;

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

    每天一个Linux命令(03)--pwd

    linux 中用 pwd命令来查看“当前工作目录”的完整路径.简单地说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判断当前目录在文件系统内的确切位置. ...

    转每天一个linux命令(3):pwd命令

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

    随机推荐

    autorelease的对象何时被释放

    autorelease的对象何时被释放 参考答案: 如果了解一点点Run Loop的知道,应该了解到:Run Loop在每个事件循环结束后会去自动释放池将所有自动释放对象的引用计数减一,若引用计数变成 ...

    WCF学习心得----(四)服务承载

    WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

    Java线程池的工作原理与实现

    简单介绍 创建线程有两种方式:继承Thread或实现Runnable.Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自 ...

    about云资源汇总指引V1&period;4&colon;包括hadoop&comma;openstack&comma;nosql&comma;虚拟化

    hadoop资料 云端云计算2G基础课程 (Hadoop简介.安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频, ...

    wine下汉字方块解决

    1.修改字体 首先,下载一个字体,例如win下的新宋体 其次, mkdir /usr/share/fonts/windows mv simsun.ttc /usr/share/fonts/window ...

    不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 $url = "http://www. ...

    jQuery模块化开发

    //定义了命名空间. var Itcast = {}; //定义第二级别的 命名空间. var Itcast.Model = {}; var Itcast.Model.UIJs = (function ...

    vue入坑教程(一)

    1.脚手架搭配webpack的安装 (1)需要检查自己的电脑有没有安装node和npm 如果没有安装可以参考官网,以及安装的步骤 官方中文网地址:http://nodejs.cn/ (2)下载webp ...

    战神答题APP 无敌结束版

    APP发布了哦~~     多多捧场~ http://anzhuoyuan.com/app/info/appid/242381.html 还有github https://github.com/784 ...

    this与&dollar;&lpar;this&rpar;对象

    this与$(this)对象.前者是Javascript对象,而后者是jQuery是对象.两者分清楚,它们只能使用自己的方法.Javascript对象使用Javascript的方法,jQuery对象使 ...

    展开全文
  • 常见Linux命令pwd实现

    2021-08-21 23:00:16
    对于内置命令就是shell当做自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令。 我们用type命令就可以看到其的类型,内置shell命令其实就是bash当

    使用 Linux 命令行的人来说,pwd命令是非常有用的,执行 pwd 命令可立刻得知您目前所在的工作目录的绝对路径名称。

    认识pwd命令

    顾名思义,pwd命令打印当前工作目录或简单的目录用户,目前。 它使用从根 (/) 开始的完整路径打印当前目录名称。 此命令内置于 shell 命令中。

    对于内置命令就是shell当做自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令。

    我们用type命令就可以看到其的类型,内置shell命令其实就是bash当中内部的命令,就好比我们一个软件内部的嵌套的不同的功能一样;

    在这里插入图片描述

    pwd 的基本语法:

    pwd [OPTION]

    选项 :

    -L (logical) 目录连接链接时,输出连接路径
    -P (physical) 输出物理路径

    使用默认方式,用 pwd 命令查看默认工作目录的完整路径

    在这里插入图片描述
    使用pwd -P 显示出实际路径

    在这里插入图片描述
    目录连接链接时,pwd显示的是连接路径;pwd -P 显示出实际路径,而非使用连接(link)路径;

    在这里插入图片描述

    POSIX 要求默认值为 -L,但大多数脚本都需要 -P。当前外壳默认为 -L,而独立时
    pwd 实现默认为 -P。

    最简单的pwd命令实现

    实现pwd真的太简单了,只要在程序中使用getcwd()函数就可以实现获得绝对路径的功能了。

    #include <stdlib.h>
    #include <unistd.h>//getcwd
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        char *wd =getcwd(NULL, 0);
    
        if (NULL == wd) {
            printf("Get cerrent working directory fail.\n");
            exit(-1);
        } else {
            printf("%s\n", wd);
        }
    
        return 0;
    }
    
    

    编译运行:

    在这里插入图片描述

    上面其实已经实现了pwd的功能,但这显然只能实现其功能,而不能了解其工作原理;我们接着往下来!

    快速理解inode

    在一个文件系统中,一个inode代表一个文件,并使用一个整数值来表示该inode,里面包含了与该文件有关的一些信息。

    inode包含很多的文件元信息,但不包含文件名,利用stat命令可以查看一个文件更加详细的inode信息,包括inode编号,占用的块数量,块大小,硬链接个数,atime, mtime, ctime

    在这里插入图片描述

    总之,除了文件名以外的所有文件信息,都存在inode之中。

    Linux中的目录

    Linux文件系统是目录和文件组成的一种层次结构,目录的起点称为根(root),其名字是一个字符 / 。

    在作为路径使用时, 根目录 / 是一个绝对路径,而Linux中也有一些相对路径可用,比如 . 或 ./ 表示当前目录、 … 或 …/ 表示上一级目录、 ~ 或 ~/ 表示当前用户的主目录(家目录)。

    在Linux目录中,每个名字有一个inode number,inode number指出了存储数据的硬盘空间的位置。通过ls -i看到名字和inode对应关系。

    在这里插入图片描述

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

    pwd实现

    static void file_name_free(struct file_name *p)
    {
    	free (p->buf);
    	free (p);
    }
    
    static struct file_name *file_name_init (void)
    {
    	struct file_name *p = (struct file_name *)malloc (sizeof *p);
    
    	/* 从大于 PATH_MAX 的缓冲区开始,但要注意系统
    其中 PATH_MAX 非常大——例如,INT_MAX。  */
    	p->n_alloc = MIN (2 * PATH_MAX, 32 * 1024);
    
    	p->buf = (char *)malloc (p->n_alloc);
    	p->start = p->buf + (p->n_alloc - 1);
    	p->start[0] = '\0';
    	return p;
    }
    
    
    
    /* 将长度为 S_LEN 的名称 S 附加到不断增长的文件名 P 之前。  */
    static void file_name_prepend (struct file_name *p, char const *s, size_t s_len)
    {
    	size_t n_free = p->start - p->buf;
    	if (n_free < 1 + s_len)
    	{
    		size_t half = p->n_alloc + 1 + s_len;
    		char *q = (char *)calloc (2, half);
    		size_t n_used = p->n_alloc - n_free;
    		p->start = q + 2 * half - n_used;
    		memcpy (p->start, p->buf + n_free, n_used);
    		free (p->buf);
    		p->buf = q;
    		p->n_alloc = 2 * half;
    	}
    
    	p->start -= 1 + s_len;
    	p->start[0] = '/';
    	memcpy (p->start + 1, s, s_len);
    }
    
    /* 返回一个由 N 个 '/' 分隔的“..”组件组成的字符串(malloc'd)。  */
    static char *nth_parent(size_t n)
    {
    	char *buf = (char *)calloc(3, n);
    	char *p = buf;
    
    	for (size_t i = 0; i < n; i++)
    	{
    		memcpy (p, "../", 3);
    		p += 3;
    	}
    	p[-1] = '\0';
    	return buf;
    }
    
    
    static inline bool dot_or_dotdot (char const *file_name)
    {
    	if (file_name[0] == '.')
    	{
    		char sep = file_name[(file_name[1] == '.') + 1];
    		return (! sep || ISSLASH (sep));
    	}
    	else
    		return false;
    }
    
    /* readdir 的包装器,以便调用者看不到 '.' 的条目。 或“……”。  */
    static inline struct dirent const *readdir_ignoring_dot_and_dotdot (DIR *dirp)
    {
    	while (1)
    	{
    		struct dirent const *dp = readdir(dirp);
    		if (dp == NULL || ! dot_or_dotdot(dp->d_name))
    			return dp;
    	}
    }
    
    
    static void find_dir_entry (struct stat *dot_sb, struct file_name *file_name,
                    size_t parent_height)
    {
    	DIR *dirp;
    	int fd;
    	struct stat parent_sb;
    	bool use_lstat;
    	bool found;
    
    	dirp = opendir("..");
    	if (dirp == NULL)
    		printf("cannot open directory %s\n",strdup(nth_parent(parent_height)));
    
    	fd = dirfd (dirp);
    /*chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录*/	
    	if ((0 <= fd ? fchdir(fd) : chdir("..")) < 0)
    		printf("failed to chdir to %s\n",strdup(nth_parent(parent_height)));
    
    	if ((0 <= fd ? fstat(fd, &parent_sb) : stat(".", &parent_sb)) < 0)
    		printf("failed to stat %s\n",strdup(nth_parent(parent_height)));
    
    
    	/*如果父目录和子目录在不同的设备上,那么我们
    不能依赖 d_ino 来获取有用的 i-node 编号; 请改用 lstat。  */
    	use_lstat = (parent_sb.st_dev != dot_sb->st_dev);
    
    	found = false;
    	while (1)
    	{
    		struct dirent const *dp;
    		struct stat ent_sb;
    		unsigned long long int ino = 0;
    
    		errno = 0;
    		if ((dp = readdir_ignoring_dot_and_dotdot (dirp)) == NULL)
    		{
    			if (errno)
    			{
    				/* 在 closedir 调用中保存/恢复 errno。   */
    				int e = errno;
    				closedir (dirp);
    				errno = e;
    
    				/* 安排在退出此循环后进行诊断。   */
    				dirp = NULL;
    			}
    			break;
    		}
    
    		ino = dp->d_ino;
    
    		if (ino == NOT_AN_INODE_NUMBER || use_lstat)
    		{
    			if (lstat (dp->d_name, &ent_sb) < 0)
    			{
    				/* 跳过我们无法统计的任何条目。  */
    				continue;
    			}
    			ino = ent_sb.st_ino;
    		}
    
    		if (ino != dot_sb->st_ino)
    			continue;
    
    		/* 如果我们不跨越设备边界,那么一个简单的 i-node
    匹配就足够了。  */
    		if ( ! use_lstat || ent_sb.st_dev == dot_sb->st_dev)
    		{
    			file_name_prepend(file_name, dp->d_name, strlen(dp->d_name));
    			found = true;
    			break;
    		}
    	}
    
    		if (dirp == NULL || closedir (dirp) != 0)
    		{
    			/* N请注意,此诊断适用于 readdir
    和关闭失败。  */
    			printf("reading directory %s\n",strdup(nth_parent(parent_height)));
    		}
    
    		if ( ! found)
    			printf("couldn't find directory entry in %s with matching i-node",strdup(nth_parent(parent_height)));;
    
    		*dot_sb = parent_sb;
    }
    
    
    /* 调用 lstat 以获取“/”的设备和 inode 编号。
        失败时,返回NULL。 否则,设置成员
        *ROOT_D_I 相应地并返回 ROOT_D_I。  */
    struct dev_ino *get_root_dev_ino (struct dev_ino *root_d_i)
    {
    	struct stat statbuf;
    	if (lstat ("/", &statbuf))
    		return NULL;
    	root_d_i->st_ino = statbuf.st_ino;
    	root_d_i->st_dev = statbuf.st_dev;
    	return root_d_i;
    }
    
    
    static void robust_getcwd (struct file_name *file_name)
    {
    	size_t height = 1;
    	struct dev_ino dev_ino_buf;
    	struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
    	struct stat dot_sb;
    
    	if (root_dev_ino == NULL)
    		printf("failed to get attributes of %s\n",strdup("/"));
    
    	if (stat (".", &dot_sb) < 0)
    		printf("failed to stat %s\n",strdup("."));
    
    	while (1)
    	{
    		find_dir_entry (&dot_sb, file_name, height++);
    	}
    
    	/* 查看是否需要前导斜线; file_name_prepend 添加一个。   */
    	if (file_name->start[0] == '\0')
    		file_name_prepend (file_name, "", 0);
    }
    
    /* 如果“pwd -L”可接受,则从环境中返回 PWD
        输出,否则为 NULL。   */
    static char *logical_getcwd (void)
    {
    	struct stat st1;
    	struct stat st2;
    	char *wd = getenv("PWD");
    	char *p;
    
    	/* 首先进行文本验证。  */
    	if (!wd || wd[0] != '/')
    		return NULL;
    	
    	p = wd;
    	while ((p = strstr(p, "/.")))
    	{
    		if (!p[2] || p[2] == '/'
    		  || (p[2] == '.' && (!p[3] || p[3] == '/')))
    			return NULL;
    			
    		p++;
    	}
    
    
    	/* 系统调用验证  */
    	if (stat(wd, &st1) == 0 && stat (".", &st2) == 0)
    		return wd;
    	
    	return NULL;
    }
    
    
    int main(int argc, char **argv)
    {
    	
    	char *wd;
    	/* POSIX 要求默认值为 -L,但大多数脚本都需要 -P。
    当前外壳默认为 -L,而独立时
    pwd 实现默认为 -P。 */
    	
    	bool logical = (getenv ("POSIXLY_CORRECT") != NULL);
    	
    	while (1)
    	{
    		int c = getopt(argc, argv, "LP");
    		
    		if (c == -1)
    			break;
    		switch (c)
    		{
    			case 'L':
    				logical = true;
    				break;
    			case 'P':
    				logical = false;
    				break;
    			default:
    				break;
    		}
    	}
    
    	if (optind < argc)
    		printf("ignoring non-option arguments\n");
    
    	if(logical)
    	{
    		wd = logical_getcwd();
    		if (wd)
    		{
    			puts(wd);
    			return 0;
    		}
    	}
    
    	wd = getcwd(NULL, 0);
    	if (wd != NULL)
    	{
    		puts(wd);
    		free(wd);
    	}
    	else
    	{
    		struct file_name *file_name = file_name_init();
    		robust_getcwd(file_name);
    		puts (file_name->start);
    		file_name_free(file_name);
    	}
    	
    	return 0;
    }
    
    
    

    编译运行

    在这里插入图片描述

    总结

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。

    欢迎关注微信公众号【程序猿编码】,欢迎添加本人微信号(17865354792)交流学习。

    展开全文
  • 简述目录是 Linux 的基本组成部分,目录管理包括目录的复制、删除、修改等操操作。在 Linux 层次结构中,想要知道当前所处的目录,可以用 pwd 命令,该命令输出当前工作目录的完整名称。环境变量 OLDPWD 表示前一次...
  • 学生课程实验报告书课程:《linux 网络操作系统》级系专业班学号:姓名:指导教师:一、实验项目:用户与组群管理二、实验日期:三、实验原理:1.熟悉 Linux 下常用的操作指令。2.加深对文件,目录,文件系统等概念...
  • 切换 到家目录并 查看 当前目录下的文件 2. 在家目录下 创建 一个叫做 myDir 的文件夹 3. 进入 myDir 文件夹 4. 创建 出 file1, file2, file3 这三个文件并 查看 rm -i readme rm -r myTest/ rm -ri 1 事先询问 rm...
  • 操作系统实验七Linux下的文件管理操作系统实验七:Linux下的文件管理一.实验目的1.熟悉Linux 下常用的操作指令。2.加深对文件,目录,文件系统等概念的理解。3.掌握Linux 文件系统的目录结构。4.掌握有关Linux 文件...
  • 这里我们通过实现一个pwd来了解Unix树状文件系统的内部结构。 以下图所示目录结构为例: 目录可以包含文件与子目录,且目录深度一般没有限制。那么就引出一个问题,大部分命令内存缓冲区是有限的,目录太深会导致...
  • 上传:将centos中文件上传到windows中 示范如下:sy -y a.txt 解释:将centos中的 a.txt 上传到windows中路径文件中即下图 man和help 帮助命令,用来对帮助我们寻找命令连接的参数 例如:cat --help 或 ...
  • linux 实验报告 文件系统及文件管理学生课程实验报告书课程: 《linux网络操作系统》级 系专业 班学号:姓名:指导教师:一、实验项目: 用户与组群管理二、实验日期:三、实验原理:1.熟悉Linux下常用的操作指令。2...
  • pwd是什么缩写

    2020-12-18 21:49:54
    pwd是什么缩写【篇一:...【篇二:pwd是什么缩写】user切换用户rpm:redhatpackagemanager红帽子打包管理pwd:printworkdirectory打印当前目录显示出当前工作目录的绝对路径ps:processstatus(进程状态,类似于wind...
  • linux文件管理命令

    2021-05-16 08:08:49
    主流:RedHat, SUSE, DebianRedHat:通用格式 老的机器上编译 大部分机器通用目录管理:ls, cd, pwd, mkdir, rmdir, tree文件管理:touch, stat, file, rm, cp, mv, nano日期时间:date, clock, hwclock, cal查看文本...
  • ——鲁迅ls命令cd命令pwd命令Linux目录结构ls命令ls跟Windowsdos下的dir命令是一样的都是用来列出目录下的文件,让我们一起来操作下~下面我们讲下-l参数:以长资料串列出,包含文件的属性与权限等资料;-h参数:将文件的...
  • 专业资料专业资料实验5 Linux文件管理一、实验目的掌握Linux文件系统的基本原理、结构和实现方法掌握Linux文件系统中文件的建立、打开、读/写、执行、属性等系统调用的使用学会设计简单的文件系统并实现一组操作通过...
  • FileGator具有多用户支持,因此可以让管理员和其他用户使用不同的访问权限,角色和主文件夹来管理文件。支持所有基本文件操作:复制,移动,重命名,创建,删除,压缩,解压缩,下载,上传。如果允许,用户可以一次...
  • 上节我们简单了解了Linux文件管理系统,现在我们学习它的实际操作。首先我们解释下~和/的区别。~之前我们介绍过,我们说~是Linux系统的根目录,其实这个说法是不准确的,~也叫家目录,表示当前用户的目录。其实我们...
  • MySQL 相关的环境变量使用MYSQL_PWD是不安全的。见6.3 与MySQL服务器连接。“mysql”客户使用MYSQL_HISTFILE环境变量中命名的文件来保存命令行历史,历史文件的缺省值是“$HOME/.mysql_history”,这里$HOME是HOME...
  • 查看系统管理员手册中该参数解释: PWD_POLICY 设置系统默认口令策略 默认值为2 动态,系统级参数 0:无策略 1:禁止与用户名相同 2:口令长度不小于9 4:至少包含1个大写字母(A-Z) 8: 至少包含1个数字(0-9) 16...
  • Linux目录和文件管理

    2021-05-10 16:47:43
    今天我们来介绍一下对于Linux系统“命令“的理解和分类以及常用的目录文件管理命令的使用。一. 命令用于实现某一类功能的指令或程序,命令的执行依赖于解释器程序(例如:/bin/bash)分类内部命令:属于Shell解释器的...
  • 目录基本命令查询目录操作文件操作配置文件管理配置文件查询配置文件保存系统启动配置文件查询系统启动配置文件修改配置文件重置VRP系统管理 基本命令查询 1、pwd 用来显示当前工作目录 2、dir 用来查看当前目录下的...
  • https://blog.csdn.net/qq_40334837/article/details/83819735Linux常用命令英文全称与中文解释apt:Advanced Packaging Tool高级包装工具cp: Copy file 复制文件cat: Concatenate 串联cd:Change directory 切换...
  • Linux文件与目录管理我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。在开始本教程前我们需要先知道什么是绝对路径与相对路径。绝对路径:路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个...
  • 展开全部MySql概述:62616964757a686964616fe59b9ee7ad9431333339663333MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。这样就增加了速度与提高...
  • 在linux系统中有很多对文件和目录进行管理的命令,那么我们现在就来看一下吧。pwd命令pwd - print name of current/working directory该命令主要用于查看当前所在路径eg.cd命令cd - Change the current directory该...
  • 点击上方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!昨日推荐:每天学一个 Linux 命令(21):tree命令简介pwd (print working ...
  • 原创Blog,转载请注明出处附上之前访问量比较高的几篇linux博客linux中所有的东西都是文件,命令就是一个一个二进制文件1、ls/bin/ls常用选项-a 所有文件(包括隐藏文件)-l 详细信息-d 目录属性-i 查看inode举例[root...
  • 20155212 C语言实现linux下pwd命令的两种方法学习pwd命令通过man pwd命令查看pwd [OPTION],一般不加参数-P显示当前目录的物理路径-L显示当前目录的连接路径该命令用来显示目前所在的工作目录。指令英文原义:print ...
  • Python标准库04 文件管理 (部分os包,shutil包)在操作系统下,用户可以通过操作系统的命令来管理文件,参考。Python 标准库则允许我们从 Python 内部管理文件。相同的目的,我们有了两条途径。尽管在 Python 调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 144,537
精华内容 57,814
关键字:

文件管理pwd