# Linux shell
- 用户不能直接与操作系统内核通信。需要在用户和操作系统之间使用充当接口的程序。
- 在 UNIX 系列的操作系统中,该程序称为 shell。
- shell 将接受用户条目、解释它们、将它们转换为系统调用,并将系统消息传递回用户,就象是一个命令解释器。
# Shell 的类型
- The Bourne shell (/bin/sh)
- The Bourne again shell (/bin/bash)
- The Korn-Shell (/bin/ksh)
- The C-Shell (/bin/csh)
- The TC-Shell (/bin/tcsh)
每个 shell 均可像程序那样启动,并且您可在任何时间切换到不同的 shell。 - shell 是在用户登录后在文本控制台启动的。这被称为 login shell。对哪个用户启动哪个 shell 是由用户数据库决定的。
- shell 与大多数其他程序不同,它不会自己结束。您需要输入命令 exit 来返回到前一个 shell。
- 标准的 Linux shell 是 bash
# 目录相关命令
- shell 终端提示符包含当前目录(例如 tux@da10:)。波浪号 “” 指示您位于用户主目录中。
- 可以使用以下命令更改活动目录并列出目录的内容:
cd
ls
pwd
clear
# Shell 命令基本格式
Shell 命令由命令名、选项和参数三部分组成
命令名 [选项] [参数 1] [参数 2]…
ls –a
ls -l
# Linux 的文档帮助
# man
- man 手册页 (/usr/share/man)
- tux@da1:~ > man ls
给出关于命令 ls 的具体描述,包括以下几个部分,其中每个手册页标题的左右侧是命令名和手册页所属的章节号。标题的中间是章节的名称。
NAME 命令的名称和简短描述
SYNOPSIS 语法的描述
DESCRIPTION 命令的详细描述
OPTIONS 提供的所有可用选项的描述
COMMANDS 在程序运行时可以分配给该程序的说明
FILES 使用某种方法连接到命令的文件
SEE ALSO 相关命令的提示
DIAGNOSTICS 程序可能出现的错误消息
EXAMPLE 调用命令的示例
BUGS 命令的已知错误和问题 - 手册页可以分为以下不同的小节
1 可执行程序和 shell 命令(用户命令)
2 系统调用
3 功能和库例程
4 设备文件
5 配置文件和文件格式
6 游戏
7 宏软件包和文件格式
8 系统管理命令 - 某个命令可能有多个手册,此时指定命令所在的小节能够加快查找速度
- 输入以下命令将显示有关 crontab 命令的一般信息:
tux@da1:~ > man 1 crontab - 输入以下命令将显示有关 crontab 命令的配置文件(名称也是 crontab)的信息:
tux@da1:~ > man 5 crontab
# Info
Info 工具是一个基于菜单的超文本系统,由 GNU 项目开发并由 Linux 发布。info 工具包括一些关于 Linux shell、工具、GNU 项目开发程序的说明文档。与 man 相比,info 工具可显示更完整的最新的 GNU 工具信息
tux@da1:~ > info ls
/usr/share/info/
# –help
“–help” 是一个工具选项,用在命令行中
tux@da1:~ > ls --help
# Linux 系统中的文件类型
- 普通文件
- 目录:包含两个条目,一个条目(“.”)指向目录本身。另一个条目(“…”)指向层次中的上一级条目
- 设备文件:Linux 系统中的每个硬件都由一个设备文件表示,要访问硬件的每个程序都必须通过对应的设备文件来访问硬件
- 链接:是对存储在文件系统中其他点的文件的引用
- 套接字:两个本地运行的进程之间的数据交换便可以通过文件 系统实施
- FIFO: 用于在进程之间交换数据。但是,文件仅可按一个方向交换数据。
- ls -l 查看文件的属性
普通文件 -rw-r–r–
目录文件 drwxr-xr-x
字符设备文件 crw-rw-rw-
块设备文件 brw-r-----
套接字文件 srwxrwxrwx
链接文件 lrwxrwxr—
FIFO 文件 prwxr—r–
# 创建和查看文件
- 使用 touch 创建新文件
touch test.txt - 使用 cat 查看文件
cat test.txt - 使用 more 和 less 查看文件
less test.txt - 使用 head 和 tail 查看文件
head test.txt tail -3 test.txt
# 文件和目录相关命令
- 复制并移动文件和目录(cp、mv)
cp test.txt test1.txt (cp source destination)
mv –i test.txt test1.txt - 创建目录(mkdir)
mkdir tux - 删除文件和目录(rm,rmdir)
rm –i test1.txt rmdir tux - 链接文件(ln)
ln test.txt new
ln –s test.txt newtest
# shell 中的用户切换
- 切换为根用户
su - - 退出根用户
exit - 切换为其它用户
su 用户名 - 显示当前用户
who/whoami
# Linux 系统中管理目录和文件
# 根目录
- 根目录指的是文件系统树的最顶层。通常此处只有目录(没有文件)。重新引导系统时,最先安装该目录所在的分区。
- 由于内核不能完成操作系统的所有任务,在系统启时运行的所有程序必须位于该分区中(它们不能位于其他分区中)。
- 以下目录必须始终与根目录在同一个分区中:/bin/、/dev/、/etc/、/lib/ 和 /sbin/。
# 适用于所有用户的基本二进制 (/bin/)
- 目录 /bin/ 包含一些重要的可执行程序,当没有安装其他文件系统时这些程序是必需的,例如:启动系统需要所有的程序。
- 包括各种 shell、用于处理文件的最重要的命令和几个用于系统分析和配置的命令。
/bin/bash bash shell
/bin/cat 显示文件
/bin/cp 复制文件
/bin/mount 安装文件系统
/bin/rm 删除文件
/bin/vi vi 编辑器
# 引导目录 (/boot/)
- 目录 /boot/ 包含引导装载程序(GRUB 或 LILO)的静态文件。这些文件是引导进程必需的(除配置文件之外)。
- 主引导记录 (MBR) 的备份信息以及系统映射文件也存储在这里。包括有关内核在分区中的确切位置的信息。
- 另外,该目录还包含内核。但是,根据 FHS,内核还可以直接存储在根目录中
# 设备文件 (/dev/)
- 系统中存在的所有硬件组件(例如硬盘驱动器分区、CD 设备、打印机和鼠标)在目录 /dev/ 中均用一个文件表示。
- 可以通过写入或读取这些文件来查找硬件组件。设备文件分为以下两类:
- 面向字符的设备文件(用于依次工作的设备,例如打印机、鼠标或磁带机)。
- 面向块的设备文件(例如软盘和硬盘)。
# 配置文件 (/etc/)
- 该目录及其子目录均包含系统配置文件。几乎所有这些文件都是 ASCII 文件,它们可以用任何编辑器处理
- 普通用户几乎可以读取所有这些文件,但是不能编辑这些文件。根据 FHS,不能在此处存储任何可执行程序。
- 但是,子目录中包含许多 shell 脚本。
- 几乎所有已安装服务的 /etc/ 目录或子目录中都至少包含一个配置文件。
一些重要的配置文件
/etc/inittab init 进程的配置文件
/etc/init.d/* 用于启动服务的脚本
/etc/grub.conf GRUB 的配置文件
/etc/modules.conf 内核模块的配置文件
/etc/fstab 系统启动时自动安装的文件系统的表
/etc/profile shell 的逻辑脚本
/etc/passwd 用户数据库;除口令之外的所有信息
/etc/shadow 用户的加密口令
/etc/group 用户组的数据库
/etc/cups/* 用于 CUPS 打印系统的文件
/etc/hosts 向 IP 地址分配计算机名称
# 用户目录 (/home/)
- Linux 系统的每个用户都有一个属于自己的区域,可以在其中创建和删除文件。该区域称为用户的主目录。如果用户登录,便会进入他自己的主目录。
- 个人配置文件存储在用户的主目录中。这些配置文件是隐藏文件,因为命令 ls 一般不会显示这些文件。所有这些文件名称的开头都是一个点。
.profile 用户的专用登录脚本
.bash_history bash 的配置文件
.bashrc 先前在 bash 中运行的命令的列表
# 库 (/lib/)
- 许多程序都使用一些特定的功能,这些功能也被其他程序使用。此类标准功能将从实际的程序中删除,它们存储在系统中,并且仅在程序运行时才被调用。它们称为共享库。
- 目录 /lib/ 包含目录 /bin/ 和 /sbin/ 中程序使用的库。内核模块(硬件驱动程序没有编译到内核中)存储在目录 /lib/modules/ 中。
- 其他库存储在目录 /usr/ 下。
# 可删除介质的装入点 (/media/*)
根据硬件在目录 /media/ 下创建如下目录,以安装可删除介质
/media/cdrom/。 用于安装 CD-ROM。
/media/cdrecorder/。 用于在 CD 烧录程序中安装 CD。
/media/dvd/。用于安装 DVD。
/media/floppy/。用于安装软盘。
# 管理员的主目录 (/root/)
系统管理员的主目录不在 /home/ 下,这点与普通用户不同。它最好是与根目录 “/” 在同一个分区中。只有这样才能确保根用户正常登录并使用自己配置的环境。
# 系统二进制 (/sbin/)
目录 /sbin/ 包含用于系统管理的重要程序。普通用户运行的程序位于 /bin/ 中。
通常,普通用户也可以运行目录 /sbin/ 中的程序,但只能显示已配置的值。只有根用户才能更改配置。
/sbin/fdisk 修改分区。
/sbin/fsck 检查文件系统(文件系统检查)。
/sbin/init 初始化系统。
# /usr/ 下面的层次
根据 FHS,目录 /usr/ 代表第二层。所有应用程序、图形界面文件、其他库、本地安装程序以及包含文档的常用共享目录均存储在这一层中。
/usr/bin/ 几乎所有可执行程序
/usr/lib/ 库
/usr/local/ 本地安装程序,目前通常存储在目录 /opt/ 中
/usr/sbin/ 系统管理程序
/usr/share/doc/ 文档
/usr/share/man/ 手册页(命令描述)
/usr/src/ 所有程序的源文件和内核(如果安装了的话)
# 可变文件 (/var/)
目录 /var/ 是 FHS 中描述的第二层,该目录及其子目录包含一些可以在系统运行时修改的文件。
/var/lib/ 可变库(例如命令 locate 和 rpm 的数据库)
/var/log/ 大多数服务的日志文件
/var/run/ 包含有关运行进程信息的文件
/var/spool/ 队列(打印机和电子邮件)的目录
/var/lock/ 阻止多重使用设备的锁文件
# 进程文件 (/proc/)
- 目录 /proc/ 中保存向用户提供的进程信息。该目录不包含任何实际文件,因此不占用硬盘上的任何空间。
- 这个目录是在访问时动态生成的(例如,带有 ls /proc/)。每个进程都有它自己的目录。可以读出这些目录中的值,就好像这些值存储在文件中。也可以通过向对应的 “文件” 写入这些值来设置它们。但是,对该虚拟文件系统的更改只有在系统运行时才生效。
- 除了每个单独进程的目录, /proc/ 还包含了一些目录和文件,其中包含有关系统状态的信息。
# 系统状态的信息
/proc/cpuinfo 处理器的相关信息
/proc/interrupts 中断的使用
/proc/filesystems 内核可以识别的文件系统格式
/proc/modules 活动模块
/proc/mounts 已安装的文件系统
/proc/net/* 网络特定信息和统计信息
/proc/sys/* 系统和内核信息
# vi
- 命令模式:当 vi 启动时,它自动处于此模式。处于命令模式时,可以向 vi 指定命令。命令 i 会将其置于插入模式并且命令:会将其切换到命令行模式。
- 插入模式:处于此模式(关键字 --INSERT–)时, vi 会将所有输入作为文本接受。使用 Esc 将返回命令模式。
- 命令行模式:处于此模式(关键字 :)时, vi 将从命令行接受命令。按下 Enter 将执行命令并自动切换回命令模式。
- 在命令模式中可以进行删除、复制和粘贴的功能,但是无法编辑文件内容。
- 输入模式在命令模式中输入:i、 l、 o、 O、 a、 A 可以进入输入模式,在输入模式中可以进行文件的写入、修改、删除内容按下 Esc 可以退回到编辑模式
- 命令行模式可以执行各种的命令,例如保存退出、查找、显示行号
# 移动光标的方法:
0 或功能键 [Home]:移动到这一行的最前面字符处。
'$' 或功能键 [End]:移动到这一行的最后面字符处。
H:移动到屏幕第一行开始处。
G:移动到这个文件的最后一行。
nG:移动到文件第 n 行;
gg:移动到这个文件的第一行,相当于 1G.
N [Enter]:N 为数字,光标向下移动 N 行。
# 查找和替换
/demo:向下寻找一个名称为 demo 的字符串。
?demo:向上寻找一个名称为 demo 的字符串。
# 删除、复制和粘贴:
x,X:在一行字中,x 为向后删除一个字符(相当于 [Del] 键),X 为向前删除一个字符(相当于 [Backspace])。
dd:删除光标所在的一整行。
ndd:删除光标所在的向下 n 行。
yy:复制光标所在的一行。
nyy:复制光标所在的向下 n 行。
p,P:p 为将已复制的内容在光标的下一行粘贴,P 则为粘贴在光标的上一行。
u:复原前一个操作。
[Ctrl]+r:重做上一个操作。
# 命令行模式下的操作:
w:保存
q:退出
wq:保存并退出
!:强制执行
w!:强制保存
q!:不保存强制退出
set nu:显示行号
set nonu:不显示行号
# 文件查找 find
- find 在命令行上搜索文件
- find path criterion action
- path:要搜索的文件系统部分(指定的目录及其所有子目录)。如果什么也没指定,则将使用当前目录下的文件系统。
- criterion:文件应该具有的属性:
- -name pattern 搜索名称中包含给定模式的文件。如果模式中包含元字符或通配符,则必须用引号将它括起。否则,它将由 shell 解释,而不是由 find 解释。
- -type file_type 搜索文件类型。适用的文件类型如下:“d”(用于目录)、“f”(用于文件)或者 “l”(用于符号链接)。
- -ctime [+/-] days 搜索恰好在指定的几天前进行上一次修改的那些文件。
- action:影响以下条件或将搜索作为一个整体进行控制的选项,例如:
-print
-exec command 可使用选项 -exec 调用其他命令
# Linux 下的软件安装
# 安装 RPM 包
用 rpm 安装软件的命令格式如下:
rpm -i [安装选项] rpm 软件包名
安装选项有很多,常用的如下:
-vh :显示安装过程中的详细信息;
–percent:显示安装进度的百分比;
–test:不进行安装软件包,只进行安装测试并显示简单的报告;
–force:忽略任何错误,强制安装软件包
# 更新、卸载 RPM 包
rpm -u [安装选项] rpm 软件包名
rpm -e [删除选项] 软件名
常用的删除选项如下:
-nodeps:卸载前不检查依赖性;
-test:并不真正卸载任何软件,只是遍历该动作。
应当注意的是,删除时在命令中使用的是软件名,而不是软件包名。
- 查询已安装的包版本
rpm –q 软件包名 - 用于包查询的选项
<包名称>:查询指定的软件包;
-a,–all:查询所有安装的包;
-f,–file :查询拥有文件 的包 - 用于信息查询的选项
- i:显示包信息,包括名字、版本和描述等;
-R,–requires:列出该包所依赖关系;
-l,–list:列出该包文件。
# tar 类型软件包
- tar 类型的软件包多数都是源代码,因此,在软件包中还包含了进行编译的脚本程序,它的安装过程如下:
(1)解压缩 gz 压缩格式的包,用下列命令进行解压和解包:tar –xvzf 软件包名 如果不是 gz 压缩格式,先用相应的解压软件解压缩,现执行下面命令解包:tar –xvf 解压后的 tar 包名
(2)执行 ./configure 命令为编译配置和预处理
(3)执行 make 命令编译源程序
(4)执行 make install 安装软件
# 创建备份文件 tar
tar 格式是一种容器格式,用于文件和目录结构。根据约定,档案文件的扩展名以 .tar 结尾。
tar -cvf /backup/etc.tar /etc
-c (create) 将创建档案
- v (verbose) 将更为详细地显示备份进程的输出。
-f (file) 后面输入要创建的档案的名称
- 查看档案文件
tar -tvf /backup/etc.tar - 对 tar 档案解包
tar –xvf /backup/etc.tar
该档案中的所有文件写入当前目录
如果要解压缩到另一个目录,则可以使用选项 -C 并在其后输入该目录的名称 - 如果想从备份中排除特定文件,则必须将这些文件一行一行地写入一个排除文件中,exclude.files
- 使用选项 -X 将该列表传递到 tar
tar -cvf /dev/st0 /home -X exclude.files