常用linux命令
获取命令帮助
命令帮助格式
[ ] :可选
| :多选1
<> :必选
... :可出现多次
{} :分组
1.内部命令帮助:
help COMMAND
2.外部命令帮助:
COMMADN --help #大多数外部命令支持(简要说明)
3.命令手册:
用来存储在linxu系统上的手册页面,分章节显示,共8个章节,如下:
1.用户命令:所有用户都可以使用的命令
2.系统调用:
3.库调用:
4.特殊文件:设备文件,不是真正文件,指作为设备的访问入口存在,不存储任何内容
5.文件格式:解释命令对应配置文件的语法,如 #man 5 paswd 表示查看passwd命令配置文件/etc/passwd的内容说明
6.游戏
7.杂项:不便归类的命令
8.管理命令:管理员才可使用的命令
man命令显示结果:
标题 描述
Name 显示命令的名称和简介
Synopsis 显示命令的格式
Description 描述每个命令的选项
Author 提供该命令开发人员的信息
Reporting Bugs 提供提交bug报告的途径
Copyright 提供该命令源代码的版权信息
See Also 推荐查看相似的命令
语法:
man [节号] COMMAND #外部命令一般用此命令(详细说明,内部命令一般用方法1),节号取值范围:1-8
1.翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
2.查找:
/KEYWORD:向后查找KEYWORD
n:下一个
N:前一个
?KEYWORD:向前查找KEYWORD
n:下一个
N:前一个
3.退出man:q
备注: man命令不指定节号,按章节号顺序查找,查找到停止。
whatis COMMAND #显示命令在哪些章节
#man man #显示man命令的帮助手册
4.在线文档:
info COMMAND #用的较少
5.命令帮助目录
/usr/share/doc
文件/目录管理命令
目录是特殊文件
节点:linux内核通过“节点”来识别每个文件,即每个文件都有一个节点号。
设备文件: linux将硬件设备当成特殊的文件,称为设备文件,包括:字符型设备文件、块设备文件、网络设备文件。
数据对:每个设备文件都有一个数值对,包括:主设备号、次设备号。同一个硬件设备上的设备文件的主设备号相同,次设备号不同,如sda划分2个分区,sda1和sda2
创建普通文件
文件命令规则:
1.长度不能超过255个字符
2.文件名不能含/
3.严格区分大小写
文件数据组成:
1.实际数据:
就是文件中的内容
2.元数据:
主要是描述文件(数据)属性的信息,如:访问权限、文件拥有者、访问、修改、改变时间,以及文件数据块的分布信息(Inode...即索引号),以支持指示存储位置、文件记录、历史数据、资源查找等功能。
文件包含3个时间:
access time:最后一次文件被访问的时间----
modify time:最后一次文件被修改的时间----文件实际数据的修改时间
change time:最后一次文件被改变的时间----文件元数据的变化时间,即文件属性改变的时间,包括权限,大小,属性等等
总结:当仅读取或访问文件(vim或cat命令)时,access time改变,而modify、change time不变
当修改文件内容时,modify time,change time会改变,access time不一定变,如:echo >> 追加内容时,access time不变
当修改文件权限、文件拥有者等元数据时,change time会改变,access、modify时间不会变
1.touch 修改文件时间戳
-a 只修改文件的访问时间(access time)
-m 只修改文件的修改时间(modify time)
-t 指定时间
-c 不创建文件,只修改文件时间戳
#touch -a -t 20100801100000 testfile1 #修改文件访问时间为2010-08-01 10:00:00 #touch -m -t 20110801100000 testfile1 #修改文件的modify时间 #touch -c testfile1 #修改已存在文件的access time和modify time 备注: 以上3条命令均修改了文件的属性,所以文件的改变时间会自动变为当前系统时间。 不加-t选项,默认修改为当前系统时间。
2.文本编辑器
文本编辑器:只能编辑ASCII文件,ASCII只能存储纯文本。
备注:word处理工具不是文本编辑器,是字处理器。
1)nono
2)vim
创建链接文件
链接文件是目录中指向文件真实位置的占位符,在linux中,有两种链接文件:
1.硬链接
1)只能对文件创建硬链接(不能对目录)
2)不能跨文件系统创建,即不能在不同挂载点之间创建。
3)索引值与原文件一样,删除原文件,硬链接还在。
4)文件大小与原文件一样
5)创建硬链接,会增加文件被链接的次数
创建SRC文件的硬链接名为DEST: 方法1:ln SRC DEST 方法2:cp -l SRC DEST
2.软链接
1)创建软链接会产生一个新的索引值
2)不同挂载点之间,也可创建软链接。
3)删除原文件,软链接将不可用
4)文件很小,只存储文件信息,不存储文件数据。
创建SRC文件的软链接名为DEST: 方法1:ln -s SRC DEST
方法2:cp -s SRC DEST
stat 查看文件属性(文件元数据)
stat FILENAME #查看结果包括:文件access、modify、change time,文件大小、权限等信息。
-f 查看文件系统状态
file 查看文件类型
file命令将文件分成3类:
1.文本文件:包含可打印字符的文件
2.可执行文件:可在系统上运行的文件
3.数据文件:包含不可打印二进制字符、又不能在系统上运行的文件
ELF:可执行可链接文件的存储格式,也是可执行二进制文件格式,在windows叫PE
#file /bin/ls #executable表示是一个可执行程序 /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
rm 删除文件
-i 交换式,即给个删除提示,y删除,n不删除
-f 强行删除,不提示
-r 递归删除目录
-rf 递归删除目录,不提示
\COMMADN #使用原生的命令
系统默认设置rm是rm -i的别名,使用\rm命令删除文件时,会以rm原本命令含义执行,即不会交互式提示。
备注:linux没有回收站,文件一旦删除,就不会找回
mkdir 创建空目录
-p 创建多级目录
-v 打印详细信息
mkdir -p a/b/c #逐级创建,当前目录下a目录,则创建目录a,a目录下无b目录,创建b目录,b目录下创建c目录
mkdir ..abc #当前目录下,创建隐藏文件
rmdir 删除空目录
-p 逐级删除
mv 移动文件
移动文件,文件的索引号、访问时间、修改时间不变,改变时间变为执行mv命令时的系统当前时间。
mv一个带有软链接的文件后,软链接将不可用(硬链接不受影响)
mv SRC DEST #不同目录为移动,相同目录为重命名
-i 交互式
-f 强制
-t DEST SRC #把SRC和DEST参数位置颠倒。
cp 复制文件
复制产生是一个新文件,有自己的索引号。
cp SRC... DEST #SRC可用有多个,SRC为多个时,DEST必须是一个目录
-r 复制目录,递归拷贝
-f 强制复制
-i
-p 保留原文件的属主、属组和时间戳(复制时,保留原文件的文件属性)
-P 保持链接属性,即原文件如果是一个链接文件,复制后也是一个链接文件。
-d 等同于-P
-L 原文件如果是一个链接文件,复制后的文件是原链接指向的文件。(默认)
-a 保持链接属性,归档复制,常用于备份。等 同于-rd
install 复制文件
只能复制文件,且可以指定属性
-d DIRECTIORY... 创建目录
-t DEST SRC... 将SRC复制到DEST
tree 查看目录树
树型方式显示目录的结构
ls 列目录
-l 长格式显示
-a 显示所有隐藏文件 .表示当前目录 ..表示上以级目录
-R 递归显示
-A 显示所有隐藏文件,但不显示.和..
-d 显示目录自身属性
-i 显示文件节点号
-r ASCII降序显示(默认升序显示)
-h 单位换算,默认为k
-F 文件和目录区分显示
-s 块大小
#ls -l
-rw-r--r-- 1 root root 0 Dec 12 2013 abc
显示分8段(如上8种颜色),依次是:
文件类型:
- 普通文件
d 目录文件
b 块设备文件
c 字符设备文件
l 符号链接文件
p 命令管道文件
s 套接字文件
文件权限:
9位,每3位为1组,每一组rwx(读、写、执行,无权限的位用横线-表示),分别代表文件属主、文件属组、其他用户的权限
rw-r--r-- #表示文件属主权限是读、写,文件属组权限是只读,其他用户权限是只读。
文件硬链接的次数:
文件的属主:
文件的属组:
文件大小(size):单位为字节
时间戳(timestamp):最近一次修改的时间
文件名:
如果文件是设备文件,则没有文件大小这列,用设备号取代。
crw-rw---- 1 root video 10, 175 Jun 22 00:42 agpgart
主设备号,次设备号:10, 175
#ls -lh
drwxr-xr-x. 2 root root 4.0K May 17 17:35 script
# ls -ild /root
129541 dr-xr-x---. 3 root root 4096 Jun 20 03:45 /root #标红为节点号
#ls -F
proc.tcl* test/ #文件名后面跟斜线表示目录,文件名后跟星号表示可执行的文件。
cd 切换目录
cd ~ 切换到用户的home目录
cd ~USERNAME 进入USERNAME用户的home目录
cd - 在前一个目录和当前目录之间来回进行切换
cd .. #回到上级目录
cd ../.. #回到上上级目录
文件查找 find
实时查找,精确匹配,遍历指定目录中的所有文件完成查找,所以查找慢。支持正则匹配
格式:
find 查找路径 查找标准 查找到后的处理动作
查找路径:默认当前路径
查找标准:
-name 'FILENAME' 对文件名进行匹配,支持通配符
-iname 'FILENAME' 文件名匹配时,不区分大小写。
-regex PATTERN 基于正则表达式查找
-user USERNAME 根据文件的属主进行查找
-group GROUPNAME 根据属组进行查找
-uid UID 根据UID进行查找
-gid GID 根据GID进行查找
-nouser 查找没有属主的文件
-nogroup 查看没有属组的文件
-type 根据文件类型查找
f 普通文件
d 目录
。。。
-size 根据文件大小查找,默认单位B
[+|-]单位 # +表示大于,-表示小于,无+-符号表示等于,单位有k、M、G
eg: +10k 大于10k的文件 10k表示等于10k的文件
组合条件查找
-a:与,条件需同时满足(默认)
-o:或,条件只需满足其一
-not:非,条件取反
eg: find /tmp -nouser -o -type d
时间戳查找
-mtime 修改时间(天)
-ctime 改变时间(天)
-agtime:访问时间(天)
[+|-] 天数 # +5 大于5天,-5小于5天 5等于5天
备注:也支持-mmin、-cmin、-amin,不过单位是分钟
权限查找
-perm [-|/]MODE #MODE取值范围000~777(分别表示属主、属组、其他用户3个权限)
MODE :待查找的文件的9位权限必须精确等于MODE权限,才能匹配成功
-MODE :待查找的文件的9位权限必须完全包含MODE权限,才能匹配成功
/MODE:待查找文件的9位权限当中任何一位匹配,才能匹配成功。
find ./ -perm -644 # 文件权限若为644、755则可用匹配上,若为751则匹配不上。
处理动作:默认动作、打印到屏幕上
-print 显示
-ls #显示每个文件的详细信息,等同于ls -l
-ok COMMAND {} \; # {}表示查找出来的文件名,COMMAND表示执行的命令,ok比较交互式
eg: find ./ -perm -006 -ok chmod +x {} \ #对所有查找条件的文件,进行+x权限,执行加权限时,提供提示。
-exec COMMAND {} \; 与上一条功能类似,至少执行命令时,不提示
eg: find ./ -perm -020 -exec mv {} {}.new \; #查看属 组有写权限的文件,并修改其文件名为: 原文件名.new
eg:
find /var -user root -group mail #查看/var目录下属主是root,属组是mail的所有文件
查找/usr/目录下不属于root,bin或student的文件
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \(-user root -o -user bin -o -user student\)
查找当前系统上没有属主或属组且最近1天内被访问过的文件,将其属主、属组均修改为root
find /\( -nouser -o -nogroup\) -a -atime -1 -exec chown root:root {} \;
查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中
find /etc -size +1M echo >> /tmp/etc.largefiles
文本处理命令
查看文本
1.cat
-n 打印行号
-E 打印行结束符,linux系统行结束符是$,windows系统是$+回车键,Notepad++文本工具,可以设置行尾技术符为$
-A 打印所有字符,包括:不可见的字符。
-s 当相邻有多个空白行时,只保留单个空白行。
-T 将制表符替换为^I
2.tac
与cat功能类似,不过是倒叙显示(最后1行显示在第1行,依次类推)
3.more 分屏显示
space:后翻一屏
b:前翻一屏
enter:后翻一行
翻到最后自动退出
4.less 分屏显示
space:后翻一屏
b:前翻一屏
enter:后翻一行
k:前翻一行
翻到最后不会退出
5.head 查看文件的前n行,默认10行
-n :显示前n行
6.tail 查看文件的后n行,默认10行
-n:显示后n行
-f:等待显示后续追加到此文件的新内容,一般用于对日志文件监控
文本裁剪 cut
-d 指定字段分割符,默认为1个空格
-f 指定要显示的字段
-f 3 显示第3个字段
-f 1,3 显示第1、3字段(离散用逗号)
-f 1-3 显示第1到第3字段(连续用横线)
-f 1-3,5 显示第1-3、5字段,可组合使用
文本裁剪 sort
sort命令默认按ASCII升序排序
-r 降序排序
-n 数字升序
-t 字段分割符
-k 指定按第哪个字段进行排序
-u 排序后,相邻重复行只显示1次
-f 排序时,忽略字母大小写
sort -t: -k3 /etc/passwd #指定冒号为分割符,对第3个字段进行排序。
报告相邻重复行 uniq
-d 只显示相邻重复行(重复行只显示1次)
-c 打印文件中每行的相邻重复的次数
-D 显示所有相邻重复行
文本统计 wc
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
-m 只显示字符数
-L 显示最长的1行所包含的字符个数
# wc /etc/fstab
15 78 779 /etc/fstab 行数 单词数 字节数 文件名
字符处理 tr
格式:tr [OPTION]... SET1 [SET2]
tr -d 删除指定字符
#tr 'ab' 'CD' happy boy! hCppy Doy! #tr -d 'ab' happy boy! hppy oy! #tr 'a-c' 'hmt' < /etc/passwd #文件passwd中所有字符a替换为h,字符b替换为m,字符c,替换为t
文本过滤 grep
格式:
grep [option] pattern [file] #grep使用基本正则表达式
选项:
-i:匹配时,忽略大小写。
-v:反向查找,显示没有被模式匹配的行
-n:显示匹配模式的行所在的行号
-c:指定多个匹配模式
--color:匹配字符串加颜色,默认加红色
-A num: 显示匹配模式成功的行及后面的几行(after)
-B num:显示匹配模式成功的行及前面的几行(before)
-C num:显示匹配模式成功的行及前后各几行
-o 只显示被模式匹配到的字符串
-E 使用扩展正则表达式(EBR)
-h 当在多个文件中,进行文本过滤时,不显示文件名称,只显示匹配的模式
练习题:exercise
1.找出某文件中的1位数,或2位数
grep -E '[0-9]{1,2}' /proc/cpuinfo
2.显示当前目录所有文件中,内容含“hello”的行
#grep "hello" `find ./ -name *`
./1:hello
./def:hello world
备注:显示格式 : 文件名:内容含"hello"的行
#grep -h "hello" `find ./ -name *` # -h选项,只显示匹配的文本内容。
hello
hello wrold
关于正则表达式的使用,见正则表达式博文
文本过滤 egrep
与grep功能类似,使用EBR引擎匹配
其他
date 时间管理
linux有2个时钟:
硬件时钟:即BIOS时间,纽扣电池给晶体振荡器供电,保证掉电时间不丢失。称为RTC(real time clock)
系统时钟:即linux系统内核时间,linux启动时,系统内核会读取硬件时钟的设置,系统启动后,系统时钟独立运行。
晶体振荡器:实现计时功能的器件
硬件时钟命令:
硬件时钟查看:hwclock --show | clock --show #不加--show也可用
硬件时钟设置:hwclock --set --date="08/04/16 09:20:10" (月/日/年 时:分:秒) 或者clock --set --date="08/04/16 09:20:10"
系统时钟命令:
语法: date [OPTION] ... [+FORMAT]
date -s 08/04/15 #将日期设置为2015-8-14
date -s 08:21:10 #将时间设置为09:20:10
date 0701092016.30 #将时间设置为206-07-01 09:20:30
date #查看当前系统时间
date -u #查看系统时间对应的UTC时间(格林威治标准时间)
格式化显示时间:
date +%
%M 年
%m 月
%d 日
%n 换行
%T 时:分:秒
%F 年-月-日 等同于%M-%m--%d
%H 时
%S 秒
%s 自1970-01-01 00:00:00 至现在经过的秒数,时间戳。
eg:
#date +"This yesr is: %Y. %n Today is %d."
This year is 2013.
Today is 26.
时钟同步:
hwclock
-w #将系统时间同步到硬件时间。
-s #将硬件时钟同步到系统时间。
cal 日历
cal 2013 #显示2013年日历
cal 12 2013 #显示2013年12月日历
printf 格式化打印
printf "The year is 2013.\nToday is 26.\n"
备注:printf默认无换行符,使用\n指定换行符
echo 显示消息
echo
-n #去掉行尾的换行符(默认有换行符)
-e #反斜线逃逸字符,让转义符有意义。
#echo -e “This year is 2017.\nToday is 22” #不加-e选项,\n会当作普通字符显示,而不是换行符 This year is 2017. Today is 22 #echo -e "hello world\b. hello beijing."
hello worl. hello beijing.
常见转义字符:
\n 换行符
\t 横向制表符,tab键
\v 纵向制表符
\b 退格:即删除前一字符。
\033 控制字符
颜色设置
echo -e
\033 :控制符,表示后面的字符接受控制
eg:
echo -e "\033[1;31;46mHello\033[0m,world."
Hello,world
解释:
有多个设置值有多个时,使用分号隔开:如配置字体、背景色、字体颜色、加粗之间,需要使用分号隔开
1:字体加粗
3x:字体颜色
4x:字体背景颜色
x取值:
0:正常色
1:红色
2:绿色
3:黄色
4:橙色
5:紫色
6:蓝色
7:白色
m:针对字体本身生效(最后一项设置于m之间不用也不能加分号)
引用
'' :强引用(一对单引号),让引号中的内容保留原意,不支持变量替换。$被当作普通字符
“”:弱引用(一对双引号),让引号中的内容保留原意,支持变量替换
备注:
引号本身不输出,要显示单引号,外面用双引号括起来。反之亦然。
# echo "THis's is a book" THis's is a book
命令行展开
1.花括号:以逗号隔开
mkdir /mnt/test/{a,d}_{b,c} #创建/mnt/test目录下,创建a_b、a_c、d_b、d_c四个目录
type 查看命令类型
type [OPTION] COMMAND #查看命令的类型,内置、别名、外部命令
-t #简洁显示
builtin:内置命令
alias:别名
file:外部命令
-p # 若COMMAND为外部命令,则显示完整文件名,否则不显示。
[root@localhost ~]# type whoami whoami is /usr/bin/whoami [root@localhost ~]# type -t whoami file [root@localhost ~]# type -p whoami /usr/bin/whoami
which 查看命令执行路径
# which pwd
/bin/pwd
whoami 查看当前登陆名
#whoami
root
who 查看当前所有登陆会话
-r 查看运行级别
-H 打印列标题
#who -H
NAME LINE TIME COMMENT #列标题
root tty1 2017-06-22 00:44
root pts/0 2017-06-22 00:47 (192.168.10.100)
root pts/1 2017-06-22 02:13 (192.168.10.100)
last系列命令 显示登陆
1.last #显示/var/log/wtmp文件,显示用户登陆历史及系统重启历史
-n x 显示最近x次的相关信息。
2.lastb #显示/var/log/btmp文件,显示用户错误的登陆尝试
-n x 显示最近x次的相关信息
3.lastlog #显示每个用户最近一次的成功登陆信息
-u USERNAME #显示用户USERNAME最近的登陆信息。