Linux基础

作者: 要有多勇敢 | 来源:发表于2018-03-06 09:25 被阅读0次

    知识点


    • linux是什么
    • linux历史
    • linux目录配置
    • linux用户和组的概念
    • linux基础命令:groupadd、useradd、passwd、userdel、su、ls、chgrp、chown、chmod
    • 目录属性的意义

    linux简介


    linux是什么

    就像我们了解的Windows和Mac OS,linux也是一个操作系统。如下图,linux就是系统调用接口和内核那两层。


    操作系统的角色
    linux历史简介
    • 操作系统始于二十世纪五十年代,当时的操作系统能运行批处理程序。批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个文件或者打印机。
    • 1960年初期麻省理工学院(MIT)发展了所谓的“兼容分时系统”,他可以让多个用户从不同终端联机进入主机,来利用主机的资源进行运算工作。要注意的是,这时的终端机只有输入和输出的功能,本身并不具备任何运算和软件安装能力,而且,比较先进的主机也只能提供30个不到的终端机
    • 1965年前后,由贝尔实验室(Bell)、麻省理工学院(MIT)以及奇异公司(GE)共同发起了Multics计划,目的是想让大型主机可以达成提供300个以上的终端机联机使用的目标。但由于资金短缺,计划进度落后,贝尔实验室退出计划。他们退出后,开发了自己的一个操作系统----unix
    • 1979年,美国电信大厂AT&T推出System V第七版unix,此版最重要的特色是可以支持x86架构的个人计算机系统。同时AT&T出于商业考虑,进行了版权宣告,特别提到了“不可对学生提供原始码”的严格限制。
    • 1984年,在学校教授Unix核心原始码的Andrew Tanenbaum为避免版权纠纷,开始撰写Minix这个类Unix操作系统,于1986年完成。
    • 1991 年 10 月,Linus Torvalds(Linux 之父)在赫尔辛基大学接触 UNIX,他希望能在自己的电脑上运行一个类似的操作系统。可是 UNIX 的商业版本非常昂贵,于是他从 MINIX 开始入手,计划开发一个比MINIX 性能更好的操作系统。他参考Minix的设计理念与书上的程序代码,仔细研究386个人计算机的效能优化,然后使用GNU [1] 的自由软件将核心程序代码和386紧紧地结合在一起,最终写出了他所需要的核心代码。他将此核心放置在网络上供大家下载,由于Torvalds放置核心的那个FTP网站目录为linux,大家便将这个核心称为linux了。同时,Torvalds为了让自己的Linux能够兼容于Unix系统,他开始参考标准的POSIX [2]规范修改Linux,如此一来,Linux很容易与Unix兼容共享互有的软件,并且linux直接放置在网络上供大家下载,所以流通很快,使用率大增。
    • 1992-1993 年,Linux 内核具备了挑战 UNIX 的所有本质特性,包括 TCP/IP 网络,图形界面系统(X window ),Linux 同样也吸引了许多行业的关注。一些小的公司开始开发和发行 Linux,有几十个 Linux 用户社区成立。1994 年,Linux 杂志也开始发行。
    • 1994 年 3 月, Linux 内核发布,内核的发布要经历许多开发周期,直至达到一个稳定的版本。
    • 1996 年,Torvalds 发布 Linux-v2.0,确定了 Linux 的吉祥物:企鹅。
    linux distribution

    通过上面的说明,我们知道了 Linux 其实就是一个操作系统最底层的核心及其提供的核心工具,任何人均可取得核心码与可执行这个核心程序,并且可以修改。此外,由于linux参考POSIX设计规范,于是 兼容UNIX操作系统,故可称为Unix Like的一种。
    为了让一般使用者能够接触到linux,很多的商业公司和非盈利团体,就将linux kernal(含tools)与可运行的软件整合起来,加上自己具有创意的工具程序,这个工具程序可以让用户以光盘/DVD或者透过网络直接安装和管理linux系统。这个kernal+softwares+tools的可完全安装,我们称其为linux distribution(可完全安装套件、linux发布商套件)

    linux的目录配置


    对于linux来说,所有的程序和系统装置都是文件,一切都是文件。

    linux目录配置的依据---FHS

    由于利用 Linux 来开发产品或distributions 的社群/公司与个人很多,若是每个人都用自己的想法来配置文件放置的目录,就会造成个人不能使用他人的linux系统的PC。因为你根本不知道一些基本的配置,文件在哪里,这就造成了混乱。所以,就有所谓的Filesystem Hierarchy Standard(FHS)标准出炉了。
    也就是说,FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。
    事实上,这个 FHS仅是规范出在根目录 ( / ) 底下各个主要的目录应该是要放置什么样的文件而已。 FHS 定义出两层规范出来,第一层是 / 底下的各个目录应该要放置什么样内容的文件数据,例如 /etc 应该要放置设定档, /bin 与 /sbin 则应该要放置可执行档等等。第二层则是针对 /usr 及 /var 这两个目录的次目录来定义的。 例如 /var/log 放置系统登录文件、 /usr/share放置共享数据等等。

    目录配置的内容

    在一个文件系统中,我们总有一个被称为根目录的东西,这个根目录里包含了所有其他目录和文件。
    在Windows中,可以有好几个根目录,比如说C盘(C:\)是你的硬盘的根目录,H盘可能是你的光盘驱动器的根目录。
    Linux中有且只有一个根目录,就是 / 。

    Windows中是用反斜杠 \ 来标明目录的层级与包含关系的。

    windows的目录结构.png
    而在Linux中,是用斜杠 / 来表示目录的层级与包含关系的。 linux目录结构.png

    如果以较为完整的树状目录来视察的话, 可以将整个 Linux 的树状目录绘制成下图:

    目录树.png
    下面简单说下几个 FHS 定义出来的目录内应该放置的文件内容,详细请点击:
    linux文件权限与目录配置查看
    • / :根目录 root (/),一般建议在根目录底下只接目录,文件不要直接在 / 底下。
    • /boot—引导加载程序文件 :主要放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需设定档等等。 Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录!
    • /dev—设备文件 :在Linux系统上,任何装置与周边设备都是以文件的型态存在于这个目录当中。 只要通过存取这个目录下的某个文件,就等于存取某个装置。
    • /bin—用户二进制文件 :系统的所有用户使用的命令都设在这里,例如:ps,ls,ping,grep,cp等。
    • /sbin—系统二进制文件 :放置一些系统管理员才会动用到的执行指令,对系统进行维护。例如: fdisk, mke2fs, fsck,mkswap, mount 等等。
    • /etc—配置文件 :系统主要的设定文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有 root 有权力修改。
    • /var—变量文件 :主要放置的是针对系统执行过程中, 常态性变动的文件放置的目录。举例来说,例如快取文件(cache) 或者是随时变更的登录档文件(log file) 都是放在这个目录中的。此外,某些软件执行过程中会写入的数据库文件, 例如 MySQL 数据库,也都写入在这个目录中!
      /var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。
    • /usr—用户文件 :主要放置系统的主要程序、 图形接口所需要的文件、额外的函式库、本机端所自行安装的软件,以及共享的目录与文件等等。事实上,他有点像是 Windows 操作系统当中的Program files与WinNT这两个目录的结合!
      /usr/bin存放应用程序,/usr/share存放共享数据,/usr/lib存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc:系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录
    • /home—用户家目录 :这是系统预设的使用者家目录 (home directory)。在你新增一个一般使用者账号时, 预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:
      ~:代表目前这个使用者的家目录,而
      ~dmtsai :则代表 dmtsai 的家目录!

    Linux用户和组的概念


    Linux多用户、多任务的特性

    Linux是一个真实的、完整的多用户多任务的操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一系统执行各自不同的任务,而互不影响。例如某台Linux服务器上有4个用户,分别是root、www、ftp和MySQL,在同一时间内,root用户可能在查看系统日志,管理维护系统;www用户在修改自己的网页程序;FTP用户可能在上传软件到服务器;MySQL用户在执行自己的sql查询,每个用户互不干扰,有条不紊地进行着自己的工作,而每个用户不能越权访问,比如www用户不能执行MySQL用户的查询操作,FTP用户不能修改www用户的网页程序,由此可知,不同用户具有不同的权限,每个用户在权限允许的范围内完成不同的任务,Linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

    Linux下角色的分类

    Linux下用户是根据角色定义的,具体分为三种角色:
    超级用户:系统管理员,拥有对系统的最高管理权限,默认是root用户
    普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如上面的www、FTP用户等
    虚拟用户:也叫“伪”用户,这类用户最大的特点就是不能登录系统,他们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等,一般运行的web服务,默认就是使用的nobody用户,但是nobody用户是不能登录系统的。

    用户和组的概念

    Linux是一个多用户多任务的分时操作系统,如果要使用系统资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统。这个账户和用户是一个概念,通过建立不同属性的用户,一方面,可以合理的利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
    每个用户有用一个唯一的用户名和用户口令。
    用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法就是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有的用户就具有了和组一样的权限,这就是用户组。用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很大程度上简化了管理工作。

    用户和组的关系

    用户和用户组的关系有:
    一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员
    一对多:即一个用户可以存在多个用户组中,那么此用户具有多个组的共同权限。
    多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限
    多对多:多个用户可以存在多个组中。

    linux常用基础命令


    linux的语言是c语言写的,c语言是严格区分大小写的,linux命令中大小写也是完全不同的。

    终端展现:
    登录linux终端后,linux默认的命令行提示信息的格式:


    意思是:[当前用户的账号名称@主机名的第一个名字 工作目录的最后一层目录名]提示字符
    如果是root用户,提示字符是#,如果是普通用户,提示字符是:$
    1. groupadd
      用于创建一个新的工作组。用户组的所有信息都存放在/etc/passwd

    groupadd (选项) (参数)
    选项
    -g:指定新建工作组的id;
    -r:创建系统工作组,系统工作组的组ID小于500;
    -o:允许添加组ID号不唯一的工作组。
    参数
    组名:指定新建工作组的组名。
    实例:建立一个新组,并设置组ID

    1. useradd
      用于创建的新的系统用户,使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。

    useradd (选项) (参数)
    选项
    -d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
    -g 用户组 指定用户所属的用户组。值可以是组名也可以是GID。用户组必须已经存在的。默认值为100,即users。
    -G 用户组,用户组 指定用户所属的附加组。
    -m:自动建立用户的登入目录。
    参数
    用户名:要创建的用户名。
    实例:创建一个新用户test1,指定其主目录为/tmp/test1,主要组为users,次要组为tmn、liuth

    1. passwd
      用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

    passwd (选项) (参数)
    选项
    -d:删除密码,仅有系统管理者才能使用;当我们清除一个用户的密码后,此用户登录时就无需密码。
    -k:设置只有在密码过期失效后,方能更新;
    -l:锁住密码;仅有系统管理者才能使用;
    -s:列出密码的相关信息,仅有系统管理者才能使用;
    -u:解开已上锁的帐号。仅有系统管理者才能使用;
    参数
    用户名:需要设置密码的用户名。
    实例
    root修改新用户的密码,直接passwd 用户名即可;普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是test1。

    1. userdel
      用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

    userdel (选项) (参数)
    选项
    -f:强制删除用户,即使用户当前已登录;
    -r:删除用户的同时,删除与用户相关的所有文件。
    参数
    用户名:要删除的用户名。
    实例:删除lth用户及其家目录及文件一并删除

    1. su
      用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

    su (选项) (参数)
    说明:小括号()代表非必填,都不填时,默认切换到root
    选项
    -c<指令>或--command<指令>:执行完指定的指令后,即恢复原来的身份;
    参数
    用户:指定要切换身份的目标用户。

    实例 : 变更帐号为root并在执行ls指令后退出变回原使用者:
    su -c ls root

    注意
    su 和su - 都是切换到用户root的命令
    su – root 是切换到root账号使用,使用的是root用户的环境变量
    su root 则是取得root的特权,以root的身份执行程序,但保留原来的用户环境

    说明:有些命令即使你使用su root 切换到root用户,仍无法执行。所以还是建议使用su – root

    1. ls
      检视文件与目录

    在学习ls命令之前,我们先了解一下文件拥有者、文件所属群组、其他人的概念
    linux的每个文件中,依据权限分为拥有者,文件所属群组与其他人三种身份,即每种身份对此文件的权限不同,例如文件使用者可以对文件内容增删改查、所属群组里的人员只能查看此文件的内容,而其他人完全不能查看文件内容
    其实群组很有效的功能之一就是团队开发资源。
    举个例子来说好了,假如在我的主机上面有两个项目组,第一个项目组名称为 A,他的成员有A1、 A2、A3 ,第二个项目组名称为B,他的成员为 B1, B2,B3,这两个项目组需要各自管理自己组的项目资源和成果,组内成员可以查看和修改自己所属组内的成果, 且不能让非项目组的其它人看到本项目的资源和成果!这个时候怎么办?
    在 Linux 底下可就很简单!我们可以经由简易的文件权限设定,就能限制非自己团队( 群组 )的其它人不能够阅览内容!而且也可以让自己的团队成员可以修改我所建立的文件! 同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的文件数据。

    ls (选项) (参数)
    选项

    1. 无选项:列出当前目录的文件或目录名,看不到其他信息输出
    2. -a :显示隐藏文件。在linux中,以“.”开头的文件是隐藏文件。
      从上图可以看到,linux预设中,ls 显示结果以不同的颜色来区分文件类别。深蓝色代表目录,灰色代表普通文件,绿色代表可执行文件,红色代表压缩文件,浅蓝色代表链接文件
      我们也可以让ls显示的结果不依据文件的特性来颜色显示,使用如下参数
    3. --color=never:不依据文件的特性来颜色显示
      --color=always:显示颜色
      --color=auto:系统自行依据设定来判断是否显示颜色
    4. -d:只显示目录
    5. -R:递归列出子目录
    6. -l :会显示当前目录的长列表
      一共7列,每列含义如下:
      文件的属性 文件数 拥有者 所属的group 文件的大小 建档日期 文件名

    解析:
    第一列:表示文件的属性,第一个字母d意味着内容是目录;如果是“-”(减号),意味着他的内容是文件;如果是l(L),意味着这是链接文件;b意味着内容是设备文件;c意味着为装置文件里的串行端口设备,例如鼠标、键盘。
    后面的9个字符是关于文件权限的,linux文件基本分为3个属性:r:可读、w:可写、X:可执行。前三个rwx字符是文件的拥有者的权限,第二组rwx是文件的所有组的权限,最后的rwx是对其他人访问文件的权限。如果是“-”(减号),意味着角色没有此权限。
    第二列:表示文件个数。如果是文件的话,自然是1,如果是目录的话,那么他的个数就是该目录下的文件的个数。
    第三列:表示所属的用户
    第四列:表示所属的组
    第五列:表示文件的大小。用byte(字节)表示。而空目录一般是1026byte,也可以使用其他参数是文件显示的单位不同,如使用ls –k就是用kb来显示一个文件的大小单位。
    第六列:表示最后修改日期。以“月 日 时间”格式表示。

    ls 最常被使用到的功能还是那个 -l 的参数,为此,很多 distribution 在预设的情况中, 已经将 ll (L 的小写) 设定成为 ls -l 的意思了!
    1. chgrp
      改变文件或目录所属的用户组。文件名可以是由空格分开的文件列表,也可以是由通配符描述的文件集合。只有文件的拥有者和root才有权修改文件所属群组;文件拥有者只能修改文件的群组为自己所属群组。要注意的是,要改变成为的群组必须是在 /etc/group 里面存在的名称才行,否则就会显示错误!

    chgrp (选项) 新组 目录名/文件名
    选项
    -R或--recursive:递归处理,将制定目录下的所有文件及子目录一并处理;常用在变更某一目录的情况
    注意

    • 新组:可以是组ID也可以是组名,但必须存在
    • 目录名/文件名:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
    1. chown
      改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,用户组可以是组名或组ID。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
      只有root才可以使用该命令

    chown(选项) 账号名称 文件或者目录
    chown(选项) 账号名称:群组名称 文件或者目录
    选项
    -R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

    1. chmod
      变更文件与目录的权限,设置方式采用符号或数字代号皆可。文件拥有者和root均有此命令的权限。
    • 数字类型改变文件权限
      linux文件的基本属性有9个,分别是 owner/group/others 组别的read、write、excute 属性:-rwxrwxrwx
      这九个属性是三个三个一组!其中,我们可以使用数字来代表各个属性,各属性的对照表如下:r:4 w:2 x:1
      同一组 (owner/group/others) 的三个属性 (r/w/x) 是需要累加的,例如当属性为 [-rwxr-xrw-] 则是:
      owner=rwx=4+2+1=7 group=r-x=4+0+1=5 other=rw-=4+2+0=6
      所以设定属性的变更时,该属性的数字就是756了,变更属性的指令 chmod 的语法是这样的:

    chmod (选项) xyz 文件或者目录
    选项
    -R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理

    • 符号类型改变文件权限
      linux文件的9个基本属性,分别是 1)user、 2)group、3)others 3个群。那么就用u、g、o来代表这三个群的属性。此外,a代表all,即全部的三群。也就是可以用下面的方式来修改权限:

      例如:修改一个文件的属性为“-rwxr-xr-x ”
      分析:
      user(u):具有可读、可写、可执行的权限
      group(g)和others(o):都具有可读和执行的权限
      请注意, u=rwx,og=rx 这一段文字之间并没有空格符隔开
      当只想增加或者删去文件的某个属性时,可以使用

    • 目录属性的意义
      r(read contents in directory):表示具有读取目录结构清单的权限,所以当您具有读取 (r)一个目录的权限时, 您就可以利用 ls 这个指令将该目录的内容列表显示出来!
      w(modify contents of directory):具有异动该目录结构清单的权限,也就是底下这些权限:
      1、建立新的文件与目录
      2、删除已经存在的文件和目录(不论该文件是谁的)
      3、将已存在的文件或目录更名
      4、搬移该目录内的文件、目录的位置
      注意:如果一个用户对某目录A有w的权限,但是对此目录A下的某个不为空目录B没有w的权限,则此用户是不能删除目录B的

    x(access directory):x 与能否进入该目录有关




    1. GNU计划由Richard Mathew Stallman在1984年发起,目的是建立一个自由、开放的UNIX操作系统。此计划对于现今的自由软件风潮,有不可磨灭的地位。

    2. POSIX 是一种标准规范,主要针对在 Unix 操作系统上面跑的程序来进行规范。 若您的操作系统符合 POSIX ,则符合 POSIX 的程序就可以在您的操作系统上面运作。 Linux 由于支持 POSIX ,因此很多 Unix 上的程序可以直接在 Linux 上运作, 因此程序的移植相当简易!也让大家容易转换平台,提升 Linux 的使用率。

    相关文章

      网友评论

        本文标题:Linux基础

        本文链接:https://www.haomeiwen.com/subject/sdgaxftx.html