Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Mac OS 。至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有个基本概念了,这里简单介绍一下操作系统在整个计算机系统中的角色。
我们的 Linux 主要是系统调用和内核那两层。当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。
或许你之前不知道 Linux ,要知道,你之前在 Windows 使用百度、谷歌,上淘宝,聊 QQ 时,支撑这些软件和服务的,是后台成千上万的 Linux 服务器主机,它们时时刻刻都在忙碌地进行着数据处理和运算,可以说世界上大部分软件和服务都是运行在 Linux 之上的。
通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面是几个比较常见的终端模拟器: gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm 。目前我们的实验中的终端程序是 xfce 桌面环境自带的 xfce-terminal 。不过要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。
通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而是这个 Shell(壳)。有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe 。普通意义上的 Shell 就是可以接受用户输入命令的程序。它之所以被称作 Shell 是因为它隐藏了操作系统底层的细节。同样的 UNIX/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。
UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。当然这一点也有别于 Windows 下的命令行,虽然该命令行也提供了很简单的控制语句。在 Windows 操作系统下,有些用户从来都不会直接使用 Shell,然而在 UNIX 系列操作系统下,Shell 仍然是控制系统启动、X11 启动和很多其它实用工具的脚本解释程序。
在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是 zsh 和 xfce。
在linux中,最最重要的就是命令,常用命令如下:
#创建一个名为文件,touch是一个命令
touch file
#进入一个目录,cd是一个命令
cd /etc/
#查看当前所在目录
pwd
#进入上一级目录
cd ..
#进入你的 home 目录:
cd ~
# 绝对路径
$ cd /usr/local/bin
# 相对路径
$ cd ../../usr/local/bin
#创建名为 test 的空白文件
touch test
#创建名为“ mydir ”的空目录:
mkdir mydir
#使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在安装软件、配置安装路径时非常有用):
mkdir -p father/son/grandson
#将之前创建的“ test ”文件复制到“ /home/shiyanlou/father/son/grandson ”目录中:
$ cp test father/son/grandson
#使用 rm(remove files or directories)命令删除一个文件:
rm test
#使用 mv(move or rename files)命令移动文件(剪切)。将文件“ file1 ”移动到 Documents目录:mv 源目录文件 目的目录:
$ mkdir Documents
$ mv file1 Documents
#将文件“ file1 ”重命名为“ myfile ”:mv 旧的文件名 新的文件名:
$ mv file1 myfile
#创建一个 python 脚本文件:
$ gedit hello_shell.py
#将 shiyanlou.zip 解压到当前目录:
$ unzip shiyanlou.zip
#使用 df 命令查看磁盘的容量
$ df
#比如我们想安装一个软件,名字叫做w3m(w3m是一个命令行的简易网页浏览器),那么输入如下命令:
$ sudo apt-get install w3m
# 更新软件源
$ sudo apt-get update
# 升级没有依赖问题的软件包
$ sudo apt-get upgrade
# 升级并解决依赖关系
$ sudo apt-get dist-upgrade
#卸载软件
sudo apt-get remove w3m
通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
- ? 匹配任意一个字符
- [list] 匹配 list 中的任意单一字符
- [!list] 匹配 除list 中的任意单一字符以外的字符
- [c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
- {string1,string2,…} 匹配 string1 或 string2 (或更多)其一字符串
- {c1..c2} 匹配 c1-c2 中全部字符 如{1..10}
zip:
- 打包 :zip something.zip something (目录请加 -r 参数)
- 解包:unzip something
- 指定路径:-d 参数
tar:
- 打包:tar -zcvf something.tar something
- 解包:tar -zxvf something.tar
- 指定路径:-C 参数
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。就如下图所示: