zoukankan      html  css  js  c++  java
  • Linux的目录和常用命令详解

    1、Linux 系统目录结构

           在我们平时生活中,操作系统用的最多的是Windows系统,如果你是土豪从小到大都是iPhone、Mac之类的电子产品,那你应该不会来做程序员吧(所以你就看不到这篇文章imageimage),在Windows系统下,系统的整个磁盘会被拆分为不同的磁盘分区,而且每个磁盘会分配一个不同的盘符,比如 C:、D: 等等,每个磁盘分区都单独存放自己的文件,它们有自己的根目录,每个磁盘分区的起点就是它们的根目录,比如 C:、D: 就相当于 C 盘和 D 盘的根目录了,如果想要找到一个文件,我们只要依次进入该文件所在的磁盘分区即可(这里假设是D盘),然后在进入该分区下的目录,最终找到这个文件。而Linux 操作系统也有目录的概念,只是Linux 和Windows 的磁盘管理有一点区别,Linux 是将整个磁盘进行统一的管理,不存在C:、D: 等盘符,Linux整个系统只有一个根目录 "/",所有的文件和目录都是在这个根目录下,它表示 Linux 文件系统的起点,因为在Linux系统中一切都是文件,其中的目录、字符设备、光盘、打印机等都被抽象成了文件,所以平时和我们打交道的都是文件。

           另外要注意一点,在Linux 中目录之间的间隔使用的是正斜线 (forward slash)"/",而 Windows中用的是反斜线 (back slash)""。

           Linux系统在安装的时候系统会建立一些默认的目录,每个目录都有其特殊的功能,所以下面我们对 Linux 系统中的目录结构以及经常使用到的概念进行一个完整介绍。

    image

           下面来简单介绍一下这些目录的含义(红色标注为重点):

    • /:根目录,文件的最顶端,是整个 Linux 文件系统的起点。
    • /bin:bin是Binary的缩写, 用于存放系统中常用的命令,任何用户都有权限执行,例如:ls、mkdir、mv等等。
    • /boot 用于存放Linux启动时的一些核心文件,包括一些连接文件以及镜像文件,其中Linux 的内核就存放在这个目录中。
    • /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,例如:硬盘、光驱、鼠标等设备文件,在Linux中访问设备的方式和访问文件的方式是相同的。
    • /etc 这个目录非常重要,用于存放系统和程序所需的配置文件,作用类似于 Windows 的注册表。
    • /home:普通用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,比如 user1 的home目录是 /home/user1。
    • /lib lib64:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。它们自己不能被执行,需要被其他的程序调用,几乎所有的应用程序都需要用到共享库。
    • /media:用于挂在设备,linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
    • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了,例如增加一块硬盘,需要手动挂载。
    • /opt:用于安装额外软件所用的目录,默认是空的。比如你安装一个Mysql数据库则就可以放到这个目录下。
    • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    • /root:该目录为系统管理员,也就是超级权限者root用户的home目录。
    • /run:用于存放进程产生的临时文件。当系统重启时,这个目录下的文件应该被删掉或清除。
    • /sbin:s就是Super User的意思,存放的是系统管理员使用的系统管理程序。
    • /srv:存放一些服务启动之后需要提取的数据。
    • /sys:该目录下安装了内核中新出现的一个文件系统 sysfs,该文件系统是内核设备树的一个直观反映。
    • /tmp:用来存放一些临时文件的,所有用户都可执行写操作。
    • /usr:这是一个非常重要的目录,很多的应用程序和文件都默认放在这个目录下,类似于Windows下的Program Files目录。
    • /usr/bin: 系统用户使用的应用程序。
    • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
    • /usr/src: 内核源代码默认的放置目录。
    • /usr/local该目录下一般是你安装软件的目录,也相当于在Windows下的Program Files这个目录。
    • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志log文件。
    • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

    2、Linux的绝对路径与相对路径

           文件的路径是用来帮助我们定位到某个文件的,一般文件的路径分为绝对路径和相对路径。

    • 绝对路径:指的是从根目录(/)开始写起的文件或目录路径,也就是将目录用完整的路径表示出来。
    • 相对路径:指的是相对于当前工作目录为起点来表示的文件路径。(注意:使用相对路径进入文件时最前面不加/)

           简单举例:

           1)、绝对路径

           例如我们进入:/usr/local/bin 目录下。

    image


           2)、相对路径

           我们首先回退到/usr/local目录,然后相对于这个目录进入/bin 目录。

    image    或者image   又或者直接使用绝对路径image

           两个特殊的目录:

    1.   . :一个点代表当前的目录,也可以用 . / 来表示。
    2.   . . :两个点代表上一层目录,也可以用 . . / 来表示。


           注意:绝对路径和相对路径二者的使用完全看自己怎么选择,两者各有利弊,绝对路径可以在任何目录下进入其它任何目录中,可以保证他的路径是绝对正确的,但是如果目录文件很多则需敲一段很长的路径。而相对路径在有同名的目录下非常的方便,但是如果要在不同命的目录下进入到其它目录就很麻烦(不使用绝对路径的情况),首先得退到根目录,然后才能进入其它目录。

           ①、相对路径的用途:例如现在有三个目录分别为:

    • /usr/local/packages/etc
    • /usr/local/packages/bin

           像这样的目录我们使用相对路径是非常方便的,如果我想从/usr/local/packages/etc目录进入到/usr/local/packages/bin目录,可以直接使用 cd ../bin ,这样非常的方便。

           ②、绝对路径的用途:绝对路径由于将路径全部完整的写出来了,所以是非常准确的。所以路径是写在 shell scripts 中的路径,那么最好使用绝对路径,虽然可能路径非常长,但是这种写法是绝对不会出错的。

      3、Linux中的基本命令介绍(非常重要!!!)

             这里注意一点:系统bin目录下和sbin目录下是存放“指令”对应的可“执行程序文件”目录,其中bin目录是所有用户都可以使用里面的命令,而sbin目录文件对应指令都是"root"用户可以执行的指令,普通用户不能使用该目录里的命令,所以普通用户和和root用户的开头是有区别的:

      • root用户:用#开头
      • 普通用户:用$开头

             下面来介绍Linux中的基本命令。

      4、用户与用户组管理

             用户、用户组和其他人的基本概念:

      • 用户:表示能够使用系统的用户。root也是用户的一种,只是它有着最高的权限。
      • 用户组:表示用户的一个集合,不同组的用户对文件的权限是不一样的。
      • 其他人:顾名思义,它是能够使用系统的用户,但是没有加入任何用户组。

             ========================

             关于他们的一些基本命令:

             1)、useradd:命令用于创建新的用户,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。。

             语法格式为:useradd [选项] 用户名

             常用选项:

      • -d  指定用户的家目录(默认为/home/username)
      • -e  账户的到期时间,格式为YYYY-MM-DD.
      • -u  指定该用户的默认UID
      • -g  指定一个初始的用户基本组(必须已存在),格式为:useradd –g 用户组 用户名
      • -G  指定一个或多个扩展用户组
      • -N  不创建与用户同名的基本用户组
      • -s  指定该用户的默认Shell解释器

             简单举例:

      image

             在上面的命令中,表示创建一个普通用户并指定家目录的路径、用户的UID以及Shell解释器。这里注意/sbin/nologin,它是终端解释器中的一员,与Bash解释器有着天壤之别。一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中。

             然后用 id username 命令来查看用户的信息:

      image


             2)、password:用于修改用户密码、过期时间、认证信息等(root管理员在Linux系统中修改自己或他人的密码时不需要验证旧密码,这一点特别方便)。

             语法格式为:passwd [选项] [用户名]

             常用选项:

      • -l  锁定用户,禁止其登录
      • -u  解除锁定,允许用户登录
      • -d  使该用户可用空密码登录系统
      • -e  强制用户在下次登录时修改密码
      • -S  显示用户的密码是否被锁定,以及密码所采用的加密算法名称

             简单举例:

      image

      image


             3)、groupadd:命令用于创建用户组。

             语法格式为:groupadd [选项] 群组名

             常用选项:

      • -g  指定新用户组的组标识号(GID)。格式:groupadd -g 101 group
      • -o  一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

             创建用户组的步骤非常简单,例如使用如下命令创建一个用户组linuxgroup,简单举例:

      image


             4)、groupdel:用于删除创建的用户组。格式:groupdel  用户组名


             5)、groupmod:用于修改用户组。

             语法格式为:groupadd [选项] 用户组名

             常用选项:

      • -g  GID 为用户组指定新的组标识号。
      • -o  与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
      • -n  新用户组 将用户组的名字改为新名字

             简单实例(就不实际运行了):groupmod –g 10000 –n  group3 group2


             6)、usermod:命令用于修改用户的属性。

             语法格式为:usermod [选项] 用户名

             常用选项:

      • -c  填写用户账户的备注信息
      • -d –m  参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
      • -e  账户的到期时间,格式为YYYY-MM-DD
      • -g  修改用户所属的用户组id,即gid
      • -G  修改用户所属的用户组,即把用户追加到某些组中
      • -L  锁定用户禁止其登录系统
      • -U  解锁用户,允许其登录系统
      • -s  变更默认终端
      • -u  修改用户的UID

             简单举例:

             --将用户zhangsan加入到root用户组中,这样扩展组列表中则会出现root用户组的字样,而基本组不会受到影响:

      image

             --修改用户zhangsan的用户UID值:

      image


             7)、userdel:用于删除用户。

             语法格式为:userdel [选项] 用户名

             常用选项:

      • -f  强制删除用户
      • -r  同时删除用户及用户家目录

      image

             注意:一般在实际的删除用户时,都不会删除用户的home目录。

      5、文件的基本属性和权限

             在Linux系统中一切都是文件,但是每个文件的类型不尽相同,而且每个文件的访问权限也不相同,因此Linux系统使用了不同的字符来加以区分文件的类型访问权限,如下所示。

             我们查看跟目录下的所有文件:

      image

             这里就以home目录为例,下面来简单分析一下。

      image

             其中第一列代表这个文件的类型与权限,第一个字符代表这个文件的类型(目录、文件或链接文件等):

      • -:普通文件,如hello.txt。
      • d:目录文件。
      • l:链接文件。
      • b:块设备文件。
      • c:字符设备文件。
      • p:管道文件。

             后面的字符为3个一组,第一组为“文件所有者的权限”,即文件的所有者才能进行读写执行的操作。第二组为“用户组的权限”,只要是在这个组的用户都权限。第三组为“其它非本用户组的权限”。


             ----更改文件属性命令:

             1)、chgrp:更改文件所属用户组

             语法格式为:chgrp [-R] 属组名 文件名

             参数选项

      • -R:递归更改文件所属用户组,就是在更改某个目录文件的所属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

             2)、chown:更改文件所有者,也可以同时更改文件属组

             语法格式为:chown [–R] 属主名 文件名     或者      chown [-R] 属主名:属组名 文件名

             参数选项:

      • -R:递归更改文件所属用户组,就是在更改某个目录文件的所属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。


             3)、chmod:更改文件的权限

             语法格式为:chmod [选项] 文件名

             文件权限的设置方法有两种,分别是使用数字和符号来进行权限更改,推荐使用数字,现在我们来学习:

             ①、数字类型改变文件权限

             Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。先复习一下刚刚上面提到的数据:文件的权限字符为:[-rwxrwxrwx] , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

      • r:4
      • w:2
      • x:1
      • -:0

             每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx---] 分数则是:

      • owner = rwx = 4+2+1 = 7
      • group = rwx = 4+2+1 = 7
      • others= --- = 0+0+0 = 0

             所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:

             # chmod [-R] xyz 文件或目录

             选项与参数:

      • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
      • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

             简单举例:

             假如将文件权限改为:[-rwxr-xr],可以发现有些权限没有,那么权限的分数则为:[4+2+1][4+0+1][0+0+0]=750,所以执行:chmod  750 filename。

             ===============================

             ②、数字类型改变文件权限

             还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:

      • user:用户
      • group:组
      • others:其他

             那么我们就可以使用 u, g, o 来代表三种身份的权限。此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

      image

             来实践一下:

             如果我们需要将文件权限设置为 [-rwxr-xr--] ,可以使用 chmod u=rwx,g=rx,o=r filename 来设定。

             如果我们需要将文件权限均设置为可写,可以使用 chmod a+w filename 来设定。

             如果我们需要将文件权限去掉而不更改其它的属性,可以使用 chmod a-x filename 来设定。

      6、文件与目录管理

             1)、cd:[change directory] 切换工作目录。

             语法格式为:cd [目录名]

             例如:

      • cd .. :进入上一层目录
      • cd /tmp:进入tmp目录
      • cd ~:进入当前用户的home目录(或者使用cd ~ username进入到其它用户的home目录)


             2)、pwd:[print working directory] 打印当前工作目录。

             语法格式为:pwd

             只要输入pwd命令就可以打印当前目录,例如:

      image


             3)、ls:[list] 打印当前所有目录和文件。

             语法格式为:ls [选项] [目录或文件名]

             注意:如果ls 命令后边是目录,会显示目录下包含的文件信息,如果是文件名则会显示该文件的信息,如果没有跟任何参数则显示当前工作目录下包含的文件信息。

             常用选项:

      • -a  显示所有文件,包括隐藏文件
      • -l   以长格式显示目录或文件的信息
      • -d  只显示目录本身的信息,不显示目录下包含的文件
      • -h  human readable,用人性化显示的形式查看,比如以 K (KB),M (MB),G(GB)表示文件大小

             =======================

             简单举例:

      image


             4)、mkdir:[make directory] 创建目录。

             语法格式为:mkdir [选项] 目录名

             常用选项:

      • -p  可以用于创建嵌套的多级目录(重要!)


             5)、cp:[copy] 复制文件或目录

             语法格式为:cp [选项] 源文件或目录 目标文件或目录

             常用选项:

      • -a  相当于-pdr 连在一起使用
      • -p  连同文件的属性一起复制过去,而非使用默认的属性(备份常用)
      • -d  如果源文件为连接文件的属性,则复制连接文件属性而非文件本身
      • -r  递归复制,用于目录的复制
      • -i  如果目标文件已经存在,在覆盖是会先询问操作的进行。

             6)、mv:[move] 移动文件或目录

             语法格式为:mv [选项] 源文件或目录 目标文件或目录

             常用选项:

      • -f  force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
      • -i  如果目标文件已经存在是,就会询问是否覆盖


             7)、rm:[remove] 删除文件或目录

             语法格式为:rm [选项] 文件或目录

             常用选项:

      • -r  如果删除的是一个目录,则必须使用这个选项
      • -f  强制删除,无须用户确认
      • 一般删除目录时,两个选项会同时使用 -rf,但是建议删除前先用 mv 命令将待删除的目录移动到一个指定的回收目录中去,等过一段时间确认不再需要这些文件和目录,再使用 rm 命令将其删除。
      • -i  在生成前会询问用户是否操作


             8)、touch:用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

             语法格式为:touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

      • -a 改变档案的读取时间记录。
      • -m 改变档案的修改时间记录。
      • -c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
      • -f 不使用,是为了与其他 unix 系统的相容性而保留。
      • -r 使用参考档的时间记录,与 --file 的效果一样。
      • -d 设定时间与日期,可以使用各种不同的格式。
      • -t 设定档案的时间记录,格式与 date 指令相同。
      • --no-create 不会建立新档案。
      • --help 列出指令格式。
      • --version 列出版本讯息。

      7、关机、重启与sync

             关机、重启的命令有:shutdown、reboot、halt、poweroff。其中关机命令用的最多的是shutdown,重启用reboot,所以我们通常只用记住shutdown和reboot这两个目录即可。因为Linux系统的关机、重启是比较重要的操作,所以只有root权限才能操作shutdown、reboot等命令。

             1)、shutdown:将系统关机或者重启。

             语法格式为:shutdown  [选项]  时间  警告

             常用选项:

      • -h  将系统的服务停掉后,立即关机。
      • -r  将系统的服务停掉后就重启。
      • -t sec  sec表示秒,即系统过多少秒后关机。
      • -c  取消已经在进行的shutdown命令内容。


             简单举例:

      1. shutdown  -t 30:表示30秒之后自动关机。
      2. shutdown  -h  now:表示立刻关机。
      3. shutdown  -h 20:15:表示在具体的20:15分会关机,如果在21:15才设置该命令,则隔天才关机。
      4. shutdown  -h +10:表示10分钟后自动关机。
      5. shutdown  -r  now:表示立刻重启。
      6. shutdown  -r  +30  'The system wil reboot after 30 minute':表示30分钟后系统会重启,并且后面的警告信息会给所有在线的用户。

             =============================================

             2)、reboot:将系统重启,等同于 shutdown –r now


             3)、halt:将系统关机,等同于shutdown –h now 和 poweroff


             4)、sync:将数据由内存同步到硬盘中。目前shutdown、reboot、halt等命令在关机是都会调用sync这个工具,但是你如果不放心也可以自己多次执行这个目录。

      8、重定向与追加

             linux中经常会用到将内容输出到某文件当中,只需要在执行命令后面加上>或者>>号即可进入操作。

      • >:将一条命令执行的结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等),重定向文件时,覆盖文件原有内容
      • >> :将一条命令执行的结果追加到其它输出设备

             注意:这两个语法在Shell编程中非常有用,所有我们必须要理解。

            简单举例:

      image


             更多的Linux命令学习可以参考:https://www.runoob.com/linux/linux-command-manual.html

    1. 相关阅读:
      做了48小时爸爸的感觉!
      利用Session和HashTable制作购物车
      vs2005控件演示之 Literal
      vs2005/.net2.0 控件实例之 下拉列表《DropDownList》
      vs2005/.net2.0 控件实例之 单选按纽和复选框 <RadioButton><CheckBox>
      vs2005/.net2.0 控件实例之 单选列表和复选列表
      一个被大多数初级程序员忽略的安全问题 [严重]
      使用Northwind和Entity框架的ASP.NET MVC实例发布
      对话Spring.NET
      揭开HTML 5工作草稿的神秘面纱
    2. 原文地址:https://www.cnblogs.com/tanghaorong/p/14099917.html
    Copyright © 2011-2022 走看看