Linux就是操作系统,与平常使用的Windows以及Mac OS类似。
Linux主要是系统调用和内核那两层。当然,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。
1969 年,Ken Thompson(C 语言之父)利用汇编语言开发了 File Server System(Unics,即 UNIX 的原型);
1973 年,Dennis Ritchie 和 Ken Thompson 发明了 C 语言,而后写出了 UNIX 的内核;
1984 年,因为 UNIX 规定“不能对学生提供源码”,Tanenbaum 老师自己编写兼容于 UNIX 的 Minix,用于教学;
1984 年,Stallman 开始 GNU(GNU’s Not Unix)项目,创办 FSF(Free Software Foundation)基金会;
1991 年 10 月,Linus Torvalds(Linux 之父)从 MINIX 开始入手,计划开发一个比 MINIX 性能更好的操作系统,即Linux。
C语言与Unix之父:Dennis Ritchie 和 Ken Thompson
Linux之父:Linus Torvalds
相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux 上的这套软件以前是 XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为 X11 或 X)实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache 。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境 KDE,GNOME,XFCE,LXDE 。其中就有你看到的,实验楼目前使用的 XFCE 桌面环境。
在 Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。
通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),不过这里所说的终端(Terminal)和控制台(Console)是有区别的。
在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME)。
在 linux 中,最最重要的就是命令。
按键 | 作用 |
---|---|
Tab | 命令补全 |
Ctrl+c | 强行终止当前程序 |
Ctrl+d | 键盘输入结束或退出终端 |
Ctrl+s | 暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z | 将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a | 将光标移至输入行头,相当于Home键 |
Ctrl+e | 将光标移至输入行末,相当于End键 |
Ctrl+k | 删除从光标所在位置到行末 |
Alt+Backspace | 向前删除一个单词 |
Shift+PgUp | 将终端显示向上滚动 |
Shift+PgDn | 将终端显示向下滚动 |
按键 | 作用 |
---|---|
* | 匹配 0 或多个字符 |
? | 匹配任意一个字符 |
[list] | 匹配 list 中的任意单一字符 |
[^list] | 匹配 除 list 中的任意单一字符以外的字符 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z] |
{string1,string2,…} | 匹配 string1 或 string2 (或更多)其一字符串 |
{c1…c2} | 匹配 c1-c2 中全部字符 如{1…10} |
使用通配符可以一次创建多个文件,如图所示:
man man
命令,终端中会出现如下界面区段 | 说明 |
---|---|
1 | 一般命令 |
2 | 系统调用 |
3 | 库函数,涵盖了 C 标准函数库 |
4 | 特殊文件(通常是/dev 中的设备)和驱动程序 |
5 | 文件格式和约定 |
6 | 游戏和屏保 |
7 | 杂项 |
8 | 系统管理命令和守护进程 |
通常 man 手册中的内容很多,你可能不太容易找到你想要的结果,不r过幸运的是你可以在 man 中使用搜索 /<你要搜索的关键字>
,查找完毕后你可以使用n
键切换到下一个关键字所在处,shift+n
为上一个关键字所在处。使用Space
(空格键)翻页,Enter
(回车键)向下滚动一行,或者使用k
,j
(vim 编辑器的移动键)进行向前向后滚动一行。按下h
键为显示使用帮助(因为 man 使用less
作为阅读器,实为less
工具的帮助),按下q
退出。
想要获得更详细的帮助,你还可以使用info
命令,不过通常使用man
就足够了。如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用,那么你可以使用--help
参数,大部分命令都会带有这个参数。
可以输出图形字符的命令banner
先使用sudo apt-get install sysvbanner
命令安装banner
类似的命令还有toilet
,其效果如图
Linux 是一个可以实现多用户登录的操作系统,比如“李雷”和“韩梅梅”都可以同时登录同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制,不同用户不可以轻易地查看、修改彼此的文件。
在终端中输入who am i或者who mom likes以及who可以查看表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),需要注意的是,在某些环境中 who am i 和 who mom likes 命令不会输出任何内容,这是因为当前使用的 Shell 不是登录式 Shell(login shell),没有用户与 who 的 stdin 相关联,因此不会输出任何内容。如图所示为虚拟机终端的命令输入结果:
参数 | 说明 |
---|---|
-a |
打印能打印的全部 |
-d |
打印死掉的进程 |
-m |
同am i ,mom likes |
-q |
打印当前登录用户数及用户名 |
-u |
打印当前登录用户登录信息 |
-r |
打印运行等级 |
在 Linux 系统里, root 账户拥有整个系统至高无上的权限,即root权限,比如新建和添加用户。
root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,这个操作等同于在 Windows 下就是将新建的非法帐户添加到 Administrators 用户组。更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。
关于root权限,有三个命令,su
、su-
以及sudo
,su
可以切换到用户 user,执行时需要输入目标用户的密码,sudo
可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。su -
命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
在终端中输入sudo adduser lilei
,即可新建一个叫lilei用户,设置lilei用户的用户密码,如图所示:
这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:
输入命令su -l lilei可以切换登录用户至lilei,输入exit命令或者使用快捷键Ctrl+d可以退出当前用户
在 Linux中想要知道自己属于哪个用户组有两个方法。
方法一: 使用 groups
命令,如图所示:
方法二: 查看 /etc/group
文件
在终端输入cat /etc/group | sort
,可以看到用户组信息:
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:
使用 usermod
命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。在终端中输入sudo usermod -G sudo lilei
可以将lilei加入sudo用户组:
此时再切换为lilei用户便也可以使用sudo命令了,如图所示:
删除用户十分简单,在终端中输入sudo deluser lilei --remove-home
便可以删除用户lilei,如图所示:
使用 --remove-home
参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。删除用户组可以使用 groupdel
命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。
Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
在终端中输入ls -l
使用较长格式列出文件,如图所示:
现在切换到lilei用户(删除后重新添加),在终端中输入如图所示命令,然后在 /home/lilei 中目录新建一个文件,命名为qwe
,可见文件所有者是 lilei:
切换回sudo用户,输入如图所示命令将qwe文件的所有者更改为sudo用户:
方法一:二进制数字表示
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7。例如我们刚刚新建的文件 qwe的权限是 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。
如果我要将文件qwe的权限改为只有我自己可以用那么就可以用这个方法更改它的权限。如图所示,可以看到修改文件权限之后lilei已经无法读写qwe文件了:
要完成上述操作,也可以在终端中输入chmod go-rw qwe
命令,其中g
、o
还有u
分别表示 group(用户组)、others(其他用户) 和 user(用户),+
和 -
分别表示增加和去掉相应的权限。
adduser
和 useradd
的区别useradd
只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd
去设置新用户的密码。adduser
在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd
、userdel
这类操作更像是一种命令,执行完了就返回。而 adduser
更像是一种程序,需要你输入、确定等一系列操作。
添加一个用户 loutest
,使用 sudo
创建文件 /opt/forloutest
,设置成用户 loutest
可以读写。
首先添加新用户loutest
,将其加入sudo
用户组,使用sudo touch /opt/forloutest
命令创建文件,如图所示:
在终端中输入下图中命令,可以看到用户loutest
对于forloutest
文件只有读的权限:
切换回root用户,使用sudo chmod 666 /opt/forloutest
命令便可以修改文件forloutest
的权限,在下图中可以看到修改权限之后,用户loutest
对文件forloutest
有了读写权限:
虽然之前接触过Linux操作系统以及Ubuntu,但是第一次系统的学习Linux的相关知识还是很有收获,尤其是在用户、用户组和文件权限等方面,更是获益匪浅。在之后我会跟着老师以及实验楼中的课程更加深入的学习Linux的相关知识,需要多多努力。