1.1 Linux基础
1.1.1 Linux文件系统
图1.1 Linux目录文件树
与Windows将硬盘看做“C盘”、“D盘”几个独立的分区不同,Linux将整个文件系统看做一棵树,这棵树的树根叫做根文件系统,用/表示。各个分区通过“挂载”(Mount)以文件夹的形式访问。
1、根文件系统:
/:Linux文件系统根目录。
2、一级目录
/root:系统管理员的目录,这是根用户的主目录。与保留给个人用户的/home下的目录很相似,该目录中还包含仅与根用户有关的条目。
/home:用户主目录的默认位置。存储普通用户的个人文件。每个用户的主目录均在/home下以自己的用户名命名。
/etc:该目录中包含系统和应用软件的配置文件。
/dev:包含系统支持的所有设备文件。具体来说,console表示控制台,lp0表示打印机,mem表示系统的物理内存,sda表示连接到主控制器的第一个磁盘,ttyXX表示串口设备。
/boot:包含系统引导程序GRUB及其配置文件、linux内核文件vmlinuz和磁盘内存映像文件initrd.img等重要引导文件。
/lib:这个目录里存放着系统最基本的共享链接库和内核模块。共享链接库在功能上类似于Windows里的.dll文件。
/proc:它是存在于内存中的虚拟文件系统。里面保存了内核和进程的状态信息。多为文本文件,可以直接查看。如/proc/cpuinfo保存了有关CPU的信息。
/sbin:供超级用户使用的可执行文件,里面多是系统管理命令,如fsck, reboot, shutdown, ifconfig等。
/usr:静态的用户级应用程序等。
/var:动态的程序数据等。长度可变的文件,尤其是些记录数据,如日志文件和打印机文件。例如/var/log,/var/cache等。
/bin:该目录中存放了供所有用户使用的完成基本维护任务的命令。其中bin是binary的缩写,表示二进制文件,通常为可执行文件。包含普通用户和系统管理员可以共享的各种通用程序,如bash、dd、df、gzip、grep、mv、mkdir等常用的基本命令。
/lost+found:用于存储fsck命令在检测与修复文件系统时删除的文件和目录
/media 包含移动存储介质的挂载点,插入U盘,系统会自动将U盘挂载到该目录的某个子目录。
/mnt:包含所有自定义的文件系统的挂载点,可以挂载任何文件系统 包括NFS或CIFS网络文件系统。
/opt:应用程序等附加软件的安装目录,类似于windows系统中的Program Files目录。
3、二级目录
/etc/apt:包含软件管理工具使用的配置文件,如sources.list等。
/etc/cron.d:用于存储cron进程调度运行后台进程所用的配置文件盒控制文件。其他有关目录cron.hourly,cron.daily,cron.weekly,cron.monthly四个目录。
/etc/init.d:用于存储系统启动引导过程中需要由init调度执行的脚本文。
/etc/network:包含网络接口的配置文件interfaces以及相关的配置工具
/etc/X11:包含X服务器使用的各种配置文件,如xorg.conf等。
/usr下的目录结构与根目录相似,但根目录中的文件多是系统级的文件,而/usr中是用户级的文件,一般与具体的系统无关。
/usr/bin:包含用户经常使用的各种命令。
/usr/include:用于存储各种C语言头文件。这个目录及其子目录是开发人员经常引用的文件。其中sys、linux和bits等子目录中定义的数据结构,对于深入学习、理解和掌握Linux系统具有极大的参考价值。
/usr/lib:其中包含各种共享的库函数,可供程序员已静态或动态的方式链接自己开发的程序。
/usr/sbin:包含系统引导完成之后系统管理员经常使用的各种系统管理和维护命令。
/usr/share:共享目录,包含man(联机文档的根目录)、info(GNU info文档的根目录)、doc(各种软件包特定的文档)、locale(语言环境)、vim(用户指南)、zoneinfo(时区定义)等子目录。
/usr/src:存放linux系统内核的源代码和文档等。
/var/lib:存储软件包特定的动态链接共享库、配置文件、数据文件和状态信息等。
/var/log:系统守护进程日志文件的存储目录,其中包括lastlog(每个用户最后一次登录的时间)、messages(由syslogd记录的所有内核和系统程序的日志消息)及wtmp(所有用户的系统注册/注销记录)等重要文件。位于/var/log中的文件会不断地增长,因而要求定期备份或删除,通常linux系统均采用日、周或月为时间周期,定期执行例程检查,以循环截取的方式,删除过时的数据,保留一定时间范围的最新数据,使文件的大小保持一个适中的规模。在Ubuntu Linux系统中,每日将会执行一次logrotate程序,检查并处理系统日志文件。
/var/lock:用于存储各种服务进程或应用程序访问特定的设备或文件时设置的封锁文件。
/var/run:系统运行信息文件的根目录,其中包括各种.pid文件中存有守护进程的PID。另外一个最典型的文件是/var/run/utmp,其中包含当前系统中用户注册信息。
/var/spool:用于缓存各种等待处理的文件,如打印服务等。通常每类待处理的缓存文件均位于各自的子目录中,如/var/spool/cups等。
/var/tmp:用于存储各种临时文件。
1.1.2 Linux桌面环境
相对于现在的Windows系统,UNIX/Linux本身是没有图形界面的,我们通常在UNIX/Linux发行版上看到的图形界面实际都只是运行在Linux系统之上的一套软件,类似Windows95之前的Windows的图形界面实则也只是运行在DOS环境的一套软件。
图1.2 Linux桌面图形架构
1.1.3 Linux终端
通常我们在使用Linux时,并不是直接与系统打交道,而是通过一个叫做Shell的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux系统还提供了一个叫做终端模拟器的程序(Terminal),下面是几个比较常见的终端模拟器:gnome-terminal、Konsole、xterm、rxvt、kvt、nxterm和eterm。
在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他一些常用快捷键如表1.2所示。
表1.2 Ubuntu终端快捷命令
快捷键 |
功能 |
快捷键 |
功能 |
Tab |
自动补全 |
Ctrl+r |
查找历史命令 |
Ctrl+a |
光标移动到开始位置 |
Ctrl+b |
向回移动光标 |
Ctrl+e |
光标移动到最末尾 |
Ctrl+f |
向前移动光标 |
Ctrl+k |
删除此处至末尾的所有内容 |
Ctrl+t |
将光标位置的字符和前一个字符进行位置交换 |
Ctrl+u |
删除此处至开始的所有内容 |
Ctrl+& |
恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容 |
Ctrl+d |
删除当前字符 |
Ctrl+S |
暂停屏幕输出 |
Ctrl+h |
删除当前字符前一个字符 |
Ctrl+Q |
继续屏幕输出 |
Ctrl+w |
删除此处到左边的单词 |
Ctrl+Left-Arrow |
光标移动到上一个单词的词首 |
Ctrl+y |
粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词 |
Ctrl+Right-Arrow |
光标移动到下一个单词的词尾 |
Ctrl+l |
相当于clear,即清屏 |
Ctrl+p |
向上显示缓存命令 |
Ctrl+n |
向下显示缓存命令 |
Shift+Ctrl+W |
关闭标签页 |
Ctrl+d |
关闭终端 |
Shift+Ctrl+C |
复制 |
Ctrl+xx |
在EOL和当前光标位置移动 |
Shift+Ctrl+V |
粘贴 |
Ctrl+x@ |
显示可能hostname补全 |
Alt+数字 |
切换至对应的标签页 |
Ctrl+c |
终止进程/命令 |
Shift+Ctrl+N |
打开新的终端窗口 |
Shift+上或下 |
终端上下滚动 |
Shift+Ctrl+Q |
管壁终端窗口 |
Shift+PgUp/PgDn |
终端上下翻页滚动 |
Shift+Ctrl+PgUp/PgDn |
左移右移标签页 |
Ctrl+Shift+n |
新终端 |
Ctrl+PgUp/PgDn |
切换标签页 |
alt+F2 |
输入gnome-terminal打开终端 |
F1 |
打开帮助指南 |
Shift+Ctrl+T |
打开新的标签页 |
F10 |
激活菜单栏 |
F11 |
全屏切换 |
Alt+S |
打开 “搜索” 菜单(search) |
Alt+F |
打开 “文件” 菜单(file) |
Alt+T |
打开 “终端” 菜单(terminal) |
Alt+E |
打开 “编辑” 菜单(edit) |
Alt+H |
打开 “帮助” 菜单(help) |
Alt+V |
打开 “查看” 菜单(view) |
几个实用命令的详细说明:
1、Tab命令
使用Tab键来进行命令补全,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab键就可以得到提示或者帮助完成。连续按两次Tab可以显示全部候选结果。
2、方向键↑↓
使用键盘上的方向上键↑↓,恢复到此前输入过的命令。
3、通配符
通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
示例:
#创建两个名为adsfasd.txt和wergjlkas.txt的文件,touch是一个文件创建命令 $touch adsfasd.txt wergjlkas.txt #想在一大堆文件中找到这两个文件,就可以使用通配符 $ls *.txt adsfasd.txt wergjlkas.txt |
SHELL常用通配符:
字符 |
含义 |
* |
匹配0或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配list中的任意单一字符 |
[!list] |
匹配除list中的任意单一字符以外的字符 |
[c1-c2] |
匹配c1-c2中的任意单一字符 |
{string1,string2, ...} |
匹配string1或string2或更多中某个字符串 |
{c1..c2} |
匹配c1-c2中全部字符,如{1..10} |
4、man命令
在 Linux 环境中,如果遇到困难,可以使用man命令,它是Manual pages的缩写。Manual pages 是UNIX或类UNIX操作系统中在线软件文档的一种普遍的形式,内容包括计算机程序(包括库和系统调用)、正式的标准和惯例,甚至是抽象的概念。用户可以通过执行man命令调用手册页。为了便于查找,man 手册被进行了分册(分区段)处理,在 Research UNIX、BSD、OS X 和 Linux 中,手册通常被分为8个区段,安排如下:
区段 |
说明 |
1 |
一般命令 |
2 |
系统调用 |
3 |
库函数,涵盖了C标准函数库 |
4 |
特殊文件(通常是/dev中的设备)和驱动程序 |
5 |
文件格式和约定 |
6 |
游戏和屏保 |
7 |
杂项 |
8 |
系统管理命令和守护进程 |
要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:
$man 1 ls |
1.1.4 Linux文件操作命令
1、路径操作
使用cd命令可以切换目录,在Linux里面:“.”表示当前目录;“..”表示上一级目录;“-”表示上一次所在目录;“~”表示当前用户的home目录。使用pwd命令可以获得当前所在绝对路径。
ubuntu:~/$pwd /home/ubuntu ubuntu:~/$cd /usr/local/bin ubuntu:bin/$pwd /usr/local/bin ubuntu:bin/$cd .. ubuntu:local/$pwd /usr/local ubuntu:local/$cd ~ ubuntu:~/$ |
2、新建
touch命令新建空白文件,创建名为 test 的空白文件,因为在其它目录没有权限,所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录
$cd ~ $touch test |
mkdir命令新建空目录,也可同时指定创建目录的权限属性。
创建名为“ mydir ”的空目录:
$cd ~ $mkdir mydir |
使用-p参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在安装软件、配置安装路径时非常有用):
$cd ~ $mkdir -p father/son/grandson |
3、复制
使用cp(copy)命令复制一个文件到指定目录。将之前创建的“ test ”文件复制到“/home/shiyanlou/father/son/grandson”目录中
$ cp test father/son/grandson |
目录复制,要成功复制目录需要加上-r或者-R参数,表示递归复制。
$mkdir family $ cp -r father family |
4、删除
使用 rm(remove files or directories)命令删除一个文件。直接删除文件,可以使用-f参数强制删除。跟复制目录一样,要删除一个目录,也需要加上-r或-R参数。
#删除文件test $rm -f test #删除目录family $rm -r family |
5、移动文件
使用mv(move or rename files)命令移动文件(剪切)。
$mkdir file1 $ mkdir Documents $ mv file1 Documents |
6、查看文件
使用cat,tac和nl命令查看文件。cat和tac用来打印文件内容到标准输出(终端),其中cat为正序显示,tac为倒序显示。
$cp /etc/passwd . $cat passwd #可以加上 -n 参数显示行号 $cat -n passwd |
nl命令,添加行号并打印,这是个比cat -n更专业的行号打印命令。
more和less命令分页查看文件。Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出。
head和tail命令查看文件头几行和尾部几行。
#查看passwd文件头1行和尾部2行 $head -n 1 passwd $tail -n 2 passwd |
tail命令的参数-f,这个参数可以实现不停地读取某个文件的内容并显示。这可以让我们动态查看日志,达到实时监视的目的。
在Linux中文件的类型不是根据文件后缀来判断的,我们通常使用 file 命令查看文件的类型。
7、编辑文件
在Linux下面编辑文件通常我们会直接使用专门的命令行编辑器比如(emacs,vim,nano)。
1.1.5 Linux环境变量
1、变量
变量是计算机中用于记录一个值的符号。通常变量与值是一对一的关系,可以通过表达式读取它的值并赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。
# declare 命令创建一个变量名为 tmp 的变量 $ declare tmp |
也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。
使用=号赋值运算符,将变量tmp赋值为var_tmp
$ tmp=var_tmp $echo $tmp |
读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值,初学者经常忘记输入)。
2、环境变量
环境变量的作用域比自定义变量的要大,如Shell的环境变量作用于自身和它的子进程。在所有的UNIX和类UNIX系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell程序也作为一个进程运行在操作系统之上,而我们在Shell中运行的大部分命令都将以Shell的子进程的方式运行。
通常涉及的变量有三类:
(1)当前Shell进程私有用户自定义变量,如上面我们创建的tmp变量,只在当前Shell中有效。
(2)Shell本身内建的变量。
(3)从自定义变量导出的环境变量。
与上述三类变量相关的命令:
命令 |
说明 |
set |
显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
如何区分环境变量,以下命令可以体验:
$temp=var_test $ech $temp Var_test #创建子shell,ubuntu默认shell为bash $bash $echo $temp #值为空,表示该变量无效 $exit #导出变量temp为环境变量 $export temp $bash $echo $temp var_test |
按变量的生存周期,变量分永久的和临时的两类:
(1)永久变量,需要修改配置文件,变量永久生效;
(2)临时变量,使用export命令行声明即可,变量在关闭shell后失效。
有两个重要文件/etc/bashrc和/etc/profile,它们分别存放的是shell变量和环境变量。
3、添加自定义路径到“PATH”环境变量
在每个用户的home目录中有一个Shell每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。Bash的配置文件为.bashrc。它们在etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。
我们可以简单地使用下面命令直接添加内容到 .bashrc 中:
$echo "PATH=$PATH:~/mybin">>.bashrc |
上述命令中>>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
4、变量删除
可以使用unset命令删除一个环境变量。
5、环境变量立即生效
在shell中修改了一个配置脚本文件之后(比如bash的配置文件home目录下的.bashrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source命令来让其立即生效。
$source ~/.bashrc |
1.1.6 Linux其他命令
类别 |
命令 |
说明 |
文件搜索 |
whereis |
|
which |
||
find |
||
locate |
||
文件解压缩 |
zip |
zip 打包文件夹:zip something.zip something(目录请加-r参数) |
tar |
tar打包:tar -zcvf something.tar something tar解包:tar -zxvf something.tar |
|
uzip |
zip解包:unzip something.zip |
|
磁盘操作 |
df |
df命令查看磁盘的容量 |
du |
du命令查看目录的容量 |
|
帮助命令 |
help |
help命令用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用--help、man或者info命令查看 |
--help |
--help命令是用于显示shell外部命令的简要帮助信息。 |
|
man |
man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 |
|
info |
info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多 |