Linux shell基础命令
最近在学习Linux,写几篇文章来记录一下我的学习过程。
shell提示符
默认的bash shell提示符是美元符($),这个符号表明shell在等待用户输入命令。
浏览文件系统
Linux将文件存储在名为虚拟目录的单个目录结构中。
虚拟目录会将计算机中所有存储设备的文件路径都纳入单个目录结构。
Linux使用正斜线(\)来分隔文件路径中的目录。反斜线在Linux中用作转义字符。
系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中。
路径本身并没有提供任何有关文件究竟放在哪个物理磁盘中的信息。
我们称在linux系统中安装的第一块硬盘为根驱动器。
根驱动器包含了虚拟目录的核心,其他目录都是从那里构建的。
man 查看命令所有可用选项,例如:
1 | man ls |
遍历目录
进入到桌面目录
1 | cd desktop |
cd 目标参数可以是绝对路径也可以是相对路径。
1.绝对路径
绝对路径总是以正斜线(/)作为起始,以指明虚拟文件系统的根目录。
例如:
1 | cd /usr/bin |
2.相对路径
相对路径允许你指定一个基于当前位置的目标路径。相对路径不以代表根目录的正斜线(/)开头,
而是以目录名或是一个特殊字符开始。例如:
1 | cd Documents |
有两个特殊字符可用于相对路径:
- 单点号(.),表示当前目录。
- 双点号(..),表示当前目录的父目录。
双点号非常便利,例如:
1 | cd ../Downloads |
pwd命令可以显示出shell对话的当前目录。
1 | pwd |
显示基本列表
ls命令会显示当前目录下的文件和目录。
1 | ls |
ls -F 可以区分显示文件和目录,目录名之后会添加正斜线(/)展示,可执行文件后会加上星号(*)。
1 | ls -F |
Linux经常使用隐藏文件来保存配置信息。在Linux中隐藏文件通常是文件名以点号(.)开始的文件。
这些文件并不会在ls命令的默认输出中出现。因此,我们称其为隐藏文件。
ls -a 显示隐藏文件
1 | ls -a |
-R是ls命令的另一个选项,称作递归选项,可以列出当前目录所包含的子目录中的文件。
-F选项用于帮助分辨文件类型。
1 | ls -F -R |
或者 ls -FR。
-l选项会产生长列表格式的输出,提供目录中各个文件的详细信息。
1 | ls -l |
每一行都包含另关于文件(或目录)的下列信息。
·文件类型,比如目录(d)、文件(-)、链接文件(l)、字符设备(c)或块设备(b)。
- 文件的权限
- 文件的硬链接数
- 文件属主
- 文件属组
- 文件大小(以字节为单位)
- 文件的上次修改时间
- 文件名或目录名
如果只想查看单个文件的长列表,可以用 ls -l 文件名。
如果想查看目录的相关信息,而非目录所包含的内容,可以用 ls -l 目录名。
ls -l 过滤器就是一个字符串,可做简单的文本匹配。
例如:
1 | ls -l my_script |
当指定特点的文件名作为过滤器时,ls命令只会显示该文件的信息。
ls命令也能识别标准通配符,并在过滤器中用其进行匹配模式:
- 问号(?)代表任意单个字符。
- 星号(*)代表零个或多个字符。
例如:
1 | ls -l my_scr?pt |
1 | ls -l my* |
方括号:代表单个字符位置并给出了该位置上的多个可能的选择。
例如:
1 | ls f[a-z]ll |
使用感叹号(!)将不需要的内容排除在外。
1 | ls -l f[!a]ll |
创建文件
touch命令会创建好指定的文件并将你的用户名作为该文件的属主。
1 | touch test.txt |
touch命令还可用来改变文件的修改时间。该操作不会修改文件。
复制文件
复制源对象到目标对象:
cp source destination
1 | cp test_one test_two |
加上-i选项,强制shell询问是否需要覆盖已有文件。
1 | cp -i test_one test_two |
将文件复制到现有目录中
1 | cp -i test_two Document/ |
将源文件复制到当前工作目录中
1 | cp /etc/nginx.conf . |
cp -R 递归地复制整个目录的内容
1 | cp -R Documents/ newDocuments/ |
也可以使用通配符
1 | cp my* newDocuments/ |
命令行补全
制表键补全允许你在输入文件名或目录名的时候,按一下制表符,让shell帮你将内容补全完整。
链接文件
链接是目录中指向文件真实位置的占位符。在Linux中有两种类型的文件链接:
- 符号链接
- 硬链接
符号链接(也称为软链接)是一个实实在在的文件,该文件指向存放在虚拟目录中某个地方的另一个文件。
这两个以符号方式链接在一起的文件彼此的内容并不相同。
使用ln命令以及-s选项来创建符号链接:
1 | ln -s test_file slink_test_file |
长列表(ls -l)中显示的符号文件名后的 - > 符号表明该文件是链接文件test_file的
一个符号链接。
符号链接仅仅只是指向test_file而已,它的文件大小很小。
另一种证明链接文件是一个独立的文件的方法是查看inode编号。文件或目录的inode编号是内核
分配给文件系统中的每一个对象的唯一标识。要查看文件的inode编号,可以使用ls命令的-i选项:
1 | ln -i 文件路径 |
硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。
但是 两者就根本而言是同一个文件。创建硬链接操作:
1 | ls test_one hlink_test_one |
注意:硬链接不能跨文件系统,软链接可以跨文件系统。
文件重命名
在Linux中,重命名文件称为移动。
mv命令可以将文件和目录移动到另一个位置或是重新命名。
重命名文件
1 | mv fall fzll |
移动文件并重命名
1 | mv fall download/fzll |
使用-i选项,在mv试图覆盖已有文件时会发出询问。
移动文件不会改变文件的inode编号和时间戳。
移动整个目录及其内容:
1 | mv olddir newdir |
删除文件
询问是否真的要删除文件
1 | rm -i fall |
使用通配符元字符删除一组文件
1 | rm -i f?ll |
管理目录
创建目录
1 | mkdir files |
批量的创建目录和子目录
1 | mkdir -p files/logs |
删除目录
1 | rmdir dir |
rmdir 命令只会删除空目录。
对于rm命令,-r选项可以递归的删除目录中的文件。
直接删除整个目录树的最终解决方案时使用 rm -rf 命令。
注意:该操作十分的危险,请明确了解自己在做什么。
查看文件类型
file命令能够探测文件的内部并判断文件类型:
1 | file .base |
也可以用来区分目录,file命令后面跟上一个目录
1 | file Documents |
file命令后面接符号链接文件,能告诉你它链接到了哪个文件:
1 | file slink_test_file |
-n 选项会给所有的行加上行号
-b 选项给有文本的的行加上行号
more 命令支持分页查看文件
1 | more /etc/profile |
less 命令可以在完成整个文件的读取之前显示文件的内容,它能够识别上下箭头键以及上下翻页键。
查看部分文件
tail 命令会显示文件最后几行的内容,默认展示10行。
1 | tail log_file |
显示最后2行的数据
1 | tail -n 2 log_file |
head 命令会显示文件开头的若干行,默认显示10行。
这里表示显示头部3行
1 | head -3 log_file |