Linux基础

知识点


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

linux简介


linux是什么

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


Linux基础_第1张图片
操作系统的角色
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 的树状目录绘制成下图:

Linux基础_第2张图片
目录树.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

Linux基础_第3张图片

  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。

Linux基础_第4张图片

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

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

Linux基础_第5张图片

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

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

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

Linux基础_第6张图片

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

Linux基础_第7张图片

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

  1. ls
    检视文件与目录

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

ls (选项) (参数)
选项

  1. 无选项:列出当前目录的文件或目录名,看不到其他信息输出
  2. -a :显示隐藏文件。在linux中,以“.”开头的文件是隐藏文件。
    Linux基础_第8张图片

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

解析:
第一列:表示文件的属性,第一个字母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 的意思了!
Linux基础_第10张图片
  1. chgrp
    改变文件或目录所属的用户组。文件名可以是由空格分开的文件列表,也可以是由通配符描述的文件集合。只有文件的拥有者和root才有权修改文件所属群组;文件拥有者只能修改文件的群组为自己所属群组。要注意的是,要改变成为的群组必须是在 /etc/group 里面存在的名称才行,否则就会显示错误!

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

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

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

Linux基础_第11张图片

  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基础_第12张图片

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

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

  • 目录属性的意义
    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 与能否进入该目录有关

Linux基础_第16张图片

Linux基础_第17张图片

Linux基础_第18张图片


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

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

你可能感兴趣的:(Linux基础)