shell:命令解释器,根据输入的命令执行相应命令。
察看当前系统下有哪些shell可以使用
cat /etc/shells #查看当前系统都有哪些shell echo $SHELL #查看当前系统正在使用的shell是什么
下面给大家列出一些常见的shell:
/bin/sh (已经被 /bin/bash 所取代)
/bin/bash (就是 Linux 默认的 shell)
/bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash) /bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已经被 /bin/tcsh 所取代)
/bin/zsh (基于 ksh 发展出来的,功能更强大的 shell,我现在使用的就是zsh 以后会专门介绍一下)
由于bash是linux默认的shell我们就来着重说一下这个:
bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)
bash是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像 tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其 它的Shell会很快就上手,大多数的时候,一个 Shell脚本 通常可以在很多种Shell上使用。
小窍门:
在bash下敲命令时,Tab键可以补全已经敲了一部分的文件名和目录名。如果是Ubuntu 系统,系统默认启用了bash completion,还可以补全命令的某些参数、Makefile目标等 等。如果是Debian系统,可以用以下命令启用bash completion:
还有一些比较常用的快捷键:
Linux\Unix 系统目录结构
Linux\Unix 没有盘符这个概念,只有一个根目录/,所有文件都在它下面 ,下面我列出一些常见的目录及作用:
/ 根目录
bin //系统可执行程序,如命令
boot //内核和启动程序,所有和启动相关的文件都保存在这里
grub //引导器相关文件
dev //设备文件
etc //系统软件的启动和配置文件所在的目录,系统在启动过程中需要读取的文件都在这个目录里,例如用户账户和密码。
home //用户的主目录。下面是自己定义的用户名的文件夹
lib //系统程序库文件,这个目录里存放着系统最基本的动态链接共享库,类似于Windows下的system32 目录,几乎所有的应用程序都需要用到这些共享库。
media //挂载媒体设备,如光驱、U盘等
mnt //目录是让用户临时挂载别的文件系统,如挂载Windows下的某个分区,ubuntu默认还是挂载在/media目录。
opt //可选的应用软件包(很少使用)
proc //这个目录是系统内存的映射,我们可以直接访问这个目录来获取系统信息。也就是说这个目录的内容不在硬盘上而是在内存里。
sbin //管理员系统程序
selinux
srv
sys //udev用到的设备目录树,/sys反映你机器当前所接的设备
tmp //临时文件夹
usr //这是个最庞大的目录,我们要用到的很多应用程序和文件几乎都存放在这个目录下。
bin // 应用程序
game //游戏程序
include
lib //应用程序的库文件
lib64
local //包含用户程序等
sbin //管理员应用程序
常用的文件操作命令
ls
ls [OPTION]… [FILE]…
-a 列出隐藏文件,文件中以“.”开头的均为隐藏文件,如:~/.bashrc
-l 列出文件的详细信息
-R 连同子目录中的内容一起列出
用ls -l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文 件类型,它可以是下述类型之一
– 普通文件
d 目录
l 符号链接
b 块设备文件
c 字符设备文件
s socket文件,网络套接字
p 管道
后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权 限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示 对文件的读、写和执行权限。访问权限后面的数字表示与该文件共享inode的文件总数,即硬链接数(参见下面ln命 令)。
touch
touch [OPTION]… FILE…
* 将每个文件的访问及修改时间都更新为目前的时间。
* 如果文件不存在,则创建一个字节数为0的文件。
rm 删除文件命令
#删除文件 rm file #file是你要删除的文件名 #删除目录 rm -rf dir #dir是你要删除目录的路径,加参数 -r 是递归删除目录下的所有文件和子目录、 -f参数是强制删除 不要询问
mv 文件 移动\重命名 命令
#重命名 mv file newfile #将file 重命名为 newfile #移动 mv file /dir/ #将当前目录下的file文件移动到 根目录下的 dir目录下
cp 文件拷贝命令
#拷贝文件 cp file1 file2 cp file1 dir/ #将file1拷贝到 dir目录下 cp file1 ../ #将file1拷贝到上层目录下 #拷贝目录 cp dir1 dir2 -r #参数-r是递归执行操作 cp dir1 ~/ -r #参数-r是递归执行操作
cat 查看文件内容命令
查看文件里内容,输出到终端,如果cat时没跟文件名,则读标准输入,遇到\n后,输 出到标准输出,终端下输入Ctrl-d表示结束
more 分段查看文件内容命令
more [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按下任意键再滚动到下一屏,如果中 途不想继续看下去了,可以按Ctrl+C或q终止显示。
less 查看文本文件内容的命令
less [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按键,用户可以向上或向下查看,如果中途不想继续看下去了,可以按Ctrl+C或q终止显示。
head 显示指定文件的前面几行
head [OPTION]… FILE…
显示指定文件的前面几行。如果没有指定文件,将从标准输入(键盘)上读取。如果没 有指定要显示的行数,则默认显示前10行。如果要显示文件的前5行:
head -5 file1 #只显示file1文件的前5行内容
tail 显示文件的最后几行
tail [OPTION]… FILE…
显示文件的最后几行。若没有指定显示的行或字符数,则默认显示末尾10行。如果要显 示文件末5行:
tail -5 file1 #只显示file1文件的最后5行内容
ln 文件链接建立命令
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立 指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果 给ln命令加上-s选项,则建立符号链接。
举例如下, 注意ls -l列出文件的硬链接数和字节数:
#硬链接 touch zploo ln zploo zploo_hl #给文件zploo建立一个名为zploo_hl的硬链接 #软连接 ln -s zploo zploo_s #给文件zploo建立一个名为zploo_s的软链接 #创建软硬链接的命令区别就在于一个 -s 参数
stat zploo
stat zploo_hl
执行上面两条命令你会发现,zploo和zploo_hl两个文件的 Inode 是一样的 关于硬链接是实现方式,两个文件的 Inode 是一样的,所有达到一次修改,多处同步(因为linux内核操作文件是以 Inode 编号为准的)