1、linux命令格式
我们刚登录之后,总会看到这个这个东西:
[root@localhost ~]#
中括号[]没有特别的意思,root这块是指的用户名,@也没有特殊含义,localhost是主机名,这里用的是默认的主机名localhost。指的是当前所在目录,就是家目录的意思,家目录是用户一登陆所在的目录。超级管理员的家目录是/root,普通用户的家目录是/home/username/,用户是什么名,username就是什么目录。#是提示符,超级管理员的提示符是#,普通用户的提示符为$。
现在我们来看一下linux的命令格式:命令 [选项] [参数]
,两个中括号的意思是不必填,有的命令可能没有选项或者参数。
注意:这个格式是绝大多数命令的格式,有的命令不是这个格式,但很少见。
当有多个选项时,可以写在一起。
简化选项等同于完整选项,例如-a
等同于--all
。
1)查看目录内容命令ls
ls [选项] [文件或目录]
ls 显示当前目录下的文件或目录;
选项:
-a 显示所有文件,包括隐藏文件;
-l 显示详细信息;
-d 查看目录属性;
-h 人性化显示文件大小;
-i 显示inode;
Linux中通过权限位第一位来区分文件类型,共七种。以应用ls -l举例:
第一位 -表示普通文件, d代表目录, l代表软连接 ls -l /etc/
- --- --- ---
共十位,后九位每三个表示,u所有者,g所属组,o其他人
r读 w写 x执行
例如:
crw-rw---- 1(引用计数) root(所有者) root(组权限)
drwxr-xr-x 3 user user 4.0K(大小) 2010-05-07 14:38(最后一次修改时间) user(文件名)
ls -a ,wenjian 一般用来隐藏系统文件,linux中以.
开头的文件都是隐藏文件。
如果想查看目录本身 ls -ld /etc/
ls -i 查看文件ID号
(2)目录处理命令
linux中一切皆文件。目录为目录文件。普通文件用来保存数据,目录文件用来保存文件。
1)建立目录(make directories)mkdir
mkdir [-p] [目录名]
其中-p :递归创建,当创建多级目录时需加。
例:
mkdir light
mkdir -p imooc/linux/light
2)切换目录(change directories)cd
cd [目录名]
cd ~/
进入当前用户的家目录
cd
也是进入当前用户的家目录
cd -
进入上次目录
cd ..
进入上一级目录
cd .
进入当前目录
pwd
(print working directory) 查看当前所在目录
Ctrl+l
清屏
3)删除空目录(remove empty directories)rmdir
rmdir [目录名]
删除目录(只能删除空目录)
4)删除目录或文件(remove)rm
rm [-rf] [文件或目录]
选项 -r :删除目录;选项 -f :强制
rm [文件名]
提示是否删除
rm -r [目录]
删除目录需加 -r ,目录中含有子文件,将持续询问是否删除
rm -rf [目录]
删除目录, 不会询问是否删除而直接进行
注意:纯字符界面没有回收站。注意自杀指令:rm -rf /
rm -rf /tmp/*
删除tmp目录下的内容
rm -rf /tmp/
删除tmp目录
建议:删除文件或目录习惯使用命令rm -rf [文件或目录]
。
5)复制目录或文件命令(copy)cp
cp [选项] [原文件或目录] [目标目录]
选项 -r :复制目录;
选项 -p :连带文件属性复制;
选项 -d :若原文件是链接文件,则复制链接属性;
选项 -a :相当于 -pdr 全选;
例子:
cp abc /tmp/
若目标目录不加文件名,则为原名复制
cp abc /tmp/ana
若目标目录后加入文件名,则为改名复制
cp -r japan/ /tmp/
复制目录
cp -a japan/ /tmp/
完全复制,包括所有属性
被复制文件的时间为执行复制命令的时间,若要使被复制的文件与原文件属性完全一致,需加 -a。
6)剪切或改名命令(move)mv
mv [原文件或目录] [目标目录]
mv japan/ /tmp/
注意:剪切目录时不需加 -r
mv abc longls
当原文件与目标目录,在同一目录下,则为改名命令
(3)常见目录
/
:根目录
/boot
:启动目录,启动相关文件。
/dev
:设备文件保存目录。
/etc
:系统配置文件保存目录,此目录常用。
/home
:普通用户的家目录。
/lib
:系统函数库的保存目录。操作系统中并没有把所有功能都写入linux中,而将常用的功能写成一个个程序库,此些库保存在lib中,当需要时调用即可。避免全部写入linux中,使其无比庞大且运行缓慢。
/mnt,/media,/misc
:系统挂载目录。习惯于在mnt下创建CD-ROM来挂载光盘,在mnt下创建USB来挂载U盘。原因在于linux早期版本中不存在media、misc目录。
/root
:超级用户的家目录。
/tmp
:临时目录。用于存放临时数据。
/proc
和/sys
:直接写入内存的,这两个目录保存的是内存的过载点。不能往其中写入数据,因为数据一旦写入内存当中,一旦重启就会丢失,并且内存有大小限制。
/var
:系统相关文档内容。
/bin
:命令保存目录(普通用户就可以读取的命令)。
/sbin
:命令保存目录(超级用户才能使用的目录)。
/usr
:系统软件资源目录。
/usr/bin/
:保存系统命令(普通用户)。
/usr/sbin/
:保存系统命令(超级用户)。
注:根目录下的bin和sbin,usr目录下的bin和sbin,这四个目录都是用来保存系统命令。其中,bin目录下的命令任何用户都可以执行,sbin目录下只有root才可以执行。linux使用此方式来区分用户权限。
做练习推荐在在超级用户家目录root或普通用户的家目录home下。其他目录不要随意写入。
(4)链接命令(link)ln
ln [-s] [原文件] [目标文件]
生成链接文件
选项 -s 创建软链接
1)硬链接
硬链接和源文件拥有相同的i节点和存储block块,可以看做是同一个文件。(在格式化时,第一将分区划分为等大小的block数据块,该数据块通常为4KB。第二建立分区表,并为每个文件建立一个相关数据。当用户搜索某个文件时,会先到分区表中查找文件所对应的block存储位置,接着到相应位置取出,并返回给用户。)硬链接与原文件拥有相同的i节点。因此,与原文件非常相似。当删除原文件或硬链接文件的任何一文件,不影响文件索引操作。可看做,同一个文件的不通进入点。它是同样的存储空间。
硬链接可通过i节点识别,但不能跨分区建立,也不能针对目录使用,只有文件才可以创建。
ln ./source/abc ./target/bcd.hard
创建后,引用计数+1
ls -i ./source/abc ./target/bcd.hard
可使用ls -i 来查看文件i节点号
注意:不建议创建硬链接文件,因为文件太过隐蔽,除了有i节点这样一个标识之外,很难区分它是不是硬链接;其次硬链接限制较多,不能跨分区,不能针对目录,使用当中容易出现错误使用方法。
2)软连接
软链接类似于Windows快捷方式,软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据。(拥有自己的分区表中索引数据,通过索引找到分区表中文件的目标索引数据,再通过目标索引数据,查找数据)。
软链接文件权限都为rwxrwxrwx, 虽然权限显示为777,但实际权限需要看原文件权限。修改任意文件,另一个都改变。但删除原文件,软链接不能使用。创建软链接,原文件一定要写绝对路径。否则,软链接会到它所在的同一目录去找原文件。
2、文件搜索命令
(1)locate
locate 文件名
在后台数据库中按文件名搜索,搜索速度更快。
对于新建的文件,由于数据库没有更新,使用locate 不能查到。可以使用 updatedb强制更新数据库后即可查到。
可使用 locate locate 搜索locate相关文件,可看到locate数据库。
在不同linux中,该数据库名字稍微不同,例如,locatedb、slocate、mlocate。
在/var/lib/mlocate
文件中保存的搜索数据库,这个数据库不是实时的,更新频率大概一天更新一次。
使用updatedb
命令可以即时更新locate数据库。
locate优点是快,缺点是只能按照文件名进行搜索。这个命令还比较常用。
locate搜索遵循配置文件 /etc/updatedb.conf, 在PRUNEPATHS 中配置了/tmp/目录不进行搜索。所以/tmp/里的文件不会搜索。
/etc/updatedb.conf 配置文件中
PRUNE_BIND_MOUNTS = "yes"
,开启搜索限制,yes为后面三项都生效。no为 后面三项都不生效;
PRUNEFS =
,搜索时,不搜索的文件系统;
PRUNENAMES =
,搜索时,不搜索的文件类型。
PRUNEPATHS =
搜索时,不搜索的路径。
(2)命令搜索命令whereis
和witch
whereis 命令名
-b:只查找可命令所在位置
-m:只查找帮助文档所在位置
例:搜索ls命令在哪:whereis ls
。
by the way,查看当前用户命令:whoami
,查看一个命令是干什么的:whatis 命令名
。
witch 命令名
不仅能看到命令的路径,如果有别名,还能看到别名。
注:whereis和which不能看到shell的自带命令(如:cd),只能看到外部安装的外来命令。
$PATH
环境变量,类似Windows的PATH环境变量,执行命令的时候都要在path定义的目录中去寻找。所以像ls这样的命令就可以不用加绝对路径(/bin/ls)执行了。
如果自己写的脚本在运行时不想要具体的绝对目录,需要在$PATH设置路径。
(3)find
find [搜索范围] [搜索条件] 文件名
其中搜索条件包括:
-iname,不区分大小写;
-user,按照所有者搜索;
-nouser,查找没有所有者的文件。
通常来说,除了两个内存目录和外接设备目录(U盘,光盘)内的文件没有所有者之外,其他的没有所有者的文件,都是linux里的垃圾文件。
例子:find /home -name 文件名
注意:避免大范围的搜索,会非常浪费系统资源,建议不在直接在“/”目录下搜索,在服务器繁忙的时段也避免大量使用find命令。
find搜索默认是完全匹配。如果需要进行模糊查询,需要添加通配符,通配符有以下3种:
*
匹配任意字符,例:find /home -name "*test*"
(注意一定要加"",否则系统识别不出来),显示所有名字带test的文件;或例:find /home -name "*"
,home目录下的所有文件,包括隐藏文件。
?
匹配任意一个字符,
[]
匹配任意一个中括号内的字符,例:find /home -name "test[12]"
,显示test1和test2文件;或find /home -name "[12]*"
,显示以1和2开头的文件。
组合使用:例:find /home -name "*[12]"
,显示所有1和2结尾的文件。
时间搜索条件包括:
-mtime 时间: 在指定时间内内容被修改的文件。
-atime 时间: 在指定时间内被访问的文件。
-ctime 时间: 在指定时间内属性被修改的文件。
例如:
find /home -mtime +10
在home目录下,查找10天前修改的文件
find /home -mtime 10
在home目录下,查找10天前当天修改的文件
find /home -mtime -10
在home目录下,查找10天内修改的文件
按文件大小条件搜索条件:
-size 文件大小。
-a:表示and
-o:表示or
文件大小必须加单位,例如k、M。
例如:
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
,表示查找etc目录下的在20k到50k之间的文件。
其中-exec 其他命令 {} \;
固定格式,表示直接对前面的搜索结果进行后面的文件命令处理。上面的例子就是查找etc目录下的在20k到50k之间的文件,然后对他们进行ls -lh
处理。
(4)grep
命令
grep [选项] 字符串 文件名
,寻找匹配符合条件字符串的内容的文件
选项:
-i:忽略大小写
-v:排除制定字符串
例子:grep "size" anaconda-ks.cfg
,即搜索anaconda-ks.cfg文件中包含“size”的内容。
find命令与grep命令的区别
find:在系统中搜索符合条件的文件名,使用通配符(完全)匹配。
grep:在文件当中搜索符合字符串内容的文件,使用 正则表达式 (包含)匹配。
3、帮助命令
(1)man
命令
man [条件] [命令名]
,获取指定命令的帮助。
例:man ls
,即查看ls命令的帮助。
常见选项:
-f,查看命令有哪个级别的帮助,相当于whatis [命令名]
。如不打级别,则man命令默认打开最小等级的信息。
例:man -f passwd
,即有两个级别:1和5。如只输入“man passwd”,即只显示1级别的帮助。如查看5级别passwd帮助,即man -5 passwd
。
man -f ifconfig
,可得知ifconfig命令级别为8。
-k,查看和命令相关的所有帮助,相当于apropos [命令名]
。
例:man -k passwd
,查看与passwd相关的帮助。
(2)其他帮助命令
1)--help
命令 --help
获取选项帮助
例如:ls --help
2)help
“help”是获取shell内部命令帮助的工具
help 命令
“whereis”可以用来判断一个命令是否是shell内部命令,“ls”在/bin/下面有可执行文件,说明“ls”命令不是shell内部命令,“cd”命令在/bin/下面没有相应的可执行文件,所以是shell自带的命令。
例如:help cd
3)info
“info”里面内容十分繁琐,是关于命令的一个巨大的帮助文档,里面有各个版本对于此命令
的说明。
操作说明:
按回车:进入带*号的说明
按u: 进入上层页面
按n: 进入下一个帮助小节
按p: 进入上一个帮助小节
按q: 退出
4、压缩命令
常用压缩格式有:.zip, .gz, .bz2, .tar, .gz, .tar, .bz2。
(1)zip压缩格式
Windows系统和linux系统的zip格式文件是可以互相通用的。
压缩文件命令:zip 压缩文件名 源文件
压缩目录命令:zip -r 压缩文件名 源目录
建议压缩文件名一定要代后缀,这样人才能区分清楚是不是压缩文件。
解压缩文件命令:unzip 压缩文件
(2)gzip压缩格式
压缩文件命令:
gzip 源文件
,该命令,源文件会直接变成压缩文件,源文件无保留;
gzip -c 源文件 > 压缩文件
,该命令,源文件会写入到一个新的文件中去,新文件即压缩文件,源文件保留。
压缩目录命令:
gzip -r 源目录
,该命令压缩目录,但目录本身不会压缩,只能压缩目录内的文件。
解压缩文件命令:gunzip 压缩文件(或目录)
或者gzip -d 压缩文件(或目录)
。
(3)bzip压缩格式
压缩文件命令:
bzip2 源文件
,该命令,源文件会直接变成压缩文件,源文件无保留;
bzip2 -k 源文件
,该命令会保留源文件。
该格式没有目录的压缩命令QAQ。
解压缩文件命令:bunzip2 压缩文件
或者bzip2 -d 压缩文件
。
(4)tar打包命令
打包:
tar -cvf 打包文件名 源文件
,将文件打包。
选项:
-c 打包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -cvf longlz.tar longlz
解包:
tar -xvf 已打包文件
,将文件解包。
选项:
-x 解包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -xvf longlz.tar
(5)压缩tar.gz和tar.bz2命令
1)tar.gz
打包:
tar -zcvf 压缩包名.tar.gz 源目录
,将文件打包并压缩为.tar.gz格式。
选项:
-z 打包为tar.gz;
-c 打包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -cvf jp.tar.gz jp
,jp是目录。
解包:
tar -zxvf 压缩包名.tar.gz
,将.tar.gz格式的压缩包解压。
选项:
-z 压缩包为tar.gz;
-x 解包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -cvf jp.tar.gz jp
。
tar -zxvf jp.tar.gz -C /tmp/
,解压缩到指定目录/tmp/,注意选项-C和指定目录必须放在后面。
tar -ztvf jp.tar.gz
,不解压,只查看压缩包的内容。
2)tar.bz2
打包:
tar -jcvf 压缩包名.tar.bz2 源目录
,将文件打包并压缩为.tar.bz2格式。
选项:
-j 打包为tar.bz2;
-c 打包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -jcvf jp.tar.bz2 jp
,jp是目录。
解包:
tar -jxvf 压缩包名.tar.gz
,将.tar.bz2格式的压缩包解压。
选项:
-j 压缩包为tar.bz2;
-x 解包;
-v 显示打包过程;
-f 指定打包后的文件名。
例如:tar -jxvf jp.tar.bz2 jp
。
tar -jxvf jp.tar.bz2 -C /tmp/
,解压缩到指定目录/tmp/,注意选项-C和指定目录必须放在后面。
tar -jtvf jp.tar.bz2
,不解压,只查看压缩包的内容。
5、关机重启命令
(1)shutdown
格式:shutdown [选项] 时间
选项:
-h 关机
-r 重启
-c 取消全一个关机命令
shutdown -r now
立马重启
其他关机命令有halt
、poweroff
、inti 0
也都可以关机,但没有shutdown安全。
reboot
和 init 6
也可以重启,reboot比较安全,但后者不太安全。
举例:
shutdown -h 05:30
设定凌晨05:30关机
shutdown -h now
立即关机
shutdown -r 05:30
设定凌晨05:30重启
shutdown -r now
立即重启
shutdown -c
取消前一个关机或重启命令
说明:
①以上定时关机或重启命令执行后,计算机就会卡在那里,当前用户和其他登录的用户都将无法操作,直到关机或重启。这个时候,如果当前用户按ctrl+c可以取消本次关机或重启的操作,而其他用户如果按ctrl+c的话,则不会取消关机或重启操作,但可以退出中断,继续进行其他操作。
②如果想要关机命令后台运行的话,可以在命令后面输入&,例如:shutdown -h 05:30 &
,这样当前用户和其他登录用户的前台就不会中断了(若中断的话,按一下回车即可);
③任何时候,不管哪个用户输入shutdown -c
命令都可以取消关机或重启操作。
④后面的时间可以使用【+m】格式,表示多少分钟后执行。也可以使用【hh:mm】格式,表示指定的时间执行,该时间是24小时制的;
⑤若远程登录的话,最后不要执行关机命令,因为开机需要到机房开机才行。重启也尽量少执行,若必须运行,则应关闭正在运行的服务;
(2)init
功能:切换系统运行级别:
格式:init <级别>
级别:
·0 //关机
·1 //单用户(类似windows安全模式)
·2 //不完全多用户,不含NFS服务(字符界面,不包含文件共享服务)
·3 //完全多用户(字符界面)
·4 //未分配
·5 //图形界面
·6 //重启
在配置文件/etc/inittab中可以修改系统级别配置文件,其中id:3:initdefault
为定义系统默认运行级别(id后的数字则为系统级别),不能是0和6。修改用Vim就可以。
runlevel
命令查看运行级别输出格式为:上一级别 当前级别
;
logout
退出当前用户,也就是注销。
6、挂载命令(可理解为分配盘符)
(1)mount
格式:
mount
:查询系统中已挂载的设备
mount [-t 文件系统] [-o特殊选项] 设备 文件名 挂载点
选项:
-a 依据配置文件/etc/fstab的内容,自动挂载;
-t 文件系统:加入文件系统类型来指定挂载的类型,ext3,ext4,iso9660(光盘)等文件系统
-o 特殊选项:可以指定挂载的额外选项,具体如下图所示:
注意:Linux中任何一个空目录(无论在哪)都可以作为挂载点,系统默认准备了三个空目录作为挂载点:media、misc和mnt。
扩展知识:
编写一个shell脚本文件,输入vim hello.sh
显示如下:
#!/bin/bash //脚本命令必须的开头
echo “hello!” //输出命令
chmod 755 hello.sh //赋予执行权限
执行脚本:./hello.sh
举例:
mount -o remount,noexec /home/
:重新挂载/home分区,使用noexec(不执行)权限;
mount -o remount,exec /home/
:重新赋予权限。
(2)挂载光盘
1)挂在前必须先放入光盘到物理机。若是虚拟机,则要设置ISO镜像文件,即在【已连接】复选框打上勾;
2)挂载步骤:先建立挂载点(创建空目录),然后挂载光盘。
mkdir /mnt/cdrom/
:此操作为建立挂载点,只要是空目录就可以,这个空目录等同于media目录;
mount -t iso9660 /dev/sr0 /mnt/cdrom/
或mount /dev/sr0
() /mnt/cdrom/`:挂载光盘,cdrom是sr0的软连接。
(3)卸载光盘umount
格式:
umount 设备文件名或挂载点
;
举例:
umount /mnt/cdrom/
或umount /dev/sr0
,二者等效。
(4)挂载优盘命令
fdisk -l
:查看系统中已经识别的硬盘。
mount -t vfat /dev/sdb1 /mnt/usb/
:将sdb1优盘挂在到usb/目录中。其中-t 选项的vfat指的是fat32文件系统。
**注意:Linux默认不支持NTFS文件系统的,可以下载ntfs-3g软件安装,但是ntfs格式只能是只读,通常为移动硬盘。
7、其他
(1)w命令
格式:w
功能:显示当前系统登录用户
显示项目如下:
user:登陆的用户名
tty:登陆终端
from:从哪个IP地址登陆
login@:登陆时间
idle:用户闲置时间
jcpu:和终端连接所有进程占用的时间
pcpu:当前进程所占用的时间
what:正在运行的命令
(2)who命令
格式:who
功能:显示当前系统登录用户
显示项目如下:
用户名
登录名
登陆终端
登录时间(登陆来源IP地址)
(3)last 命令
格式:last
功能:查询当前和过去登录的用户信息,改命令默认读取var/log/wtmp文件,该文件是一个二进制文件。
显示内容:
用户名
登录终端
登陆IP
登录时间
退出时间(在线时间)
(4)lastlog 命令
格式:lastlog
功能:查看所有用户最后一次登录信息,lastlog命令默认是读取/var/log/lastlog文件内容,该文件是一个二进制文件。
显示内容:
用户名
登录终端
登陆ip
最后一次登陆时间