第2章 新手必须掌握的Linux命令--------(2)

2.5 工作目录切换命令

1. pwd命令

pwd命令以绝对路径的方式显示用户当前工作目录。

选项

--help:显示帮助信息;
--version:显示版本信息。

实例

[ ~]# pwd
/root

1. cd命令

cd命令用来切换工作目录至dirname。

选项

-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。实例
cd    进入用户主目录;
cd ~  进入用户主目录;
cd -  返回进入此目录之前所在的目录;
cd ..  返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../..  返回上两级目录;
cd !$  把上个命令的参数作为cd参数使用。[ ~]# cd /etc

2.ls命令

ls命令用来显示目标列表,在Linux中是使用率较高的命令。

选项

-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,  “=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
实例

显示当前目录下非影藏文件与目录
[ ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog  satools


显示当前目录下包括影藏文件在内的所有文件列表

[ ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  install.log         .mysql_history  satools  .tcshrc   .vimrc
..  .bash_history    .bash_profile  .cshrc   install.log.syslog  .rnd            .ssh     .viminfo
  输出长格式列表
[ ~]# ls -1
  anaconda-ks.cfg
  install.log
  install.log.syslog
  satools
显示文件的inode信息
[ ~]# ls -i -l anaconda-ks.cfg install.log
2345481 -rw------- 1 root root   859 Jun 11 22:49 anaconda-ks.cfg
2345474 -rw-r--r-- 1 root root 13837 Jun 11 22:49 install.log
 
水平输出文件列表

[ /]# ls -m

bin, boot, data, dev, etc, home, lib, lost+found, media, misc, mnt, opt, proc, root, sbin, selinux, srv, sys, tmp, usr, var
 
 最近修改的文件显示在最上面。
[ /]# ls -t
tmp  root  etc  dev  lib  boot  sys  proc  data  home  bin  sbin  usr  var  lost+found  media  mnt  opt  selinux  srv  misc

 显示递归文件
[ ~]# ls -R
anaconda-ks.cfg  install.log  install.log.syslog  satools./satools:
black.txt  freemem.sh  iptables.sh  lnmp.sh  mysql  php502_check.sh  ssh_safe.sh
列出文件和文件夹的详细信息
[ /]# ls -l

 列出可读文件和文件夹详细信息
[ /]# ls -lh
显示文件夹信息
[ /]# ls -ld /etc/
drwxr-xr-x 75 root root 4096 Oct 16 04:02 /etc/
 

2.6 文本文件编辑命令

1.cat命令

cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令

选项

-n显示行数(空行也编号)
-s显示行数(多个空行算一个编号)
-b显示行数(空行不编号)
-E每行结束处显示$符号
-T将TAB字符显示为 ^I符号
-v使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e等价于”-vE”组合
-t等价于”-vT”组合
-A等价于 -vET组合
--help显示帮助信息
--version显示版本信息
实例
设ml和m2是当前目录下的两个文件

[ ~]# cat m1 (在屏幕上显示文件ml的内容)
[ ~]# cat m1 m2 (同时显示文件ml和m2的内容)
[ ~]# cat m1 m2 > file (将文件ml和m2合并后放入文件file中)
[ ~]# cat -n filename.txt     #查看文件的内容,并显示行数编号:
[ ~]# cat -n linuxcool.log > linuxprobe.log   #查看文件的内容,并添加行数编号后输出到另外一个文件中:
[ ~]# cat /dev/null > /root/filename.txt   #清空文件的内容:
[ ~]# cat > filename.txt <<EOF        #持续写入文件内容,碰到EOF符后结束并保存:> Hello, World > Linux!> EOF
[ ~]# cat /dev/fd0 > fdisk.iso   #将软盘设备制作成镜像文件:

2. more命令

more命令用于将内容较长的文本文件内容(不能在一屏显示完)进行分屏显示,并且支持在显示时定位关键字。而对于内容较少的文本文件内容则推荐使用cat命令查看。

常用参数:

-num指定每屏显示的行数
-lmore在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p先清除屏幕再显示文本文件的剩余内容
-c与-p相似,不滚屏,先显示内容再清除旧内容
-s多个空行压缩成一行显示
-u禁止下划线
+/pattern在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

实例:

more -dc file显示文件file的内容,显示之前先清屏,附已显示的百分比:
more -c -10 file显示文件file的内容,每10行显示一次,而且在显示之前先清屏:
more -p -5 file显示文件file的内容,每5行显示一次,而且在显示之后再清屏:
more -s file逐页显示 file 文档内容,如有连续两行以上空白行则以一行空白行显示 :
more +20 file从第 20 行开始显示 file 之文档内容 :

3.head 命令

head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容

常用参数:

-n后面接数字,代表显示几行的意思
-c指定显示头部内容的字符数
-v总是显示文件名的头信息
-q不显示文件名的头信息

实例:

head -n 3 install.log显示前3行文件内容
head -v -n 2 test.txt显示文件名信息,并显示文件前两行
head -c 5 test.txt显示文件前5个字符:

 4.tail命令

 tail命令用于输入文件中的尾部内容。

 常用参数:

-n后面接数字,代表显示几行的意思
-c指定显示头部内容的字符数

实例:

tail file显示文件file的最后10行
tail +20 file显示文件file的内容,从第20行至文件末尾
tail -c 10 file显示文件file的最后10个字符:
tail -f 10 file一直变化的文件总是显示后10行:
tail --help显示帮助信息:

5. tr命令

 tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

 常用参数:

-c选定字符串1中字符集的补集,即反选字符串1的补集
-d删除字符串1中出现的所有字符
-s删除所有重复出现的字符序列,只保留一个

 实例

tr "[a-z]" "[A-Z]" <file_1实现大小字母的呼唤
tr -d "[a-z]" <file_1删除file_1中的小写字母
tr -s "[\n]" <file_2压缩重复的空白行
echo "HELLO WORLD" | tr ‘A-Z‘ ‘a-z‘将输入字符由大写转换为小写
echo "hello 123 world 456" | tr -d ‘0-9‘使用tr删除字符
cat text | tr ‘\t‘ ‘ ‘将制表符转换为空格:
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c ‘0-9 \n‘字符集补集,从输入文本中将不在补集中的所有字符删除:
echo "thissss is a text linnnnnnne." | tr -s ‘ sn‘用tr压缩字符,可以压缩输入中重复的字符
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr ‘\n‘ ‘+‘) 0 ]巧妙使用tr做数字相加操作
cat file | tr -s "\r" "\n" > new_file删除Windows文件“造成”的‘^M‘字符

6.wc命令

 wc命令统计指定文件中的字节数、字数、行数,并将统计结果显示输出。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。wc同时也给出所指定文件的总统计数。

 常用参数:

-w统计字数,或--words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
-c统计字节数,或--bytes或--chars:只显示Bytes数
-l统计行数,或--lines:只显示列数
-m统计字符数
-L打印最长行的长度
--help显示帮助信息
--version显示版本信息

实例:

wc -w test.txt统计字数
wc -c test.txt统计字节数
wc -m test.txt统计字符数
wc -l test.txt统计行数
wc -L test.txt打印最长行的长度

7.stat命令

stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。

常用参数

-L支持符号链接
-f显示文件系统的信息
-t以简洁的方式输出
--help显示命令帮助信息
--version显示命令版本信息

实例

stat anaconda-ks.cfg查看文件 anaconda-ks.cfg 的三种时间状态:Access,Modify,Change
stat -f anaconda-ks.cfg查看文件系统信息
stat -t anaconda-ks.cfg以简洁的方式输出信息
stat --version命令版本信息

8.cut命令

cut命令有两个主要的功能,第一是显示文件内容,第二是连接多个或多个文件。

常用参数:

-b以字节为单位进行分割 ,仅显示行中指定直接范围的内容
-c以字符为单位进行分割 , 仅显示行中指定范围的字符
-d自定义分隔符,默认为制表符”TAB”
-f显示指定字段的内容 , 与-d一起使用
-n取消分割多字节字符
--complement补足被选择的字节、字符或字段
--out-delimiter指定输出内容是的字段分割符

假设有一个学生报表信息,包含 No、Name、Mark、Percent:

[ ~]# cat student.txt No Name Mark Percent 01 tom   69   91 02 jack  71   87 03 alex  68   98

使用 -f 选项提取指定字段(这里的 f 参数可以简单记忆为 --fields的缩写):

[ ~]# cut -f 2 student.txt Nametom jackalex

--complement 选项提取指定字段之外的列(打印除了第二列之外的列):

[ ~]# cut -f2 --complement student.txt No Mark Percent 01  69   91 02  71   87 03  68   98

使用 -d 选项指定字段分隔符:

[ ~]# cat student2.txt No;Name;Mark;Percent 01;tom;69;91 02;jack;71;87 03;alex;68;98
[ ~]# cut -f2 -d";" student2.txt Name tom jack alex
[ ~]# cat test.txt abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz

打印第 1 个到第 3 个字符:

[ ~]# cut -c1-3 test.txt abc abc abc abc abc

9.diff命令

diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录 。

常用参数:

-adiff预设只会逐行比较文本文件
-b不检查空格字符的不同
-W在使用-y参数时,指定栏宽
-x不比较选项中所指定的文件或目录
-X您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件
-y以并列的方式显示文件的异同之处
--help查看帮助信息
--left-column在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容
--suppress-common-lines在使用-y参数时,仅显

参考实例

比较两个文件:

[ ~]# diff log2014.log log2013.log

并排格式输出:

[ ~]# diff log2014.log log2013.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2014-03               | 2013-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-07               | 2013-08
2013-09                 2013-09
2013-10                 2013-10
2013-11               <
2013-12               <
[ test3]# diff log2013.log log2014.log  -y -W 50
2013-01                 2013-01
2013-02                 2013-02
2013-03               | 2014-03
2013-04                 2013-04
2013-05                 2013-05
2013-06                 2013-06
2013-07                 2013-07
2013-08               | 2013-07
2013-09                 2013-09
2013-10                 2013-10
                      > 2013-11
                      > 2013-12

注意:”|”表示前后2个文件内容有不同,”<“表示后面文件比前面文件少了1行内容,”>”表示后面文件比前面文件多了1行内容。

2.7 文件目录管理命令

1.touch命令

touch命令有两个功能:一是创建新的空文件,二是改变已有文件的时间戳属性。

常用参数:

-a改变档案的读取时间记录
-m改变档案的修改时间记录
-r使用参考档的时间记录,与 --file 的效果一样
-c不创建新文件
-d设定时间与日期,可以使用各种不同的格式
-t设定档案的时间记录,格式与 date 命令相同
--no-create不创建新文件
--help显示帮助信息
--version列出版本讯息

实例:

touch file.txt创建空文件
touch file{1..5}.txt批量创建文件
touch -a file.txt修改文件的access(访问)时间
touch -d "2017-05-04 15:44" anaconda-ks.cfg同时修改atime与mtime

2.mkdir

mkdir命令用来创建目录。

常用参数:

-p递归创建多级目录
-m建立目录的同时设置目录的权限
-z设置安全上下文
-v显示目录的创建过程

实例:

mkdir dir在工作目录下,建立一个名为 dir 的子目录
mkdir -m 700 /usr/linuxcool/dir在目录/usr/linuxcool下建立子目录dir,并且设置文件属主有读、写和执行权限,其他人无权访问
mkdir dir1 dir2 dir3同时创建子目录dir1,dir2,dir3:
mkdir -p linuxcool/dir递归创建目录
mkdir -p-m 750 bin/os_1在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问

3.cp命令

cp命令可以将多个文件复制到一个具体的文件名或一个已经存在的目录下,也可以同时复制多个文件到一个指定的目录中。

常用参数:

-f若目标文件已存在,则会直接覆盖原文件
-i若目标文件已存在,则会询问是否覆盖
-p保留源文件或目录的所有属性
-r递归复制文件和目录
-d当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l对源文件建立硬连接,而非复制文件
-s对源文件建立符号连接,而非复制文件
-b覆盖已存在的文件目标前将目标文件备份
-v详细显示cp命令执行的操作过程
-a等价于“dpr”选项

实例:

cp -R dir1 dir2/复制目录
cp -f test1 test2将文件test1改名为test2
cp -r file1 file2 file3 dir复制多个文件
cp -r /usr/linuxcool/*.c dir交互式地将目录 /usr/linuxcool 中的所有.c文件复制到目录 dir 中
cp aaa/* /bbb复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
cp -r -a aaa/* /bbb依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb

4.mv命令

mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。

常用参数:

-i若存在同名文件,则向用户询问是否覆盖
-f覆盖已有文件时,不进行任何提示
-b当文件存在时,覆盖前为其创建一个备份
-u当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

实例:

mv file_1 file_2将文件file_1重命名为file_2
mv file /dir将文件file移动到目录dir中 
mv /dir1 /dir2将目录dir1移动目录dir2中(前提是目录dir2已存在,若不存在则改名):
mv /dir1/* .将目录dir1下的文件移动到当前目录下

5.rm命令

rm命令可以删除一个目录中的一个或多个文件或目录

常用参数:

-f忽略不存在的文件,不会出现警告信息
-i删除前会询问用户是否操作
-r/R递归删除
-v显示指令的详细执行过程

实例:

rm -i test.txt.bz2删除前逐一询问确认
rm -f test.txt.bz2直接删除,不会有任何提示
rm -rf /data/log递归删除目录及目录下所有文件
rm -rf *删除当前目录下所有文件
rm -rf /*清空系统中所有的文件

6.dd

dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数作用
if输入的文件名称
of输出的文件名称
bs设置每个“块”的大小
count设置要复制“块”的个数

实例:

dd if=/dev/hdb of=/dev/hdd将本地的/dev/hdb整盘备份到/dev/hdd
gzip -dc /root/image.gz | dd of=/dev/hdb将压缩的备份文件恢复到指定盘
dd conv=ucase由标准输入设备读入字符串,并将字符串转换成大写后,再输出到标准输出设备
dd if=testfile_2 of=testfile_1 conv=ucas将testfile文件中的所有英文字母转换为大写,然后转成为testfile_1文件:
dd if=/dev/sda of=/dev/sda修复硬盘

7.file命令
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

常用参数:

-b列出辨识结果时,不显示文件名称 (简要模式)
-c详细显示指令执行过程,便于排错或分析程序执行的情形 
常与 -m 一起使用,用来在安装幻数文件之前调试它
-f指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称
-L直接显示符号连接所指向的文件类别
-m指定魔法数字文件
-v显示版本信息
-z尝试去解读压缩文件的内容
-i显示MIME类别

实例:

file install.log显示文件类型
file -b install.log显示文件类型,不显示文件名称
file -b -i install.log显示文件类型, 显示MIME类别,不显示文件名称
2.8 打包压缩与搜索命令

1.tar 

利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

常用参数:

-A新增文件到以存在的备份文件
-B设置区块大小
-c建立新的备份文件
-C <目录>切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录
-d记录文件的差别
-x从归档文件中提取文件
-t列出备份文件的内容
-z通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-Z通过compress指令处理备份文件
-f<备份文件>指定备份文件
-v显示指令执行过程
-r添加文件到已经压缩的文件
-u添加改变了和现有的文件到已经存在的压缩文件
-j通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v显示操作过程
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-w确认压缩文件的正确性
-p保留原来的文件权限与属性
-P使用文件名的绝对路径,不移除文件名称前的“/”号
-N <日期格式>只将较指定日期更新的文件保存到备份文件里
-- -exclude=<范本样式>排除符合范本样式的文件
-- -remove-files归档/压缩之后删除源文件

实例:

tar -cf all.tar *.jpg将所有.jpg的文件打成一个名为all.tar的包:
tar -cvf linuxcool.tar linuxcool --remove-files打包文件之后删除源文件:
tar -zcvf log.tar.gz linuxcool.log打包文件以后,以 gzip 压缩:

2.grep

全面搜索正则表达式,并将其打印出来。这个命令可以结合正则表达式使用,它也是linux使用最为广泛的命令。

常用参数:

-i搜索时,忽略大小写
-c只输出匹配行的数量
-l只列出符合匹配的文件名,不列出具体的匹配行
-n列出所有的匹配行,显示行号
-h查询多文件时不显示文件名
-s不显示不存在、没有匹配文本的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-x匹配整行
-r递归搜索
-q禁止输出任何结果,已退出状态表示搜索是否成功
-b打印匹配行距文件头部的偏移量,以字节为单位
-o与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

实例:

grep zwx file_* /etc/hosts支持多文件查询并支持使用通配符
grep -c zwx file_*输出匹配字符串行的数量
grep -n zwx file_*列出所有的匹配行,并显示行号
grep -vc zwx file_*显示不包含模式的所有行
grep -h zwx file_*不再显示文件名
grep -l zwx file_*只列出符合匹配的文件名,不列出具体匹配的行
grep -s zwx file1 file_1不显示不存在或无匹配的文本信息
grep -r zwx file_2 *递归搜索,不仅搜索当前目录,还搜索子目录:
grep zw* file_1匹配整词,以字面意思去解释他,相当于精确匹配
grep -x zwx file_*匹配整行,文件中的整行与模式匹配时,才打印出来
grep -q zwx file_1不输出任何结果,已退出状态表示结果
grep -c ^$ file_1查找一个文件中的空行和非空行
grep ^z.x file_1匹配任意或重复字符用“.”或“*”符号来实现

3.find命令

find命令用于按照指定条件来查找文件

常用参数

-name按名称查找
-size按大小查找
-user按属性查找
-type按类型查找
-iname忽略大小写

实例:

find /etc -name "*.conf使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:
find /etc -size +1M使用-size参数查看/etc目录下面大于1M的文件:
find $HOME -print查找当前用户主目录下的所有文件
find .列出当前目录及子目录下所有文件和文件夹
find /home -name "*.txt"在/home目录下查找以.txt结尾的文件名
find /var/log -iname "*.log"在/var/log目录下忽略大小写查找以.log结尾的文件名
http://find . -type f -atime +7搜索超过七天内被访问过的所有文件
http://find . -type f -amin +10搜索访问时间超过10分钟的所有文件
find /home ! -name "*.txt"找出/home下不是以.txt结尾的文件

常用参数:

-num指定每屏显示的行数
-lmore在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p先清除屏幕再显示文本文件的剩余内容
-c与-p相似,不滚屏,先显示内容再清除旧内容
-s多个空行压缩成一行显示
-u禁止下划线
+/pattern在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

相关推荐