目录
part 1
ls
tree
stat
part 2
clear
pwd
echo
cd
cal
date
part 3
touch
mkdir
rmdir
rm
cp
mv
part 4
cat
more
less
head
tail
part 5
find
which
locate
grep
part 6
chmod
chown
chgrp
sudo
su
part 7
uname
id
man手册
--help选项
part 8
tar
zip/unzip
指令别名
重定向和管道
注意事项
标准选项: [-CFRacdilqrtu1]
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。
-a 显示所有文件和目录
-C 使用彩色显示
-d 仅显示目录名
-D 显示文件更改时间
-c 设置显示格式
-f 显示文件系统信息
-L 支持符号链接
-t 设置以简洁方式显示
-n 不输出行尾的换行符.
-e 允许对下面列出的加反斜线转义的字符进行解释.
-E 禁止对在STRINGs中的那些序列进行解释.
--help 显示帮助并退出(须单独运行)
--version 输出版本信息并退出(须单独运行)
在没有 -E 的情况下,可承认并可以内置替换以下序列:\NNN 字符的ASCII代码为NNN(八进制)
\\ 反斜线
\a 报警符(BEL)
\b 退格符
\c 禁止尾随的换行符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 纵向制表符
-L 强制跟随符号链接: 在处理 ’..' 之后解析 DIR 中的符号链接。
-P 使用物理目录结构而不跟随符号链接: 在处理 '..' 之前解析 DIR 中的符号链接。
-e 如果使用了 -P 参数,但不能成功确定当前工作目录时,返回非零的返回值。
-@ 在支持拓展属性的系统上,将一个有这些属性的文件当作有文件属性的目录。cd - # cd后面直接跟-,表示返回刚才的
默认情况下跟随符号链接,如同指定 `-L'。
-1 显示本月的日历
-3 显示最近三个月的日历
-C 使用校准模式
-h 显示帮助信息
-j 显示在当年中的第几天
-l 单月份输出日历
-m 将星期一作为每月的第一天
-s 将星期天作为每月的第一天
-V 显示版本信息
-y 显示当年的日历
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
简而言之,就是:date [选项] [参数]
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT;
如下只列出部分参数,具体可以自行查询man手册
%H 小时,24小时制(00~23)
%I 小时,12小时制(01~12)
%k 小时,24小时制(0~23)
%l 小时,12小时制(1~12)
%Z 显示时区,日期域(CST)
%a 星期的简称(Sun~Sat)
%A 星期的全称(Sunday~Saturday)
%B 月的全称(January~December)
%c 日期和时间(Tue Nov 20 14:12:58 2012)
%m 月份(01~12)
%y 年的最后两个数字(00)
%Y 年(用 4 位表示)
格式化输出年月日,时分秒和[am,pm]
date +%F_%T%P
输出5天前的日期
date -d "5 day ago" +"%Y_%m_%d"
加减操作
date +%Y%m%d #显示前天年月日 date -d “+1 day” +%Y%m%d #显示前一天的日期 date -d “-1 day” +%Y%m%d #显示后一天的日期 date -d “-1 month” +%Y%m%d #显示上一月的日期 date -d “+1 month” +%Y%m%d #显示下一月的日期 date -d “-1 year” +%Y%m%d #显示前一年的日期 date -d “+1 year” +%Y%m%d #显示下一年的日期
-a 设置文件的读取时间记录
-c 不创建新文件
-d 设置时间与日期
-m 设置文件的修改时间记录
-t 设置文件的时间记录,格式与date命令相同
-m mode 为新建立的目录设定模式,就象应用命令chmod一样,以后仍 然使用缺省模式建立新目录。
-p 递归地创建多级目录。忽略参数对已存在的目录的覆盖,相当于用命令 umask进行了 'u+wx' 的设置。例如:已存在目录a,当用到命令mkdir a'时报错,而mkdir -p /a则不会。
--verbose 打印出新建立的每一个目录名。与--parents联合使用最有效。
-p 递归处理所有子文件,但要保证每个子目录都必须是空的。
-d 仅删除无子文件的空目录
-f 强制删除文件而不询问
-i 删除文件前询问用户是否确认
-r 递归删除目录及其内全部子文件
-v 显示执行过程详细信息
-a 功能等价于“pdr”参数组合
-b 覆盖目标文件前先进行备份
-d 复制链接文件时,将目标文件也建立成链接文件
-f 若目标文件已存在,则会直接覆盖
-i 若目标文件已存在,则会询问是否覆盖
-l 对源文件建立硬链接,而非复制文件
-p 保留源文件或目录的所有属性信息
-r 递归复制所有子文件
-s 对源文件建立软链接,而非复制文件
-v 显示执行过程详细信息
-b 覆盖前为目标文件创建备份
-f 强制覆盖目标文件而不询问
-i 覆盖目标文件前询问用户是否确认
-n 不要覆盖已有文件
-u 当源文件比目标文件更新时,才执行覆盖操作
-v 显示执行过程详细信息
-A 等价于”-vET”参数组合
-b 显示行数(空行不编号)
-e 等价于”-vE”参数组合
-E 每行结束处显示$符号
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-t 等价于”-vT”参数组合
-T 将TAB字符显示为^I符号
-v 使用^和M-引用,除了LFD和TAB之外
-c 不滚屏,先显示内容再清除旧内容
-d 显示提醒信息,关闭响铃功能
-f 统计实际的行数,而非自动换行的行数
-l 将“^L”当作普通字符处理,而不暂停输出信息
-p 先清除屏幕再显示文本文件的剩余内容
-s 将多个空行压缩成一行显示
-u 禁止下划线
-数字 设置每屏显示的最大行数
+数字 设置从第N行开始显示内容
-e 当文件显示结束后自动退出
-f 强制打开文件
-m 显示阅读进度百分比
-N 显示文件内容时带行号
-s 将连续多个空行视为一行-o 将要输出的内容写入到指定文件中
-c 设置显示头部内容的字符数
-n 设置显示行数
-q 不显示文件名的头信息
-v 显示文件名的头信息
-c 设置显示文件尾部的字符数
-f 持续显示文件尾部最新内容
-n 设置显示文件尾部的行数
path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
expression 中可使用的选项有二三十个之多,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。
find 命令中用于时间的参数如下:-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。
在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。
关于时间 n 参数的说明:
+n:查找比 n 天前更早的文件或目录。
-n:查找在 n 天内更改过属性的文件或目录。
n:查找在 n 天前(指定那一天)更改过属性的文件或目录。
-a 显示PATH变量中所有匹配的可执行文件
-n 设置文件名长度(不含路径)
-p 设置文件名长度(含路径)
-V 显示版本信息
-w 设置输出时栏位的宽度
locate和find的区别:
它们之间的主要区别在于搜索速度和搜索方式。locate快,因为它使用一个预生成的文件数据库(通常是 /var/lib/mlocate/mlocate.db)来查找文件,但它执行的是模糊匹配。而find虽然相对较慢,但由于是实时搜索文件系统,所以执行的是精确匹配。
-b 仅匹配文件名
-c 不输出文件名
-i 忽略大小写
-l 限制最大查找数量
-r 使用正则表达式
-w 匹配完整的文件路径
-c 只显示匹配的行数
-E 支持扩展正则表达式
-F 匹配固定字符串的内容
-h 搜索多文件时不显示文件名
-i 忽略关键词大小写
-l 只显示符合匹配条件的文件名
-v 显示不包含匹配文本的所有行
-c 改变文件权限成功后再输出成功信息
-f 改变文件权限失败后不显示错误信息
-R 递归处理所有子文件
-v 显示执行过程详细信息
-c 显示所属变更信息
-f 若该文件拥有者无法被更改也不显示错误
-R 递归处理所有子文件
-v 显示执行过程详细信息
-c 显示调试信息
-f 不显示错误信息
-h 对符号链接文件做修改
-L 遍历每个符号链接
-P 不遍历每个符号链接
-R 递归处理所有子文件
-v 显示执行过程详细信息
变更至指定用户身份:
su xiaoming
完全变更至指定用户身份:
su - xiaoming
-a 显示系统所有相关信息
-i 显示硬件平台
-m 显示计算机硬件架构
-n 显示主机名称
-o 显示操作系统名称
-p 显示主机处理器类型
-r 显示内核发行版本号
-s 显示内核名称
-v 显示内核版本
-g 显示用户所属基本组的ID
-G 显示用户所属扩展组的ID
-n 显示用户所属基本组或扩展组的名称
-u 显示用户的ID -Z 显示用户的安全上下文
Linux有很多指令和指令参数,我们不可能记住所有的指令和参数。而网上搜索的资料有些不够准确,或缺乏系统性。而man命令作为权威的官方工具则很好地解决了上述两点弊病。man可以查询绝大多数指令的帮助信息,包括man自己。
-K 在所有手册页中搜索字符串
-l 格式化和显示本地手册文件
-w 显示文件所在位置
-a 在所有手册页中搜索关键词
shell下的几乎绝大多数指令都支持一个--help参数,这通常用于获取关于命令的帮助信息和用法。当在命令后面添加--help
参数时,命令会显示关于该命令的简要说明、可用选项等。
例如:
ls --help
虽然man和--help都是显示帮助信息,但一般来说,man手册是一个命令的详细说明,而--help是其选项说明。要注意区分。
Linux下的压缩和归档格式有很多,我们这里只讲两种比较常见的tar和zip,其它的可以自行查询。
需要注意的是,tar命令的-f参数之后要立即接上文件名。因此,如果要把几个参数合在一起写的话,-f一定要放在最后。
-c 建立一个压缩文件的参数指令(create 的意思)
-z 使用gzip压缩格式-j 使用bzip2压缩格式
-f 指定压缩包文件(-f之后立即接文件名,不要再加参数)
-t 显示压缩包的内容
-x 解开一个压缩文件的参数指令
-C 解压到指定目录
-v 显示执行过程详细信息
用法示例:
#使用gzip压缩格式对指定目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.gz
tar -czvf File.tar.gz /etc
#使用bzip2压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.bz2
tar -cjvf File.tar.bz2 /etc
#将当前工作目录内所有以.cfg为后缀的文件打包,不进行压缩
tar -cvf File.tar *.cfg
#将当前工作目录内的所有以.cfg为后缀的文件打包,不进行压缩,并删除原始文件
tar -cvf File.tar *.cfg --remove-files
#解压指定压缩包到当前工作目录
tar -xvf File.tar
#解压指定压缩包到/etc目录
tar -xvf File.tar -C /etc
#查看某个压缩包内文件信息(无需解压)
tar -tvf File.tar
zip命令用于压缩文件,unzip命令用于解压文件。
通过zip命令可以将文件打包成.zip格式的压缩包,里面会包含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。
用法格式:zip 参数 目标文件.zip 源文件...
unzip命令用于解压缩zip格式文件,虽然Linux系统中更多地使用tar命令进行对压缩包的管理操作,但有时也会收到Windows系统常用的.zip和.rar格式的压缩包文件,unzip命令便派上了用场。直接使用unzip命令解压缩文件后,压缩包内原有的文件会被提取并输出保存到当前工作目录下。
用法格式:unzip [参数] 压缩包名
在Linux中可以通过alias命令给指令取别名。用法格式如下:
alias [name [=newname] ]
用法示例:
当只有alias时,是显示系统中已有的命令别名,等同于'alias -p'操作。
alias #等价于 alias -p
当只有name时,是在已有别名中查找name,并显示其信息
alias ll # 输出结果:alias ll='ls -l --color=auto'
name和newname都存在时,是将name设为别名
alias myorder = 'll -a'
注意事项:
这里只是简单的了解一下重定向和管道,并不是很详细的讲解。
重定向
首先要知道,操作系统在启动时通常会默认打开标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。当我们使用echo、cat等有输出指令时,默认是将内容打印到标准输出流的,也就是我们的终端屏幕。而如果我们想把内容打印到一个我们指定的文件中,就需要将内容重定向到指定文件中,这里用到的就是输出重定向。同理,输入重定向就是,将原来通过标准输入流获取信息的方式,改为从指定文件获取内容。如下是关于输入重定向和输出重定向的详细介绍。
由上面的内容我们得知,重定向可分为:
输入重定向:重新指定设备来代替键盘作为新的输入设备。
输出重定向:重新指定设备来代替显示器作为新的输出设备。
输出重定向
相较于输入重定向,我们使用输出重定向的频率更高。并且,和输入重定向不同的是,输出重定向还可以细分为标准输出重定向和错误输出重定向两种,其中我们大多数情况下都是使用的标准输出重定向。标准输出重定向和错误输出重定向又分别都包含普通重定向和追加重定向(普通重定向是将目标文件内容清空再输出,追加重定向是直接在文件末尾追加写入)。现将输出重定向的使用格式整理如下。其中 > 的是普通重定向,>> 的是追加重定向。
命令符号格式 | 作用 |
---|---|
命令 > 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。 |
命令 2> 文件 | 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。 |
命令 >> 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。 |
命令 2>> 文件 | 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。 |
命令 >> 文件 2>&1 或者 |
将标准输出或错误输出追加写入写入到指定文件。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。 |
用法示例:
echo "hello Linux" > hello.txt
cat man ls > ls_use.txt
输入重定向
输入重定向不像输入重定向那样常用,而且使用格式也较少,详见下表:
命令符号格式 | 作用 |
---|---|
命令 < 文件 | 将指定文件作为命令的输入设备 |
命令 << 分界符 | 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串 |
命令 < 文件 1 > 文件 2 | 将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中 |
用法示例:
#原理解释:先将cat的输入文件重定向为fun1(这么做虽然鸡肋,但只是起到便于理解的作用)
#然后再将输出结果重定向到fun2文件中。
cat < fun1 > fun2 #fun1的内容是:hello
cat fun2
#输出结果:hello
管道
我们这里说的管道是指的管道符"|"。管道是Linux中很重要的一种通信方式,是将一个指令(程序)的输出直接作为另一个指令的输入。管道符主要用于多重命令处理,前面命令的打印结果作为后面命令的输入。简单点说就是,就像工厂的流水线一样,进行完一道工序后,继续传送给下一道工序处理。
例如显示指定文件经过排序、去重以后包含"better"的行的一系列操作可以写做如下形式
# 查看文本 内容排序 内容去重 信息过滤
cat hello.sh | sort | uniq | grep 'better' target.txt
一个可执行程序要运行->加载到内存,得先找到他。所以我们运行自己的可执行程序时需要有具体的路径地址,例如 ./myfun 操作。而Linux内置的指令可以在终端中直接运行而不需要指定路径,这是因为Linux系统的命令搜索路径(PATH)包含了这些内置指令所在的目录。PATH是一个环境变量,它包含了一组目录路径,系统会在这些路径中查找可执行文件。当你在终端中输入一个命令时,系统会按照PATH中的顺序查找命令的可执行文件,一旦找到了匹配的命令,就会执行它。而自定义的可执行程序肯定不在内置的PATH中,所以找不到匹配的命令,所以需要手动指定路径才能找到并执行它。
在Linux系统中,常见的内置指令(例如
ls
、cd
、mkdir
、rm
等)通常位于系统的标准命令目录中,例如/bin
、/usr/bin
、/sbin
、/usr/sbin
等。这些目录通常都包含在PATH中,因此你可以在任何目录中直接运行这些命令,而不必指定完整的路径。说的通俗一点就是:可以认为Linux中的内置指令都是统一管理的,相当于“内部人员”,可以不用指定路径。而自定义的可执行程序不属于Linux统一管理的,Linux系统就找不到,如果不告诉系统要执行的程序在哪,他就找不到,就无法执行,所以必须要指定路径。