在Linux系统下,因为本着一切皆文件的原则,所以我们日常对于Linux操作系统的操作都可以说是对于文件的管理(目录其实也是文件),那么我们掌握一些常见的文件管理命令是必不可少的,下面我们大约会讲到以下命令:
①目录管理:ls、cd、pwd、mkdir、rmdir、tree、install
②文件管理:touch、stat、file、cp、mv、rm
③日期时间:date、hwclock、cal
④文本查看:cat、tac、more、less、head、tail、cut、sort、uniq、tr、tee、echo、wc
一、目录管理类常用命令
1.ls(list)
ls - list directory contents # 列出目录内容 SYNOPSIS ls [OPTION]... [FILE]... -a: 显示以.开头的隐藏文件 -A: 显示所有文件但不包括.和.. . 表示当前目录 .. 表示父目录 -d: 显示目录自身属性 -h:做单位转换 -i: 显示文件的inode号 -l:长格式 -r: 逆序显示 -R: 递归(recursive)显示 -t:将文档依据修改时间之先后次序列出 [root@soysauce ~]# ls -lh /root/ total 8.0K -rw-r--r-- 1 root root 208 Jul 6 13:41 id_rsa_1024.pub -rwxr-xr-x 1 root root 518 Oct 26 21:33 iptables.sh
2、cd(change directory)
[root@soysauce tmp]# cd # 回到当前用户的家目录,等同于cd ~ [root@soysauce ~]# [root@soysauce ~]# cd ~hadoop # 进入hadoop用户的家目录 [root@soysauce hadoop]# [root@soysauce hadoop]# cd - # 返回到上一个工作目录,即/home/hadoop [root@soysauce ~]#
3、pwd(print working directory)
pwd - print name of current/working directory # 打印当前工作目录 SYNOPSIS pwd [OPTION]... [root@soysauce ~]# pwd /root
4、mkdir(make directories)
mkdir - make directories # 创建目录 SYNOPSIS mkdir [OPTION] DIRECTORY... -Z:设置安全上下文,当使用SELinux时有效 -m:<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限 -p或--parents:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录 -v:显示创建过程 [root@soysauce ~]# mkdir -pv -m 700/tmp/test/abc # 当目录test与abc都不存在时,使用-p选项 mkdir: created directory `/tmp/test' mkdir: created directory `/tmp/test/abc' [root@soysauce ~]# ll /tmp/test/abc/ -d drwx------ 2 root root 4096 Nov 1 20:16 /tmp/test/abc/
5、rmdir(remove empty directories)
rmdir - remove empty directories # 删除空目录 SYNOPSIS rmdir [OPTION]... DIRECTORY... [root@soysauce ~]# rmdir /tmp/test/abc # 删除空目录abc
ps:因为此命令只能删除空目录,故不是很常用,下面这个rm命令较为常用
6、tree
tree - list contents of directories in a tree-like format. # 以树状图格式列出目录的内容 [root@soysauce ~]# tree /root/ /root/ |-- from `-- test.txt 0 directories, 2 files
7、install
install - copy files and set attributes # 复制文件并设置属性 SYNOPSIS install [OPTION]... [-T] SOURCE DEST install [OPTION]... SOURCE... DIRECTORY install [OPTION]... -t DIRECTORY SOURCE... install [OPTION]... -d DIRECTORY... -d:创建目录 [root@soysauce ~]# install -d /tmp/abc # 在/tmp下创建一个目录abc [root@soysauce ~]# ls -ld /tmp/abc drwxr-xr-x 2 root root 4096 Nov 14 19:39 /tmp/abc [root@soysauce ~]# install -D /etc/passwd /tmp/abc/test # 使用-D选项时,目录可以事先不存在 [root@soysauce ~]# ls -l /tmp/abc/test -rwxr-xr-x 1 root root 1703 Nov 14 20:10 /tmp/abc/test
二、文件管理类常用命令
1、touch
touch - change file timestamps # 改变文件时间戳 SYNOPSIS touch [OPTION]... FILE... -a:仅修改访问时间 -c:不创建空文件,只修改时间戳 -m:仅修改修改时间 -t:指定时间戳 [root@soysauce ~]# stat iptables.sh File: `iptables.sh' Size: 518 Blocks: 8 IO Block: 4096 regular file Device: 301h/769d Inode: 3932170 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-11-01 20:02:41.000000000 +0800 Modify: 2015-11-01 20:02:41.000000000 +0800 Change: 2015-11-01 20:02:41.000000000 +0800 [root@soysauce ~]# touch -a -t 201508251420.30 iptables.sh # 只修改访问时间 [root@soysauce ~]# stat iptables.sh File: `iptables.sh' Size: 518 Blocks: 8 IO Block: 4096 regular file Device: 301h/769d Inode: 3932170 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-25 14:20:30.000000000 +0800 Modify: 2015-11-01 20:02:41.000000000 +0800 Change: 2015-11-01 20:04:28.000000000 +0800
ps:无论是atime还是mtime改变了,ctime都会变
2、stat
stat - display file or file system status # 显示文件或者文件系统的状态信息 SYNOPSIS stat [OPTION] FILE... [root@soysauce ~]# stat test.txt # 查看test.txt文件的元数据信息 File: `test.txt' Size: 55 Blocks: 8 IO Block: 4096 regular file Device: 301h/769dInode: 3937951 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-11-06 12:40:52.000000000 +0800 Modify: 2015-11-06 12:39:07.000000000 +0800 Change: 2015-11-06 12:39:07.000000000 +0800
3、file
file - determine file type # 判断文件类型 SYNOPSIS file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ... file -C [ -m magicfile ] [root@soysauce ~]# file test.txt test.txt: ASCII text # 显示此文件为纯ASCII码文件 [root@soysauce ~]# file /bin/ls # 显示此文件为64LSB可执行文件 /bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped [root@soysauce ~]# file /bin/sh /bin/sh: symbolic link to `bash' #显示此文件为链接文件,链接到/bin/bash
4、cp(copy)
cp - copy files and directories # 复制文件或目录 SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... -a:--archive,同-dR --preserve=all,常用于备份 -b:覆盖已存在的文件目标前将目标文件备份 -d:--no-dereference --preserve=link,当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 -f:强行复制文件或目录,不论目标文件或目录是否已存在 -i:--interactive,覆盖既有文件之前先询问用户 -l:对源文件建立硬连接,而非复制文件 -s:对源文件建立符号连接,而非复制文件 -p:复制时保持原文件的权限,属主属组,时间戳 -R/r:递归处理,将指定目录下的所有文件与子目录一并处理 -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件 -v:详细显示命令执行的操作
(1).源为一个文件,目标存在且为目录,则将此文件复制到目录下并保持原名
[root@soysauce ~]# cp /etc/issue /root/ [root@soysauce ~]# ls /root/ id_rsa_1024.pub iptables.sh issue
(2).源为一个文件,目标存在且为文件,则复制时会提示是否覆盖
[root@soysauce ~]# cp /etc/passwd /root/issue cp: overwrite `/root/issue'? y
(3).源为一个文件,目标不存在,则将此文件复制到目录下并重命名
[root@soysauce ~]# cp /etc/issue /root/testfile [root@soysauce ~]# ls /root/ id_rsa_1024.pub iptables.sh issue testfile
(4).源为多个文件,目标必须得是目录并且得事先存在,否则会报错
[root@soysauce ~]# cp /etc/passwd /etc/passwd /etc/fstab /root fstab id_rsa_1024.pub iptables.sh issue testfile
(5).源为一个目录,目标必须得是目录
[root@soysauce ~]# cp -r /boot /tmp # 复制目录时要加上-r选项,-R同-r,递归的意思
5、mv(move)
mv - move (rename) files # 移动或重命名 SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录 -i:--interactive,覆盖既有文件之前先询问用 [root@soysauce ~]# mv issue passwd # 将当前目录下的issue重命名为passwd
6、rm(remove)
rm - remove files or directories # 删除文件或是目录 SYNOPSIS rm [OPTION]... FILE... -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录 -f:强制删除文件或目录 -i:删除已有文件或目录之前先询问用户; -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理 --preserve-root:不对根目录进行递归操作 -v:显示指令的详细执行过程 [root@soysauce ~]# rm -rf /tmp/test # 将/tmp/test目录以及其子目录和文件都删除
三、日期时间类管理命令
1、date
date - print or set the system date and time SYNOPSIS date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] %H 小时,24小时制(00~23) %I 小时,12小时制(01~12) %k 小时,24小时制(0~23) %l 小时,12小时制(1~12) %M 分钟(00~59) %p 显示出AM或PM %r 显示时间,12小时制(hh:mm:ss %p) %s 从1970年1月1日00:00:00到目前经历的秒数 %S 显示秒(00~59) %T 显示时间,24小时制(hh:mm:ss) %X 显示时间的格式(%H:%M:%S) %Z 显示时区,日期域(CST) %a 星期的简称(Sun~Sat) %A 星期的全称(Sunday~Saturday) %h,%b 月的简称(Jan~Dec) %B 月的全称(January~December) %c 日期和时间(Tue Nov 20 14:12:58 2012) %d 一个月的第几天(01~31) %x,%D 日期(mm/dd/yy) %j 一年的第几天(001~366) %m 月份(01~12) %w 一个星期的第几天(0代表星期天) %W 一年的第几个星期(00~53,星期一为第一天) %y 年的最后两个数字(1999则是99)
(1).输出当前日期时间,输出格式为年-月-日 时:分:秒
[root@soysauce ~]# date +"%F %T" 2015-11-01 14:19:14
(2).修改当前日期时间
[root@soysauce ~]# date 102412342015.30 Sat Oct 24 12:34:30 CST 2015
(3).只输出当前日期,输出格式为年-月-日-时-分-秒
[root@soysauce ~]# date +"%F-%H-%M-%S" 2015-11-01-14-26-30
(4).显示"今天是年-月-日"
[root@soysauce ~]# date +"This is %Y%nToday is %d" This is 2015 Today is 01
(5).获取从1970年1月1日到今天所走过的秒数
[root@soysauce ~]# date +%s 1446360306
2、hwclock
hwclock - query and set the hardware clock (RTC) SYNOPSIS hwclock -r or hwclock --show hwclock -w or hwclock --systohc hwclock -s or hwclock --hctosys hwclock -a or hwclock --adjust hwclock -v or hwclock --version hwclock --set --date=newdate hwclock --getepoch hwclock --setepoch --epoch=year -w:以系统时间为准,将系统时间同步到硬件时间,即改变的是硬件时间 -s: 以硬件时间为准,将硬件时间同步到系统时间,即改变的是系统时间
(1).硬件时钟不准,以系统时钟为准,将系统时钟同步到硬件时间
[root@soysauce ~]# hwclock Sat 24 Oct 2015 12:37:00 PM CST -0.196319 seconds [root@soysauce ~]# date Sun Nov 1 14:36:21 CST 2015 [root@soysauce ~]# hwclock -w [root@soysauce ~]# hwclock Sun 01 Nov 2015 02:36:39 PM CST -0.869126 seconds
(2).系统时钟不准,以硬件时钟为准,将硬件时钟同步到系统时间
[root@soysauce ~]# hwclock Sun 01 Nov 2015 02:32:26 PM CST -0.825691 seconds [root@soysauce ~]# date Sat Oct 24 12:45:31 CST 2015 [root@soysauce ~]# hwclock -s [root@soysauce ~]# date Sun Nov 1 14:32:50 CST 2015
3、cal
cal - displays a calendar # 显示日历 SYNOPSIS cal [-smjy13] [[month] year] [root@soysauce ~]# cal # 显示当前日期 November 2015 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 [root@soysauce ~]# cal 2015 # 显示2015年所有月,内容过多,就不贴了
四、文本查看类常用命令
1、cat
cat - concatenate files and print on the standard output #连接文件并在标准输出上显示 SYNOPSIS cat [OPTION] [FILE]... -A:等价于-vET,显示所有 -E:显示行结束符 -e:等价于"-vE"选项 -n或-number:从1开始对所有输出的行数编号 -b或--number-nonblank:和-n相似,只不过对于空白行不编号 -s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行 -t:等价于"-vT"选项 -v:显示非打印字符 [root@soysauce ~]# cat -n test.txt # 显示行号,此行号与文本内容并没有关系 1 hello,world. 2 This is a test file. 3 Welcome to my house. [root@soysauce ~]# cat -A test.txt # 显示所有的隐藏符号 hello,world.$ This is a test file.$ Welcome to my house.$
2、tac
tac - concatenate and print files in reverse # 按行逆序显示,与cat相反 SYNOPSIS tac [OPTION]... [FILE]... [root@soysauce ~]# tac test.txt # 上面cat test.txt显示内容正好倒过来 Welcome to my house. This is a test file. hello,world.
3、more
more - file perusal filter for crt viewing # 在CRT显示器上阅读文件的过滤器 -<数字>:指定每屏显示的行数 [root@soysauce ~]# more -10 /etc/rc.d/rc.sysinit # 每10行显示一次
4、less
less - opposite of more # 与more相反 space向下翻屏 b向上翻屏 /|?查找字符串 n|N上下翻查找到的字符串 [root@soysauce ~]# less /etc/rc.d/rc.sysinit
5、head
head - output the first part of files # 输出显示文件首部内容 SYNOPSIS head [OPTION]... [FILE]... -n<数字>:指定显示头部内容的行数 -c<字符数>:指定显示头部内容的字符数 -v:总是显示文件名的头信息 -q:不显示文件名的头信息 [root@soysauce ~]# head -5 /etc/inittab # 显示inittab文件的前5行 # # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <[email protected]> [root@soysauce ~]# head -c 1k /etc/inittab # 截取文件1k的内容显示
6、tail
tail - output the last part of files # 输出显示文件尾部内容 SYNOPSIS tail [OPTION]... [FILE]... -f:显示文件最新追加的内容,常用于监控日志 [root@soysauce ~]# tail -5 /etc/inittab # 查看/etc/inittab后5行 [root@soysauce ~]# tail -f /var/log/messages # 显示新追加至此文件尾部的内容,ctrl+c可退出
7、cut
cut - remove sections from each line of files # 移除文件的每一行中相同段 SYNOPSIS cut [OPTION]... [FILE]... -d:指定字段分隔符 -f:指定所显示的字段 [root@soysauce ~]# cut -d: -f1-3 /etc/passwd|head -3 # 截取passwd前3行中第1至3字段 root:x:0 bin:x:1 daemon:x:2 [root@soysauce ~]# cut -d: -f1,3 /etc/passwd|head -3 # 截取passwd前3行中第1和第3字段 root:0 bin:1 daemon:2
8、sort
sort - sort lines of text files # 对文本文件每一行进行排序 SYNOPSIS sort [OPTION]... [FILE]... -b:忽略每行前面开始处的空格字符 -c:检查文件是否已经按照顺序排序 -f:忽略大小写 -m:将几个排序好的文件进行合并 -n:依照数值的大小排序 -o<输出文件>:将排序后的结果存入制定的文件 -r:以相反的顺序来排序 -t<分隔符>:指定排序时所用的栏位分隔字符 -k 数字:指定分隔后进行比较的字段 -u:重复的行,只显示一行 [root@soysauce ~]# cat lol.txt # 我们先查看原文件 top:21 jug:102 mid:4 adc:36 sup:76 mid:4 jug:102 [root@soysauce ~]# sort lol.txt # 按照字符在ASCII码表中次序排序,逐字符比较 adc:36 jug:102 jug:102 mid:4 mid:4 sup:76 top:21 [root@soysauce ~]# sort -u lol.txt # 重复行只显示一次,连续相同的两行才算是重复 adc:36 jug:102 mid:4 sup:76 top:21 [root@soysauce ~]# sort -r lol.txt # 将排序后的结果逆序显示 top:21 sup:76 mid:4 mid:4 jug:102 jug:102 adc:36 [root@soysauce ~]# sort -n -t: -k2 lol.txt mid:4 mid:4 top:21 # -t指定分隔符,-k指定字段,按照第二字段以数值方式排序,也就是我们经常使用的数值大小排序 adc:36 sup:76 jug:102 jug:102 [root@soysauce ~]# sort -u lol.txt > lol.txt # sort排序后重定向对象不能是排序的原文件,否则会清空 [root@soysauce ~]# cat lol.txt # 可以看到此时文件已经被清空,还好我之前有备份 [root@soysauce ~]# sort -u lol.txt -o lol.txt # 去掉重复行之后的排序结果仍然保存到原文件
9、uniq
uniq - report or omit repeated lines # 报告或忽略文件中的重复行 SYNOPSIS uniq [OPTION]... [INPUT [OUTPUT]] -c或――count:在每列旁边显示该行重复出现的次数 -d或--repeated:仅显示重复出现的行列 -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位 -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符 -u或――unique:仅显示出一次的行列 -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符 [root@soysauce ~]# sort lol.txt | uniq -c # 统计每一行出现的次数,连续相同的两行才算是重复 1 adc 36 2 jug 102 2 mid 4 1 sup 76 1 top 21 [root@soysauce ~]# sort lol.txt | uniq -d # 仅显示有重复的行 jug 102 mid 4 [root@soysauce ~]# sort lol.txt | uniq -u # 仅显示不重复的行 adc 36 sup 76 top 21 [root@soysauce ~]# sort lol.txt | uniq -D # 显示所有重复的行 jug jug mid mid
10、tr
tr - translate or delete characters # 转换或删除字符 SYNOPSIS tr [OPTION]... SET1 [SET2] # 只能通过输入重定向或是管道,不能直接操作文件 -c或――complerment:取代所有不属于第一字符集的字符 -d或――delete:删除所有属于第一字符集的字符 -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示 -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符 [root@soysauce ~]# echo "hello" | tr 'a-z' 'A-Z' # 将小写字符转换为大写字符 HELLO [root@soysauce ~]# echo "hello,WORLD" | tr -d 'a-f' # 删除出现在a-f之间的小写字符 hllo,WORLD [root@soysauce ~]# echo "helloooo,worrrrrrrld" | tr -s 'or' # 去掉指定重复的字符 hello,world
11、tee
tee - read from standard input and write to standard output and files # 从标准输入读取数据并将结果显示到标准输出和重定向至指定文件 SYNOPSIS tee [OPTION]... [FILE]... -a:向文件中重定向时使用追加模式 -i:忽略中断(interrupt)信号 [root@soysauce ~]# ./configure --enable-xcache \ --with-php-config=/usr/local/php/bin/php-config \ |tee xcache.log # 将输出到屏幕上的信息同时保存一份至文件中
12、echo
echo - display a line of text # 显示一行文本 SYNOPSIS echo [OPTION]... [STRING]... -n:不换行显示 -e:启用转义字符 前景色:重置=0,黑色=30,红色=31,绿色=32,***=33,蓝色=34,洋红=35,青色=36,白色=37 背景色:重置=0,黑色=40,红色=41,绿色=42,***=43,蓝色=44,洋红=45,青色=46,白色=47 文字属性:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐 [root@soysauce ~]# echo -n "hello world" # 显示时不换行 hello world[root@soysauce ~]# [root@soysauce ~]# echo -e "\033[31mhello \033[0mworld" # 显示hello world,并且hello显示为红色 hello world [root@soysauce ~]# echo -e "hello \nwolrd" # \n换行且光标移至行首 hello wolrd [root@soysauce ~]# echo -e "hello\bwolrd" # \b删除前一个字符 hellwolrd [root@soysauce ~]# echo -e "hello\twolrd" # \t打印一个制表符,即tab hello wolrd [root@soysauce ~]# echo -e "hello\vwolrd" # \v显示纵向分行风格 hello wolrd [root@soysauce ~]# echo -e "\e[31;43;5mhello \e[0mworld" # 前景色红色,背景色***,文字闪烁,033可换成e hello world
13、wc
wc - print the number of newlines, words, and bytes in files # 输出文件中的字节数、单词数、行数 SYNOPSIS wc [OPTION]... [FILE]... -l:统计行数 -w:统计单词数 -c:统计字节数 -m:统计字符数 -L:统计最长的行的长度 [root@soysauce scripts]# wc /etc/passwd 36 61 1703 /etc/passwd # 36行,61个单词,1703个字节 [root@soysauce scripts]# wc -l /etc/passwd # 显示行数 29 /etc/passwd [root@soysauce scripts]# wc -L /etc/passwd # 显示最长的行的字符数 69 /etc/passwd
最后补充一下关于文件权限的讲解
①文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block),按块为单位,随机访问的设备,如硬盘,磁带等
c: 字符设备文件 (character),按字符为单位,线性访问的设备,如键盘,显示器等
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
②文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--
③文件硬链接的次数
④文件的属主(owner)
⑤文件的属组(group)
⑥文件大小(size),单位是字节
⑦时间戳(timestamp):最近一次被修改的时间
访问时间(atime):访问数据文件的时间,即读取或查看
修改时间(mtime):写数据,即文件内容发生改变的时间
改变时间(ctime):元数据改变的时间
⑧文件名
总结:
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
linux系统设置硬件时钟时,提供两种时区选择,一种为本地时区,此时硬件时间与系统时间相同;另一种为UTC时区,此时硬件时间存的是UTC时间,系统初始化时会转换为本地时间后再设置为系统时钟的时间。