文章以ubuntu
下Bash
演示为例,其它linux发行版基本相同。
Roc@ubuntu:~$ command [-options] parameter1 parameter2 ... 指令 选项 参数(1) 参数(2)
说明:
『指令(command)』
或『可执行文件』
;command
为指令的名称,例如变换路径的指令为 cd 等等;中刮号[]
并不存在于实际的指令中,而加入选项设定时,通常选项前会带 -
号,例如 -h;--
符号,例如 --help;parameter1 parameter2..
为依附在选项后面的参数,或者是 command 的参数;空格
来区分,不论空几格 shell 都视为一格;[Enter]
键后,该指令就立即执行。 [Enter]键代表着一行指令的开始启动;\
来跳脱[Enter]符号,使指令连续到下一行;其他:
a. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
一种是该命令会直接显示结果然后回到命令提示字符等待下一个命令的输入;
一种是进入到该命令的环境,直到结束该命令才回到命令提示字符的环境。
data
显示时间与日期全称: date
**简述:**显示当前系统时间与日期等信息。
常用语法:date [格式化输出字符]
示例:
#例一:基础用法 roc@ubuntu:~$ date Sun Nov 14 21:13:09 CST 2021 #例二:格式化输出 roc@ubuntu:~$ date +%Y/%m/%d 2021/11/14 roc@ubuntu:~$ date +%H:%M 21:13
cal
显示日历全称: calender
**简述:**显示日历。
常用语法:cal [month] [year]
示例:
#例一:输出当前系统时间的月份日历 roc@ubuntu:~$ cal November 2021 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #例二:输出指定2011年11月的日历 roc@ubuntu:~$ cal 11 2021 November 2021 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
bc
计算器全称: bash calculator
**简述:**类似于windows的计算器,可进行常规的加减乘除等计算。输入命令会进入bc
软件的工作环境,输入quit
退出。
常用语法:bc [选项] [参数]
示例:
roc@ubuntu:~$ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1+3 #加法 4 10%3 #求余 1 11*14 #乘法 154 2^3 #乘方 8 quit #退出
man
全称: manual
**简述:**获取命令的详细使用说明。输入指令会进入man
的指令环境,Enter
键下翻,q
键退出。
常用语法:man 命令名
示例:
roc@ubuntu:~$ man date DATE(1) User Commands DATE(1) NAME #NAME <==这个指令的完整全名,如下所示为 date 且说明简单用途为设定与显示日期/时间 date - print or set the system date and time SYNOPSIS #这个指令的基本语法如下所示 date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] DESCRIPTION #详细说明刚刚语法谈到的选项与参数的用法 Display the current time in the given FORMAT, or set the system date. Mandatory arguments to long options are mandatory for short options too. -d, --date=STRING #左边-d 为短选项名称,右边--date 为完整选项名称 display time described by STRING, not 'now' #......中间省略...... --version output version information and exit ## 底下就是格式化输出的详绅数据! FORMAT controls the output. Interpreted sequences are: %% a literal % %a locale's abbreviated weekday name (e.g., Sun) #......中间省略...... AUTHOR #指令作者 Written by David MacKenzie. REPORTING BUGS #有问题请留言给底下的 email GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report date translation bugs to <https://translationproject.org/team/> COPYRIGHT #版权信息,遵循GPL协议 Copyright © 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent per‐ mitted by law. SEE ALSO #还可以从哪里查到与 date 相关的说明 Full documentation at: <https://www.gnu.org/software/coreutils/date> or available locally via: info '(coreutils) date invocation' GNU coreutils 8.30 September 2019 DATE(1)
备注:
首行DATE(1)括号内1的含义:
代号 | 代表内容 |
---|---|
1 | 使用者在shell环境中可以操作的命令或可运行文件 |
2 | 系统核心可呼叫的函数与工具等 |
3 | 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc) |
4 | 装置文件的说明,通常在/dev下的文件 |
5 | 配置文件或者是某些文件的格式 |
6 | 游戏(games) |
7 | 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟kernel有关的文件 |
info
在所有的Unix Like
系统当中,都可以利用man
来查询指令或者是相关档案的用法;但是,在Linux里面则又额外提供了一种在线求助的方法,那就是利用info
。
info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。
可以将 info page 想成是文本模式的网页显示数据。 不过你要查询的目标数据的说明文件必须要以 info 的格式来写成才能够使用 info 的特殊功能(例如超链接)。 而这个支持 info 指令的文件默认是放置在/usr/share/info/
这个目录当中的。 举例来说,info 这 个指令的说明文件有写成 info 格式,所以,使用info info
可以得到如下的画面:
#常用语法:info 命令名 roc@ubuntu:~$ info info Next: Stand-alone Info, Up: (dir) #Next:下一个节点的名称为Getting Started,可以按『N』去到下个节点 #Up:回到上一个的节点画面,可以按『U』回到上一层 #Prev:前一个节点。由于Top是info info的第一个节点,所以上面没有前一个节点的信息 Stand-alone GNU Info ******************** This documentation describes the stand-alone Info reader which you can use to read Info documentation. If you are new to the Info reader, then you can get started by typing 'H' for a list of basic key bindings. You can read through the rest of this manual by typing <SPC> and <DEL> (or <Space> and <Backspace>) to move forwards and backwards in it. * Menu: * Stand-alone Info:: What is Info? * Invoking Info:: Options you can pass on the command line. * Cursor Commands:: Commands which move the cursor within a node. * Scrolling Commands:: Commands for reading the text within a node. * Node Commands:: Commands for selecting a new node. * Searching Commands:: Commands for searching an Info file. * Index Commands:: Commands for looking up in indices. * Xref Commands:: Commands for selecting cross-references. * Window Commands:: Commands which manipulate multiple windows. * Printing Nodes:: How to print out the contents of a node. * Miscellaneous Commands:: A few commands that defy categorization. * Variables:: How to change the default behavior of Info. * Colors and Styles:: Customize the colors used by Info. -----Info: (info-stnd)Top, 31 lines --Top-------------------------------------------------- Welcome to Info version 6.7. Type H for help, h for tutorial.
Linux系统中不仅是对用户与组根据UID、GID进行了管理,还对Linux系统中的文件,按照用户与组进行分类,针对不同的群体进行了权限管理
,用他来确定谁能通过何种方式对文件和目录进行访问和操作。示意如下:
chmod
改变权限chmod
,change mode缩写。权限设定可采用a)数字;b)符号的形式。
#常用语法:chmod XXX 文件或目录名 roc@ubuntu:~/cmd_study$ ls -l total 0 -rw-r--r-- 1 ninja ninja 0 Nov 14 22:12 test.txt roc@ubuntu:~/cmd_study$ chmod 777 test.txt #改变test.txt文件权限 roc@ubuntu:~/cmd_study$ ls -l total 0 -rwxrwxrwx 1 ninja ninja 0 Nov 14 22:12 test.txt
两个基本概念:
linux下常用的特殊目录符号:
.
代表当前目录
..
代表上一级目录
-
代表前一个工作目录
~
代表『目前使用者身份』所在的home目录
~account
代表 account 这个使用者的home目录(account是个帐号名称)
cd
切换目录全称: change directory
**简述:**用来切换工作目录。
常用语法:cd [相对路径或绝对路径]
示例:
# 常用语法: roc@ubuntu:~$ cd ~ #回到当前使用者的home目录 roc@ubuntu:~$ cd #没有加上任何路径,也代表回到当前使用者的home目录 roc@ubuntu:~$ cd .. #返回当前目录的上一级目录 roc@ubuntu:~$ cd - #回到刚刚所在的那个目录 roc@ubuntu:~$ cd /var/spool/mail #去到该绝对路径目录下
pwd
显示当前所在的目录全称: print working directory
**简述:**显示目前所在的目录。
常用语法:pwd [-P]
选项或参数
-P :显示出确实的路径,而非使用连接 (link) 路径
示例:
#例一:显示当前目录 roc@ubuntu:~$ pwd /home/ninja #例二:-P参数 roc@ubuntu:~$ cd /var/lock/ #/var/lock是一个连接档 roc@ubuntu:/var/lock$ pwd #显示当前连接档所在路径 /var/lock roc@ubuntu:/var/lock$ pwd -P #显示真实路径 /run/lock
mkdir
创建新目录全称: make directory
**简述:**创建新目录。
常用语法:mkdir [-mp] 目录名称
选项或参数
-m :配置文件的权限
-p :将所需要的目录(包含上一级目录)递归创建起来
示例:
roc@ubuntu:~$ cd cmd_study/ #例一:创建名为test的目录 roc@ubuntu:~/cmd_study$ mkdir test #例二:-p选项,自行递归创建多层目录 roc@ubuntu:~/cmd_study$ mkdir test1/test2/test3 mkdir: cannot create directory ‘test1/test2/test3’: No such file or directory #没办法直接创建此目录 roc@ubuntu:~/cmd_study$ mkdir -p test1/test2/test3 #例三:创建权限为rwx--x--x的目录 roc@ubuntu:~/cmd_study$ mkdir -m 711 test2 roc@ubuntu:~/cmd_study$ ls -l total 0 drwxr-xr-x 1 roc ninja 512 Nov 14 22:56 test drwxr-xr-x 1 roc ninja 512 Nov 14 22:56 test1 drwx--x--x 1 roc ninja 512 Nov 14 22:57 test2 #如果没有加上 -m 来强制配置属性,系统会使用默认属性
rmdir
删除[空]目录全称: remove directory
**简述:**删除目录。被删除的目录里面必定不能存在其他的目录或文件,也就是必须是空目录(empty directory)
。
常用语法:rmdir [-p] 目录名称
选项或参数
-p :连同上一级的『空』目录一起删除
示例:
#接续上一步mkdir所创建的目录 roc@ubuntu:~/cmd_study$ ls -l total 0 drwxr-xr-x 1 roc ninja 512 Nov 14 22:56 test drwxr-xr-x 1 roc ninja 512 Nov 14 22:56 test1 drwx--x--x 1 roc ninja 512 Nov 14 22:57 test2 #例一:空目录,可直接删掉 roc@ubuntu:~/cmd_study$ rmdir test #例二:目录下有内容,无法直接删除 roc@ubuntu:~/cmd_study$ rmdir test1 rmdir: failed to remove 'test1': Directory not empty roc@ubuntu:~/cmd_study$ rmdir -p test1/test2/test3/ #test与test1已被删除 roc@ubuntu:~/cmd_study$ ls -l total 0 drwx--x--x 1 ninja ninja 512 Nov 14 22:57 test2
ls
显示指定工作目录下的内容全称: list
**简述:**linux中最常被执行的命令,用于显示文件和目录相关详细详细。
常用语法:ls [-aAdfFhilnrRSt] 目录名称
ls [--color={never,auto,always}] 目录名称
ls [--full-time] 目录名称
选项或参数:
-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏档,但不包括 . 与 … 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f :直接列出结果,而不进行排序 (ls 默认会以档名排序!)
-F :根据文件、目录等资讯,给予附加数据结构,例如:
*:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;
-S :以文件容量大小排序,而不是用档名排序;
-t :依时间排序,而不是用档名。–color=never :不要依据文件特性给予颜色显示;
–color=always :显示颜色
–color=auto :让系统自行依据配置来判断是否给予颜色
–full-time :以完整时间模式 (包含年、月、日、时、分) 输出
–time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
cp
复制文件或目录全称: copy
**简述:**复制文件或目录。复制(cp)这个命令非常重要,不同身份者运行这个命令会有不同的结果产生,尤其是那个-a, -p的选项, 对于不同身份来说,差异则非常的大!
常用语法:
cp [-adfilprsu] 来源档(source) 目标档(destination)
cp [options] source1 source2 source3 .... directory
选项或参数
-a :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档创建,而非复制文件本身;
-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用於目录的复制行为;(常用)
-s :复制成为符号连结档 (symbolic link),亦即『捷径』文件;
-u :若 destination 比 source 旧才升级 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
rm
删除文件或目录全称: remove
**简述:**删除文件或目录。
常用语法:rm [-fir] 文件或目录
选项或参数
-f :force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除,最常用在目录的删除!这是非常危险的选项!!!
mv
移动(或重命名)文件或目录全称: move
**简述:**删除文件或目录。
常用语法:
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
选项或参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
示例:
#例一:复制一文件,创建一目录,将文件移动到目录中 roc@ninja:~$ cd tmp/ roc@ninja:~/tmp$ cp ~/.bashrc bashrc roc@ninja:~/tmp$ mkdir mvtest roc@ninja:~/tmp$ mv bashrc mvtest # 将某个文件移动到某个目录去 #例二:将刚刚的目录名称更名为 mvtest2 roc@ninja:~/tmp$ mv mvtest mvtest2 roc@ninja:~/tmp$ ls mvtest2 #例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中 roc@ninja:~/tmp$ cp ~/.bashrc bashrc1 roc@ninja:~/tmp$ cp ~/.bashrc bashrc2 roc@ninja:~/tmp$ mv bashrc1 bashrc2 mvtest2/ # 注意这里,如果有多个来源文件或目录,则最后一个目标档一定是『目录』! roc@ninja:~/tmp$ ls mvtest2/ bashrc bashrc1 bashrc2
basename
获取文件名称#例一:获取文件名 roc@ubuntu:~$ basename /etc/apt/sources.list sources.list
dirname
获取目录名称#例一:获取文件所在目录名 roc@ubuntu:~$ dirname /etc/apt/sources.list /etc/apt
cat
从前往后显示文件内容全称: concatenate
**简述:**从前往后显示文件内容。
常用语法:cat [-AbEnTv]
选项或参数
-n :后接数字,代表显示几行的意思
-A :显示特殊字符,相当于-vET选项
-b :对非空白行列出行号,空白行不标行号
-E :显示行尾结束字节$
-n :列出行号,空白行也标行号,与 -b 不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :显示正常不可见的特殊字符
示例:
#例一:基础用法 roc@ubuntu:/etc$ cat /etc/issue Ubuntu 18.04.4 LTS \n \l #例二:列出行号,包含空白行 roc@ubuntu:/etc$ cat -n /etc/issue 1 Ubuntu 18.04.4 LTS \n \l 2 #例三:列出行尾结束符 roc@ubuntu:/etc$ cat -E /etc/issue Ubuntu 18.04.4 LTS \n \l$ $
tac
从后往前显示文件内容tac
,cat
指令的反写,功能也同cat
刚好相反,从后往前显示文件内容。
roc@ubuntu:/etc$ tac -n /etc/issue tac: invalid option -- 'n'
与cat
,tac
等一次性将要查看的文件数据都显示到屏幕上不同,下面介绍的more
、less
指令将为我们提供以滚动翻页的方式来查看文件,这对阅读一些长文本或大文件时比较有帮助。
more
roc@ubuntu:~$ more /etc/sysctl.conf # # /etc/sysctl.conf - Configuration file for setting system variables # See /etc/sysctl.d/ for additional system variables. # See sysctl.conf (5) for information. # #kernel.domainname = example.com # Uncomment the following to stop low-level messages on console #kernel.printk = 3 4 1 3 ##############################################################3 # Functions previously found in netbase # # Uncomment the next two lines to enable Spoof protection (reverse-path filter) # Turn on Source Address Verification in all interfaces to # prevent some spoofing attacks #net.ipv4.conf.default.rp_filter=1 #net.ipv4.conf.all.rp_filter=1 # Uncomment the next line to enable TCP/IP SYN cookies # See http://lwn.net/Articles/277146/ # Note: This may impact IPv6 TCP sessions too #net.ipv4.tcp_syncookies=1 # Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 --More--(32%) #当前显示内容的百分比,同时光标会定位在此等待输入命令
如上,若需要显示的文件内容大于当前屏幕所能输出的最大行数时,就会在结尾提示--More--(百分比%)
字符,默认光标也会定位在此,支持的命令如下:
Space
:代表向下翻一页;
Enter
:代表向下翻『一行』;
/字符串
:在当前显示的内容中,向下查找『字符串』这个关键字;
:f
:立刻显示出档名以及目前显示的行数;
q
:代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b
:代表往回翻页,不过这动作只对文件有用,对管道文件无用。
less
提供比more
更加灵活的功能,如使用【pageup】、【pagedown】前后翻看文件,向上查找内容等。
roc@ubuntu:~$ less /etc/sysctl.conf # # /etc/sysctl.conf - Configuration file for setting system variables # See /etc/sysctl.d/ for additional system variables. # See sysctl.conf (5) for information. # #...此处省略... # Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 : #《==此处输入命令
支持的指令如下:
空白键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字串 :向下搜寻『字串』的功能; ?字串 :向上搜寻『字串』的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) q :离开 less 这个程序;
备注:
前文提到的man
指令也是通过调用less
来显示说明文件的内容的!
head
从头选取查看全称: head
**简述:**从头开始选取查看指定行数的文件内容
常用语法:head [-n number] 文件
选项或参数
-n :后接数字,代表显示几行的意思
示例:
#例一:默认显示前面十行 roc@ubuntu:~$ head /etc/sysctl.conf # # /etc/sysctl.conf - Configuration file for setting system variables # See /etc/sysctl.d/ for additional system variables. # See sysctl.conf (5) for information. # #kernel.domainname = example.com # Uncomment the following to stop low-level messages on console #kernel.printk = 3 4 1 3 #例二:指定显示前两行 roc@ubuntu:~$ head -n 2 /etc/sysctl.conf # # /etc/sysctl.conf - Configuration file for setting system variables
备注:
-n
选项后面如果接的是负数,如-n -100
时,代表从前往后打印所有行数, 但不包括后面100行。如上,假设/etc/sysctl.conf
共有141行,则命令『head -n -100 /etc/sysctl.conf』
就会打印前面41行,后100行不会打印出来。
tail
从尾选取查看全称: tail
简述:
tail
用法与head
相似,只是默认显示最后几行!
令tail
可以侦测文件的输入,利用-f
选项,tail
可以一直侦测文件是否有写入新的数据,并将其打印到屏幕上。
常用语法:tail [-n number][-f] 文件
选项或参数
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的文件,要等到按下[ctrl]-c才会结束tail的侦测
示例:
#例一:默认显示最后十行 roc@ubuntu:~$ tail /etc/sysctl.conf #例二:指定显示最后两行 roc@ubuntu:~$ tail -n 2 /etc/sysctl.conf kernel.printk = 1 4 1 7 kernel.printk = 1 4 1 7 #例三:指定显示第100行后的内容 roc@ubuntu:~$ tail -n +100 /etc/sysctl.conf #例四:持续侦测/etc/sysctl.conf的内容 roc@ubuntu:~$ tail -f /etc/sysctl.conf ################################################################### # Protected links # # Protects against creating or following links under certain conditions # Debian kernels have both set to 1 (restricted) # See https://www.kernel.org/doc/Documentation/sysctl/fs.txt #fs.protected_hardlinks=0 #fs.protected_symlinks=0 kernel.printk = 1 4 1 7 kernel.printk = 1 4 1 7 | #<<==输入[ctrl+c]结束tail的侦测
od
查看二进制文件全称: Octal Dump。
**简述:**前述命令都是查看文本文件,对于二进制(binary file)文件,用这些命令查看则会显示乱码。此时就需要用到od
命令。
常用语法:od [-t TYPE] 文件
选项或参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如: a :利用默认的字节来输出; c :使用 ASCII 字节来输出 d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes ; f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ; o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ; x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes
示例:
#将/usr/bin/passwd文件的内容以ASCII码的方式打印出来 roc@ubuntu:~$ od -t c /usr/bin/passwd 0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 003 \0 > \0 001 \0 \0 \0 J \0 \0 \0 \0 \0 \0 0000040 @ \0 \0 \0 \0 \0 \0 \0 8 342 \0 \0 \0 \0 \0 \0 0000060 \0 \0 \0 \0 @ \0 8 \0 \t \0 @ \0 033 \0 032 \0 #...后面省略... #将/etc/issue这个文件的内容以16进制列出储存值与ASCII的对照表 roc@ubuntu:~$ od -t xCc /etc/issue 0000000 55 62 75 6e 74 75 20 31 38 2e 30 34 2e 34 20 4c U b u n t u 1 8 . 0 4 . 4 L 0000020 54 53 20 5c 6e 20 5c 6c 0a 0a T S \ n \ l \n \n 0000032
touch
修改文件时间或创建文件全称: touch
简述:
创建一个空的文件;
将某个文件日期修订为目前 (mtime 与 atime)。linux下每个文件都会记录许多时间参数,其中最重要的有如下三个:
- modification time (mtime):当该文件的『内容数据』变更时,就会升级这个时间 - status time (ctime):当该文件的『状态 (status)』(如权限、属性等)改变时,就会升级这个时间 - access time (atime):当『该文件的内容被读取』时,就会升级这个时间
常用语法:touch [-acdmt] 文件
选项或参数:
-a :仅修订 access time; -c :仅修改文件的时间,若该文件不存在则不创建新文件; -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间" -m :仅修改 mtime ; -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
示例:
#例一:新建一个空文件并观察其时间 roc@ubuntu:~$ mkdir tmp roc@ubuntu:~$ cd tmp/ roc@ubuntu:~/tmp$ touch testtouch roc@ubuntu:~/tmp$ ll testtouch; ll --time=atime testtouch; ll --time=ctime testtouch -rw-r--r-- 1 roc sudo 0 Nov 17 21:04 testtouch -rw-r--r-- 1 roc sudo 0 Nov 17 21:04 testtouch -rw-r--r-- 1 roc sudo 0 Nov 17 21:04 testtouch # 注意该文件的大小是 0 。 # 默认状态下,如果 touch 后面有接文件,则该文件的三个时间 (atime/ctime/mtime) 都会升级为目前的时间; # 若该文件不存在,则会主动的创建一个新的空文件。 #例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期 roc@ubuntu:~/tmp$ cp -a ~/.bashrc bashrc roc@ubuntu:~/tmp$ ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 roc sudo 3771 Nov 13 20:45 bashrc #mtime -rw-r--r-- 1 roc sudo 3771 Nov 17 10:40 bashrc #atime -rw-r--r-- 1 roc sudo 3771 Nov 17 21:05 bashrc #ctime #数据的内容与属性是被复制过来的,因此文件内容时间(mtime)与原本文件相同。 #但由于这个文件是刚刚被创建的,因此状态(ctime)与读取(atime)时间就呈现复制时的时间 #例三:修改例二的 bashrc 文件,将日期调整为两天前 roc@ubuntu:~/tmp$ touch -d "2 day ago" bashrc roc@ubuntu:~/tmp$ ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 roc sudo 3771 Nov 15 21:12 bashrc -rw-r--r-- 1 roc sudo 3771 Nov 15 21:12 bashrc -rw-r--r-- 1 roc sudo 3771 Nov 17 21:12 bashrc #与例二相比,atime/mtime的时间都变成了15号,但ctime并没有变化 #例四:将上个范例的 bashrc 日期改为 2007/09/15 2:02 roc@ubuntu:~/tmp$ touch -t 0709150202 bashrc roc@ubuntu:~/tmp$ ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 roc sudo 3771 Sep 15 2007 bashrc -rw-r--r-- 1 roc sudo 3771 Sep 15 2007 bashrc -rw-r--r-- 1 roc sudo 3771 Nov 17 21:13 bashrc #注意:日期在 atime 与 mtime 都改变了,但是 ctime 仍是记录目前的时间!
备注:
即使我们复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。 ctime 可以记录这个文件最近的状态 (status) 被改变的时间。
平时看文件属性时,比较重要的还是属于 mtime
!普遍关心的常常是这个文件的『内容』 是什么时候被更动。