Linux命令-基础命令
man、ls、cd、
mkdir、touch、rm、
cp、mv、ln、
find、cat、more、
less、tail、head、
echo、mount
寻求帮助:man
命令格式:man 命令
运行后出现的画面叫man page,其中关键段落如下:
- Name 命令名
- Synopsis 命令文法纲要
- Description 命令、选项、参数等的详细说明
- See Also 相似或相关命令
在 man page 当中可以按的键有:
-
空白键:往下翻一页;
-
page up:往上翻一页;
-
page down:往下翻一页;
-
Home:回到最前页;
-
End: 去最后页;
-
/word:搜寻 word 这个单词。
-
q:退出man page
列文件和目录:ls [选项]
常见选项:
ls -l
长列表的各个字段的含义
变换目录:cd [路径]
建立目录:mkdir Directory
创建文件 / 修改文件时间戳:touch (选项) (参数)
- 创建文件:
touch test.c
(原来不存在test.c) - 修改文件最后修改时间(ls -l 可以查看)
touch test.c
(若是test.c 已经存在,会将 test.c的最后修改的时间改为现在系统的时间)
touch -t 201210121230 hh.sh
(修改hh的最后修改时间为 2012年10月12日)
删除: rm [option] file
常用选项:
- -r:删除目录
- -f:强制删除
删除/home/abc下所有e开头的文件
rm /home/abc/e*
无需交互式提示删除/home/abc下所有文件
rm -f /home/abc/*
无需提示删除/home/abc目录及其所有子目录和文件
rm -rf /home/abc
复制: cp [option] source dest
常用选项:-r 用于复制目录
将1.txt文件复制到 /home/abc下
cp 1.txt /home/abc
将ttt目录及其下级所有子目录和文件都复制到/home/hhh目录,如果不存/home目录下不存hhh目录,会把ttt目录复制到/home目录下,并且改名为hhh
cp -r ttt /home/hhh
移动/改名:mv [option] source dest
将1.txt移动到/home/abc下并重命名为2
mv 1.txt /home/abc/2
将当前目录下所有文件移动到/home/abc下
mv * /home/abc
把目录abc改名成net03
mv abc net03
连接:ln [options] file target
ln命令用来给文件建立多个名字。这样可以方便的节约空间或通过不同名字引用同一文件。
硬连接:ln file targetfile
- 不用任何参数;
- 源文件与目标文件须在同一文件系统
- 只能用于文件连接;
- 源文件和目标文件都引用同一个inode(索引节点)和盘上相同的数据(文件内容)。
符号连接:ln –s file target
- 目标文件指向源文件的路径和名字而不是它的数据(相当于window的快捷方式)。
- 符号连接对所有命令是透明的(除ls和rm)
- 目标文件指向一个新的inode,不同于源文件的inode
硬连接、符号连接、复制关系简明图:
查找文件:find [paths] [expression] [actions]
find 命令接受一个或多个路径(paths)作为搜索范围,并在该路径下递归地搜索。即检索完指定的目录后,还会对该目录下的子目录进行检索,以及子目录下的子目录。。。直到到达目录树底部。
默认情况下(不带任何搜索条件),find 命令会返回指定目录下的所有文件,所以常常需要通过特定的 expression 对结果进行筛选。
find 命令默认的 action 是将所有检索结果打印至标准输出。可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作。
1. 根据文件名检索
find 命令中的 -name 选项可以根据文件名称进行检索(区分大小写)。如需要忽略文件名中的大小写,可以使用 -iname 选项。
-name 和 -iname 两个选项都支持 wildcards 。如:
- ? 可以表示任意一个单一的符号
- 可以表示任意数量(包括 0)的未知符号
find /usr -name '*.txt'
查找 /usr 目录下所有文件名以 .txt 结尾的文件
find /usr -name '????'
查找 /usr 目录下所有文件名刚好为 4 个字符的文件
有些时候,你需要在搜索时匹配某个文件或目录的完整路径,而不仅仅是匹配文件名。可以使用 -path 或 -ipath 选项。
如查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src。可以使用以下命令:
find /usr -path '*/src/*.txt'
2. 根据文件类型检索
如果只想搜索得到文件或目录,即不想它们同时出现在结果中。可以使用 -type 选项指定文件类型。
-type 选项最常用的参数如下:
f
: 普通文件d
: 目录l
: 符号链接
find /usr -type d -name ‘python*’ 检索 /usr 下所有文件名以 python 开头的目录
3.反义匹配
find 命令也允许用户对当前的匹配条件进行“反义”(类似于逻辑非操作)。
如需要检索 /usr 下所有文件名不以 .txt 为后缀的文件。可以使用以下命令:
find /usr -type f ! -name '*.txt'
也可以“翻转”任何其他的筛选条件,如:
find /usr -type f ! -empty
检索 /usr 下所有内容不为空的文件
4.根据文件大小检索
-size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小……)。
表示文件大小的单位由以下字符组成:
- c:字节
- k:Kb
- M:Mb
- G:Gb
另外,还可以使用 +
或-
符号表示大于或小于当前条件。
find / -size +1G
检索文件大小高于 1 GB 的文件
5.限制遍历的层数
find 命令默认是以递归的方式检索项目的,这有时候会导致得到的结果数量非常巨大。可以使用 -maxdepth 限制 find 命令递归的层数。
find / -maxdepth 3
搜索时向下递归的层数最大为 3
6. 逻辑组合
在之前的例子中有出现多个搜索条件的组合以及对某个搜索条件的反转。
实际上 find 命令支持 “and” 和 “or” 两种逻辑运算,对应的命令选项分别是 -a 和 -o。通过这两个选项可以对搜索条件进行更复杂的组合。
此外还可以使用小括号对搜索条件进行分组。注意 find 命令中的小括号常需要用单引号包裹起来。因小括号在 Shell 中有特殊的含义。
如检索 /usr 下文件名以 python 开头且类型为目录的文件
find /usr -type d -name 'python*'
该命令等同于:
find /usr -type d -a -name 'python*'
更复杂的组合形式如:
find / '(' -mmin -5 -o -mtime +50 ')' -a -type f
7.对搜索结果执行命令
- 删除文件
-delete 选项可以用来删除搜索到的文件和目录。
如删除 home 目录下所有的空目录:
find ~ -type d -empty -delete
- 执行自定义命令
-exec 选项可以对搜索到的结果执行特定的命令。
如需要将 home 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive),可使用下面的命令:
find ~ -type f -name '*.mp3' -exec cp {} /media/MyDrive ';'
其中的大括号({}
)作为检索到的文件的 占位符 ,而分号( ;
)作为命令结束的标志。因为分号是 Shell 中有特殊含义的符号,所以需要使用单引号括起来。
每当 find 命令检索到一个符合条件的文件,会使用其完整路径取代命令中的 {},然后执行 -exec 后面的命令一次。
另一个很重要的用法是,在多个文件中检索某个指定的字符串。
如在用户主目录下的所有文件中检索字符串 hello ,可以使用如下命令:
find ~ -type f -exec grep -l hello {} ';'
-exec 选项中的 + 符号
创建 Gzip 格式的压缩文件的命令为:tar -czvf filename.tar.gz <list of files>
现在假设需要将用户主目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中,直观的感觉是,其命令应为如下形式:
find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} ';'
实际情况是,这样得到的 music.tar.gz 其实只包含一个 MP3 文件。
原因是 find 命令每次发现一个音频文件,都会再执行一次 -exec 选项后面的压缩命令。导致先前生成的压缩包被覆盖。
可以先让 find 命令检索出所有符合条件的音频文件,再将得到的文件列表传递给后面的压缩命令。完整的命令如下:
find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} +
显示文件信息
如果想浏览搜索到的文件(目录)的详细信息(如权限和大小等),可以直接使用 -ls 选项。
find / -type file -size +1G -ls
浏览所有 1G 以上大小的文件的详细信息
cat命令
cat 主要有三大功能:
1.一次显示整个文件:
cat filename
2.从键盘创建一个文件:
cat > filename
只能创建新文件,不能编辑已有文件。
3.将几个文件合并为一个文件:
cat file1 file2 > file
more 命令
功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space
)就往下一页显示,按 b
键就会往回(back
)一页显示。
less 命令
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
head 命令
head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
常用参数:
-n<行数> 显示的行数
(行数为负数表示从最后向前数)
实例:
(1)显示 1.log 文件中前 20 行
head 1.log -n 20
(2)显示 1.log 文件前 20 字节
head -c 20 log2014.log
(3)显示 t.log最后 10 行
head -n -10 t.log
- -f 循环读取(常用于查看递增的日志文件)
- -n<行数> 显示行数(从后向前)
(1)循环读取逐渐增加的文件内容
ping 127.0.0.1 > ping.log &
后台运行:可使用 jobs -l 查看,也可使用 fg 将其移到前台运行。
tail -f ping.log
echo 命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
1.显示普通字符串:
echo "It is a test"
2.显示结果定向至文件
echo "It is a test" > myfile
注意:“挂载点”的目录需要以下几个要求:
(1)目录事先存在,可以用mkdir命令新建目录;
(2)挂载点目录不可被其他进程使用到;
(3)挂载点下原有文件将被隐藏。
挂载方法:mount DECE MOUNT_POINT
[root@localhost /]# fdisk -l
...
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 5 Extended
/dev/sdb5 2101248 2306047 102400 83 Linux
/dev/sdb6 2308096 2512895 102400 83 Linux
/dev/sdb7 2514944 2719743 102400 83 Linux
/dev/sdb8 2721792 2926591 102400 83 Linux
...
[root@localhost /]# mount /dev/sdb8 /device
[root@localhost /]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/CentOS-root 18307072 4724136 13582936 26% /
devtmpfs 485368 0 485368 0% /dev
tmpfs 500664 84 500580 1% /dev/shm
tmpfs 500664 7160 493504 2% /run
tmpfs 500664 0 500664 0% /sys/fs/cgroup
/dev/sda1 508588 142620 365968 29% /boot
tmpfs 100136 20 100116 1% /run/user/42
tmpfs 100136 0 100136 0% /run/user/0
/dev/sdb8 98988 5280 93708 6% /device