• 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. 相关阅读:
      Neural Collaborative Filtering
      Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
      Statistical Comparisons of Classifiers over Multiple Data Sets
      Data Poisoning Attacks on FactorizationBased Collaborative Filtering
      Markov Chain
      Adversarial Personalized Ranking for Recommendation
      常见网络协议
      Python3 JWT的生成与验证
      Python3函数中如何理解递归
      Python3使用re模块解析正则表达式
    2. 原文地址:https://www.cnblogs.com/tanghaorong/p/14099917.html
    Copyright © 2020-2023  润新知