Linux常用命令:
练习3遍以上,命令有点多,建议慢慢查看
一、命令基本格式
1.命令格式:
[root(管理员)@localhost(主机名)~]#(超级用户提示符,普通用户提示符是$) adminis
/root一级目录用pwd print working directory(打印工作目录)查看
/home/user1/二级目录
[root@localhost ~]# cd /usr/local/src/ 切换当前目录
[root@localhost src]#
命令[选项] [参数] 中括号表示可选
注意:个别命令使用时不遵循此歌诗,当有多个选项时,可以写在一起简化选项和完整选项
-a 等于--all
2.查询目录中内容:ls [选项] [文件或目录]
选项:
-a all,显示所有文件,包括隐藏文件,隐藏文件以点"."开头,.bashrc,隐藏是防止误操作
-l 显示详细信息 longlist长显示
-d 查看目录属性direct
-h 人性化显示文件大小human
-i 显示inode 即i节点
权限:默认10位 - rw- r-- r--
-文件类型(最主要的三种:-文件 d目录 |软链接文件)
另外四种文件类型:块设备文件,字符设备文件,套接字文件和管道pipe文件
rw- r-- r--
user所有者 g所属组 o其他人
-rw-r--r--. l root root 1207 1月 14 18:18 anaconda-ks.cfg
解释:
-rw-r--r--:权限分布
.:点.可能代表ACL权限
l:引用次数 ,被调用计数
1207:字符大小,一般是字节 # ls -lh:显示字符后单位,方便阅读h,human人性化
第一个root:所有组,主人
第二个root:所属组,用户组
1月14 18:18:最后一次修改的时间
记忆:r读read,w写write,x执行execute
二、文件处理命令
1.目录处理命令
目录同样是文件,目录用于保存文件
(1).建立目录:mkdir make directories
mkdir -p [目录名]
-p 递归创建,先创建上级目录,再创建第二级目录
[root@localhost ~]# mkdir -p japan/cangls
[root@localhost ~]# ls
anaconda-ks.cfg bols install.log install.log.syslog japan
[root@localhost ~]# cd japan/
[root@localhost japan]# ls
cangls
(2).切换所在目录:cd change directory切换目录
简化操作:
cd ~ 进入当前用户的家目录
cd 进入当前用户的家目录 /Ctrl+L xshell清除屏幕
cd -进入上次目录
cd .. 进入上一级目录
cd . 进入当前目录
[root@localhost japan]# cd /root/
[root@localhost ~]# ls
[root@localhost cangle]# pwd
/root/japan/cangls
[root@localhost cangls]# cd~
[root@localhost ~]# cd japan/cangls
[root@localhost cangls]# cd
[root@localhost ~]# cd -
/root/japan/cangls
[root@localhost cangls]# cd -
root
[root@localhost ~]# cd ..
[root@localhost /]# root目录
.相对路径:参照当前所在目录,进行查找
如:[root@imooc ~]# cd ../usr/local/src/
[root@localhost /]# cd
[root@localhost ~]# pwd
/root
[root@localhost ~]#cd ../usr/local/src/ 相对路径发生改变
[root@localhost src]# pwd
/usr/local/src
[root@localhost src]# cd ../usr/local/src/ 路径已经改变,,所以提示错误无法确认到src中的usr目录
-bash : cd: ../usr/local/src/:没有那个文件或目录
[root@localhost src]#
.绝对路径:从根目录开始指定,一级一级递归查找。在任何目录下,都能进入指定位置,更加可靠
如:[root@localhost src]# cd /etc/
[root@localhost src]# cd /etc/
[root@localhost etc]# cd /etc/
[root@localhost etc]# cd /etc/
[root@localhost etc]# cd /etc/
[root@localhost etc]#
命令在任何目录下都可以运行,毕竟是从根目录开始的
如果不记得的目标目录,
[root@localhost src]# cd /(按两下tab)使用tab可以补全命令或者目录
(3).查询所在目录位置:pwd
.pwd :print working directory打印工作目录,显示当前目录
(4).删除空目录:rmdir
.rmdir [目录名]:remove empty directories 删除空目录
[root@localhost ~]# ls
anaconda-ks.cfg bols install.log install.log.syslog japan
[root@localhost ~]# rmdir bols/
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog japan
[root@localhost ~]# rmdir japan/
rmdir:删除 "japan/"失败:目录非空
因为japan里面有文件夹cangls,所以非空无法删除
(5).删除文件或目录:rm
.rm -rf [文件或目录]
命令英文愿意:remove
选项:
-r 删除目录,删除目录时不可缺少
-f 强制
[root@localhost ~]# rm -rf / 删除根目录99%的文件,几乎等于格式化,自杀式命令
(6).复制命令:cp
cp [选项] [原文件或目录] [目标目录]
命令英文愿意:copy
选项:
-r 复制目录
-p 连带文件属性复制
-d 若源文件是链接文件,则复制链接属性
-a 相当于-pdr
[root@localhost ~]# cpanaconda-ks.cfg /tmp/ana(添加这个名字说明复制过去会更改文件名,不填写则复制过去仍是源文件名)
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog japan
[root@localhost ~]# cp japan/ /tmp/ 注意空格一下隔开japan/和/tmp/
cp:略过目录"japan/" 需要添加-r
[root@localhost ~]# cp -r japan/ /tmp/
[root@localhost ~]# ls /tmp/
ana japan yum.log
可以使用ll查看我文件属性和权限分布
[root@localhost ~]# ll 或者写成ls -l
总用量 48
- rw-------. 1 root root 1207 1月 14 20:38 ana
普通复制出来的文件时间新旧文件时间不一致
[root@localhost ~]# cp -pdr
复制出来的文件和源文件属性等全部一致
(7)剪切或改名命令:mv
mv [原文件或目录][目标目录]
英文原意:move
剪切不区分文件和目录,不加-r
[root@localhost ~]# mv japan/ /tmp/japan1 不在同一个目录下是剪切
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ls
ana anaconda-ks.cfg japan japan1 yum.log
改名:
[root@localhost tmp]# mv anaconda-ks.cfg longls 在同一个目录下就变成改名了
[root@localhost tmp]# ls
ana japan japan1 longls yum.log
常用一级目录的作用:
/根目录
/bin 命令保存目录(普通用户就可以读取的命令)
根目录/下的bin和sbin,usr目录下的bin和sbin四个目录都是用来保存系统命令的,sbin只有root才能使用,普通用户不行sbin,super bin
/boot 启动目录,启动相关文件
/dev 设备配置文件保存目录
/etc 配置文件保存目录
/root 超级用户的家目录
/home 普通用户的家目录
/lib 系统库保存目录,常用函数库
/mnt 系统挂载文件,cd-rom挂载光盘,usb挂载U盘
/media 挂载目录
/misc 空目录,最后三个是用挂载目录
使用规范,约定俗成的目录名
/proc/直接写入内存
/sys/
proc和sys目录是不能直接操作的,用来保存内存的过载点
不能用来存放数据,首先内存不能永久保存,而且存放会使系统变慢
/var 系统相关文档的内容
/tmp 存放临时文件
总结:可以在家目录root或home,以及tmp目录下随便放内容
根目录只存放必要的文件
(8).链接命令:ln
ln -s [原文件][目标文件]
命令英文原意:link
功能描述:生成链接文件
选项: -s 创建软链接 soft
.硬链接特征:
1、拥有相同的i节点和存储block块(一般4KB一个block),可以看做是同一个文件
相当于一个存储文件的不同的获取入口,镜像一样存储double份
2、可以通过i节点识别
3、不能跨分区
4、不能针对目录使用
[root@localhost ~]# ls
anacondalks.cfg cangls install.log install.log.syslog
[root@localhost ~]# ln /root/anaconda-ks.cfg /tmp/ana.hard
[root@localhost ~]# ll
总用量 44
-w--------. 2 root root 1207 1月 14 18:18 anaconda-ks.cfg
...
[root@localhost ~]# ll /tmp/
总用量 12
-w--------. 2 root root 1207 1月 14 18:18 ana.hard,引用计数都加1
通过任意方式打开修改后,通过另外一个仍可以查看文件,权限一致,其实就是同一个文件
缺陷:不能跨分区,不能针对目录
.软链接特征:
1、类似windows快捷方式,方便打开
2、软链接拥有自己的i节点和block块,但是数据块中保存原文件的文件名和i节点号,并没有实际的文件数据,是原文件的i节点和block块
3、lrwxrwxrwx |软链接
软链接文件权限都为rwxrwxrwx,查看软链接文件的权限,区别于原文件
4、修改任意文件,另一个都改变
5、删除原文件,软链接不能使用
限制少,而且灵活
[root@localhost ~]# ls
anacondalks.cfg cangls install.log install.log.syslog
[root@localhost ~]# ln -s /root/anaconda-ks.cfg /tmp/cangls.soft
[root@localhost ~]# ln /root/cangls /tmp/cangls.hard
[root@localhost ~]# ll
总用量 40
-rw-r--r--. 2 root root 1207 1月 14 22:00 cangls
...
[root@localhost ~]# ll -i
262419 -rw-r--r--. 2 root root 0 1月 14 22:00 cangls
262147 -rw-r--r--. 1 root root 24772 1月 14 18:17 install.log
...
[root@localhost ~]# ll -i /tmp/
262418 -rw--------. 1 root root 1216 1月 14 22:36 ana.hard
932110 -rw-r--r---. 1 root root 0 1月 14 22:00 cangls
262419 -rw-r--r--. 2 root root 0 1月 14 22:00 cangls.hard
932061 lrwxrwxrwx. 1 root root 12 1月 14 22:46 cangls.soft -> /root/cangls
其中rwx是指访问软链接的权限,不是原文件的权限,主要分析inode,权限变化,引用计数
...
使用[root@localhost ~]# cat /tmp/cangls.hard
[root@localhost ~]# cat /tmp/cangls.soft
查看文件
做软链接需要使用绝对目标,否则会难以查找,或者在同一目录下修改
三、文件搜索命令:
1.文件搜索命令locate
速度快,但只能按照文件名搜索
格式:locate 文件名,只能通过文件名来搜索
在后台数据库中按文件名搜索,搜索速度快
[root@localhost ~]# locate install,log
/root/install.log
/root/install.log.syslog
是否可以搜索新建文件?
[root@localhost ~]# touch cangls
[root@localhost ~]# locate cangls
[root@localhost ~]# 搜索不到,因为数据库未更新,每天更新一次
/var/lib/mlocate
#locate命令所搜索的后台数据库
[root@localhost ~]# updatedb
[root@localhost ~]# locate cangls
/root/cangls
updatedb
更新数据库
但是,
[root@localhost ~]# touch /tmp/cangls
[root@localhost ~]# updatedb
[root@localhost ~]# locate cangls
/root/cangls
没有出现/tmp/cangls
原因:locate搜索是按照/etc.updatedb.conf配置文件来进行搜索的
而 PRUNEPATHS = tmp,即tmp不再搜索路径
详情:
PRUNE_BIND_MOUNTS="yes"
#开启搜索限制,限制全部生效,当是“no”时不搜索
PRUNEFS =
#搜索时,不搜索的文件系统
PRUNENAMES =
#搜索时,不搜索的文件类型
PRUNEPATHS =
#搜索时,不搜索的路径
2.命令搜索命令whereis与which,用来搜索系统命令
(1).whereis 命令名,只能查系统文件命令
#搜索命令所在路径及帮助文档所在位置
选项:
-b :只查找可执行文件
-m :只查找帮助文件
[root@localhost ~]# whereis ls
ls:/bin/ls /usr/share/man/man1/ls.l.gz .usr/share/man/manlp/ls.lp.gz
后面的是帮助文档的位置
[root@localhost ~]# whoami 查看我是谁
root
[root@localhost ~]# whatis ls 查询这条命令的作用*
ls (l) - list directory contents显示目录
ls (lp) - list directory contents
[root@localhost ~]# whereis -b ls只看可执行文件位置
ls: /bin/ls
[root@localhost ~]# whereis -m ls只查看帮助文档位置
ls: /usr/share/man/man1/ls.l.gz /usr/share/man/manlp/ls/lp/gz
(2).which 命令名,除了查看位置,还能查看到别名
#搜索命令所在路径及别名
[root@localhost ~]# which ls
alias ls='ls --color=auto'颜色显示
/bin/ls
[root@localhost ~]# whereis cd #cd属于shell内置命令
cd: /usr/share/man/manl/cd.l.gz /usr/share/man/manlp/cd/lp/gz
[root@localhost ~]# which cd
/usr/bin/which:no cd in()
whereis和which的搜索路径都依赖PATH所定义的路径
补充:
要想直接执行执行脚本或者执行命令,就应该使用绝对路径
PATH环境变量
PATH环境变量:定义的是系统搜索命令的路径
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
用冒号分割的不同命令,说明在这些目录里搜索需要的命令,搜索到后执行,如果搜索完之后都没有找到,就会提示错误
执行个人脚本时,应当记住绝对路径或者存放到PATH所要求的路径之中
3.文件搜索命令find
耗费资源,全部遍历
find [搜索范围][搜索条件]
#搜索文件
(1).find / -name install.log
#避免大范围搜索,这会耗费系统资源
#find是在系统当中搜索符合条件的文件名,使用通配符匹配,通配符是完全匹配的
[root@localhost ~]# ls
abc abd install.log install.log.syslog
[root@localhost ~]# find / -name install.log
/root/install.log
你会发现没有install.log.syslog,其实find默认是精确搜索,如果要模糊搜索需要使用到通配符
(2).Linux中的通配符:
* 匹配任意内容
? 匹配任意一个字符
[] 匹配人一个中括号内的字符,像python的range(),从里面选通配符
[root@localhost ~]# ls
abc abd install.log install.log.syslog
[root@localhost ~]# find / -name "install.log*"
/root/install.log
/root/install.log.syslog
[root@localhost ~]# ls
abc abd install.log install.log.syslog
[root@localhost ~]# find /root -name "ab[cd]"
abc
abd
如果没有ab只是[cd]说明只是搜索c或者d的文件,可以使用*[cd]查找结尾包含c或d的所有文件
(3).另外:
find /root -iname install.log
#不区分大小写
find /root -user root
#按照所有者搜索
[root@localhost ~]# find /root -user root
/root
...
find /root -nouser
#查找没有所有者的文件
[root@localhost ~]# find /root -nouser
没有所有者的文件是垃圾文件,但是有一些特殊文件:
1).系统内核自己产生的没有所有者,如果是在sys,proc中产生
2).外来数据,光盘,u盘,移动数据
a)find /var/log/ -mtime +10
#查找10天前修改的文件
详细分为三种:
find /var/log/ -mtime -10 10天内修改的文件
find /var/log/ -mtime 10 10天当天修改的文件
find /var/log/ -mtime +10 10天前修改的文件
atime 文件访问时间 access time访问时间
ctime 改变文件属性 change time修改时间
mtime 修改文件内容 modify time修改时间
b)find -size 25k
#查找文件大小是25kB的文件
详细情况也分为三种:
-25k 小于25kB的文件
25K 等于25kB的文件
+25K 大于25kB的文件
注意:k是小写,M是大写,不然报错
find:无效的 -size 类型 "m","K"
不写单位也不行,大小是以块为单位的,一般大小是4kB,如果没单位如25是表示25个扇区(默认是512kB)的容量大小
d)find -inum 262421
#查找i节点是262421的文件
[root@localhost ~]# ls -i
262242 abc 262421 abd
[root@localhost ~]# find -inum 262421
/root/abd
e)find /etc -size +20k -a -size -50k
#查找/etc/目录下,大于20kB且小于50kB的文件
-a and 逻辑与,两个条件都需要满足
-o or 逻辑或,两个条件只需要满足一个即可
find /etc -size +20k -a -size -50k -exec ls -lh{}\;
#find命令执行结果通过-exec让第二个命令ls -lh进行处理
#查找/etc/目录下,大于20kB并且小于50kB的文件,并显示详细信息
#-exec/-ok命令{}\;对搜索结果执行操作
4.字符串搜索命令grep
grep [选项]字符串 文件名
#在文件当中匹配符合条件的字符串
选项:
-i 忽略大小写 ignore忽略
-v 排除指定字符串 即搜索不包含字符串的
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# grep "size" anaconda-ks.cfg
#part /boot --fatype=ext4 --size=200
#part /boot --fatype=ext4 --size=2000
#part swap --size=512
#part / --fstype=ext4 --grow --size=200
可以用cat查看文件
5.find命令与grep命令的区别
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,则使用通配符匹配,通配符是完全匹配,就是搜索的结果和条件一模一样
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配,结果只需要包含搜索条件就可以
四、帮助命令
1.帮助命令man;manual,文档的缩写
man 命令
#获取指定命令的帮助
man ls
#查看ls的帮助
LS(1(命令级别)) User Commands
NAME 命名
ls -list directory contents
SYNOPSIS格式
ls [OPTION]...[FILE]....
可以直接使用/-d查看ls -d的帮助内容,按n往下依次浏览,按Shift+n往上浏览
man的级别:命令级别
1: 查看命令的帮助
2: 查看可悲内核调用的函数的帮助
3: 查看函数和函数库的帮助
4: 查看特殊文件的帮助
5: 查看配置文件的帮助
6: 查看游戏的帮助
7: 查看其他杂项的帮助
8: 查看系统管理员root可用命令的帮助
9: 查看内核相关文件的帮助
[root@localhost ~]# man -f passwd
passwd (1) - update user's authentication token
passwd (5) - password file
passwd [sslpasswd] (lssl) -compute password hashes
[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd(命令位置) /etc/passwd(配置文件位置) /usr/share/man/manl/passwd.1.gz(1等级的帮助文件位置) /usr/share/man5/passwd.5.gz(5等级的帮助文件位置)
man -f 命令
#查看命令所拥有的那个级别的帮助信息
相当于
whatis 命令
举例:
man -5 passwd
man -4 null
man -8 ifconfig
[root@localhost ~]# whatis ls
(1) - list directory contents
(1p) - list directory contents
[root@localhost ~]# man -f null
(4) - data sink
[root@localhost ~]# man 4 null
有多个等级号就要指定等级号,不然就会从等级号最小的帮助文档开始打开
man -k 命令
#查看和命令相关的所有帮助文档
相当于
apropos命令
例如:
apropos passwd
2.其他帮助命令
(1).选项帮助命令:
命令 --help 即man ,--help有部分翻译成中文了
#获取命令选项的帮助
例如:
ls --help
(2).shell内部命令帮助,shell壳,内核编译器,用户和系统交互的接口
help shell内部命令
#获取shell内部命令的帮助
例如:
whereis cd
#确定是否是shell内部命令,可以用whereis查看命令位置,如果只有帮助文档,说明是系统内核自带,如果显示出了执行文件,那么说明是后面添加的命令程序
help cd
#获取内部命令帮助,man cd是无法获取内部,然而help无法获得外部命令帮助
(3).详细命令帮助info
info 命令
-回车: 进入子帮助界面(带有*的标记才可以回车)
-u : 进入上层界面,up
-n : 进入下一个帮助小节
-p : 进入上一个帮助小节
-q : 退出quit
五、压缩命令
常用压缩格式: .zip .gz .bz2 .tar.gz .tar.bz2
.rar压缩率高
(1).zip格式压缩
.zip压缩文件名 源文件
#压缩文件
.zip -r 压缩文件名 源目录
#压缩目录
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog longzls
[root@localhost ~]# zip longzls.zip longzls(空文件,所以压缩0%)
adding: longzls (stored 0%)
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog longzls longzls.zip
[root@localhost ~]#
注意:后缀不能缺少,不是因为系统原因,毕竟linux不区分后缀名,但是为了方便管理员管理不应该缺少
压缩文件是有个压缩格式的存储,如果源文件比较小,会发现压缩后文件反而更大,但是当你的压缩文件很大的时候,就会有比较好的效果
[root@localhost ~]# mkdir jp
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog jp longzls longzls.zip
[root@localhost ~]# touch jp/cangls
[root@localhost ~]# touch jp/longls
[root@localhost ~]# touch jp/bols
[root@localhost ~]# zip -r jp.zip jp
(2).zip格式解压缩
unzip压缩文件
#解压缩.zip文件
[root@localhost ~]# unzip jp.zip
(3).gz格式压缩
1).gzip 源文件
#压缩为.gz格式的压缩文件,源文件会消失
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog jp longzls
[root@localhost ~]# gzip longzls
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog jp longzls.gz
2).gzip -c 源文件 > 压缩文件
#-c是将文件内容输出,通过>指向输出位置,实现压缩,原文件也没有消失,如果没有目标,那么将直接输出到屏幕上
#压缩为.gz格式,原文件保留
例如:
gzip -c cangls > cangls.gz
3). gzip -r 目录
#压缩目录下所有的子文件,但是不能压缩目录
补充:.gz可以在windows中解压缩,但是.rar在linux不可以解压缩
[root@localhost ~]# gzip -r jp
[root@localhost ~]# ls
abc abc.gz anaconda-ks.cfg install.log install.long.syslog jp longzls.gz
[root@localhost ~]# cd jp/
[root@localhost jp]# ls
bols.gz cangls.gz longls.gz
压缩了目录下的子文件,但是没有压缩目录
(4).gz格式解压缩
gzip -d 压缩文件
#解压缩文件
gunzip 压缩文件
#解压缩文件
解压缩后,压缩文件会消失,源文件出现,而且解压缩目录时候同样不能缺少-r,即
gunzip -r 压缩文件
(5).bz2格式压缩
bzip2 源文件
#压缩为.bz2格式,不保留源文件
bzip2 -k 源文件 keep保留
#压缩之后保留源文件
注意:bzip2命令不能压缩目录
(6).bz2格式解压缩
bzip2 -d 压缩文件
#解压缩,-k保留压缩文件
bunzip2 压缩文件
#解压缩,-k保留压缩文件
注意:bunzip2同样不能解压缩目录
(7).tar.gz,tar.bz2压缩格式
tar打包,先打包,再压缩
tar -cvf 打包文件名 源文件
选项:
-c:打包
-v:显示过程
-f:指定打包后的文件名
-t: test测试,不解压只查看
例如:
tar -cvf longzls.tar longzls
[root@localhost ~]# tar -cvf jp.tar jp
jp/
jp/bols
jp/longls
jp/cangls
[root@localhost ~]# gzip jp.tar
[root@localhost ~]# ls
abc abc.gz anaconda-ks.cfg install.log install.long.syslog jp jp.tar.gz
通过tar和gzip实现目录的压缩
tar.gz压缩格式:
其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式
tar -zcvf 压缩包名 .tar.gz 源文件
选项:
-z:压缩为.tar.gz格式
tar -zxvf 压缩包名 .tar.gz
选项:
-x: 解压缩.tar.gz格式
tar.bz2压缩格式:
同样.tar.bz2格式也是先打包为.tar格式,再压缩为.bz2格式
tar -jcvf 压缩包名 .tar.bz2 源文件
选项:
-j:压缩为.tar.bz2格式
tar -jxvf 压缩包名 .tar.bz2
选项:
-x: 解压缩.tar.bz2格式
注意前后压缩解压缩的格式一致性,不然会出错
(8).tar.gz,tar.bz2解压缩命令
tar -xvf
选项:
-x:解包
-v:显示过程
-f:指定打包后的文件
-t: test测试,不解压只查看
六、关机重启命令
1.shutdown命令
[root@localhost ~]# shutdown [选项]时间
选项:
-c:取消前一个关机命令 console取消
-h:关机
-r:重启 一般远程重启,很少会远程关机,那么开机要亲自去开机
2.其他关机命令:
[root@localhost ~]# halt
[root@localhost ~]# poweroff
[root@localhost ~]# init 0
都不安全,不会保存当前情况
[root@localhost ~]# reboot 相对安全
[root@localhost ~]# init 6
init 0和init 6数字的意思:系统运行级别
0 关机 不允许设置为系统默认级别
1 单用户
2 不完全多用户,不含NFS服务,NFS文件共享符
3 完全多用户 支持NFS
4 未分配
5 图形界面#需要提前安装Xll,大写X表示图形界面
6 重启 不允许设置为系统默认级别
[root@localhost ~]# cat /etc/inittab
#修改系统默认运行级别
id:3:initdefault:
[root@localhost ~]# runlevel
#查询系统当前运行级别
N 3
N,Null,进入3级别之前是空级别,现在是3级别
[root@localhost ~]# logout
#推出登陆命令
允许同时登陆的用户是有数量要求,所以关机时应该先退出登录
七、挂载命令
挂载相当于windows分配盘符,而盘符在linux称为挂载点
U盘,光盘,移动硬盘重启后都需要重新分配盘符,其他固定盘分配后都会自动挂载
1、查询与自动挂载
[root@localhost ~ ]# mount
#查询系统中已经挂载的设备
[root@localhost ~ ]# mount
/dev/sda5 on / type ext4 (rw) #第一个分区
proc on /proc type proc (rw)
...
dev:所有特殊设备
sda5中的sd:SCSI硬盘接口200MB/s(服务器接口)、SATA硬盘接口SATA3<500MB/s(串口硬盘)
5:第5个分区
补充:
系统分区:
(1)磁盘分区:磁盘分区是使用分区编辑器(partition editor)分几个逻辑部分。碟片一旦划分成数个分区(partition),不同类的目录和文件可以存储近不同的分区(逻辑上)
分区规则:主分区:最多四个(硬盘结构,每个扇区512字节,446字节记录存储信息,64个字节用于分区表示,每16个字节表示一个分区)
扩展分区:最多一个
主分区和扩展分区最多四个
不能写入数据,只能包含逻辑分区
主分区加扩展分区只能有四个
逻辑分区
(2)分区设备名与挂载:
给每个分区起一个分区名才能使用,以便于之后为分区分配盘符,分区->格式化->起名->分配盘符
windows:分区->格式化->分配盘符
常见硬件设备文件名:
/:根目录dev硬件文件/描述字符(硬件自行检测)[接口编号]
IDE硬盘: /dev/hd[a-d]如/dev/hda1
SCSi/SATA/USB硬盘:/dev/sd[a-p]如/dev/sda1
光驱:/dev/cdrom或/dev/hdc
软盘:/dev/fd[0-1]
打印机(25针):/dev/lp[0-2]
打印机(USB):/dev/usb/lp[0-15]
鼠标:/dev/mouse
/dev/hda1(IDE硬盘接口<133M/s)CPU32—64位,8*8b
/dev/sda1(SCSI硬盘接口200MB/s、SATA硬盘接口SATA3<500MB/s)
a)分区表示:
注:1,2,3,4编号只能给主分区或者扩展分区使用,5开始才能给逻辑分区使用
b)挂载(给分区分配盘符的过程(盘符连接分区的过程)):
拿目录做盘符(盘符是windows概念,用CDEF表示,但是在linux用挂载点表示)
注:必须分区:
/根分区
swap分区(交换分区,内存两倍,不超过2GB)同windows虚拟内存
真实机小于4G,SWAP分两倍;SWAP大于4G时,分区使用相同内存就可以
推荐分区:
/boot(启动分区,200M)
根目录和子目录依旧分开分区,相互不影响
ext4:文件系统
rw:权限是读写
proc:直接写入内存
proc和sys目录是不能直接操作的,用来保存内存的过载点,系统自动挂载
[root@localhost ~]# mount -a
#依据配置文件/etc/fstab的内容,自动挂载
[root@localhost ~]# vi /etc/fstab
#自动挂载的分区,将相关的文件写入了ext4,swap目录下了
UUID ... / ext4 defaults 1 1
UUID ... /boot ext4 defaults 1 2
UUID ... /home ext4 defaults 1 2
UUID ... swap ext4 defaults 0 0
注意:光盘,U盘,移动盘载入后设置成了自动挂载,如果取出了的话,系统无法挂载,系统就会出现错误
2、挂载命令格式
[root@localhost ~]# mount [-t 文件系统][-o 特殊选项] 设备 文件名 挂载点
选项:
-t 文件系统:假如文件系统类型来制定挂载的类型,可以是ext3,ext4,iso9660等文件系统
-o 特殊选项:可以指定挂载的额外选项
特殊选项:
[root@localhost ~]# mount -o remount,noexec/home
#重新挂载/boot分区,并使用noexec权限
[root@localhost sh]# cd /home
[root@localhost boot]# vi hello.sh
[root@localhost boot]# chmod 755 hello.sh
[root@localhost boot]# ./hello.sh
[root@localhost boot]# mount -o remount,exec /home
#记得改回来,要不然会影响系统启动的
[root@localhost ~]# cd home
[root@localhost home]# ls
lost+found user1
[root@localhost home]# vi hello.sh 回车写一段脚本文件
#!/bin/bash 必须带有,表明之后的都是这段脚本,如果不写标记,嵌套时会出现错误
echo."hello,linux!!!"
:wq
保存
[root@localhost home]# chmod 755 hello.sh
[root@localhost home]# ll
-rwxr-xr-x. 1 root root 36 10月 9 22:31 hello.sh
[root@localhost home]# ./hello.sh ./代表当前目录下
hello,linux!!!
[root@localhost home]# /home/hello.sh
hello,linux!!!
[root@localhost home]#
[root@localhost home]# mount -o remount,noexec /home/
[root@localhost home]# ./hello.sh
-bash: ./hello.sh: 权限不够
[root@localhost home]# ll
-rwxr-xr-x. 1 root root 36 10月 9 22:31 hello.sh
具有执行权限,而且我还是系统管理员,但是仍无法执行文件,原因是因为remount重新挂载后特殊选项选了noexec,不允许执行
[root@localhost home]# whoami
root
[root@localhost home]# mount -o remount,exec /home/
[root@localhost home]# ./hello.sh
hello,linux!!!
[root@localhost home]#
上面所挂载的home分区并没有按照这个格式:
[root@localhost ~]# mount [-t 文件系统][-o 特殊选项] 设备 文件名 挂载点
进行挂载,是不是应该加上去呢,其实nome分区默认是挂载好了的,本系统默认挂载在sda2
/dev/sda1 on /boot type ext4 (rw)
/dev/sda2 on /home type ext4 (rw)
可以省略,但是挂载光盘之类的都一致要加上去
3、挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom/
#建立挂载点,挂载点只要是空目录就可以
[root@localhost ~]# mount -t iso9660 /dev/cdrom/mnt/cdrom/
#挂载光盘
[root@localhost ~]# mount -t iso9660 /dev/sr0 /mnt/cdrom/
#执行挂载命令
[root@localhost ~]# cd /home
[root@localhost home]# ls /
bin cgroup etc lib media mnt opt root selinux sys usr
boot dev home lost+found misc net proc sbin srv tmp var
[root@localhost home]# mkdir /mnt/cdrom
[root@localhost home]# ll /dev/cdrom
lrwxrwxrwx. 1 root root 3 10月 9 18:43 /dev/cdrom -> sr0
#发现其实/dev/cdrom和sr0是软链接,软链接有的需要完全启动后才有效
[root@localhost home]# mount -t(可省略-t) iso9660 /dev/sr0 /mnt/cdrom/
mount:block device /dev/sr0 is write-protected,mounting read-only
[root@localhost home]# cd /mnt/cdrom/
[root@localhost cdrom]# ls
windows可以直接弹出光盘,但是Linux不行,如果要弹出光盘,需要卸载
4、卸载命令
[root@localhost cdrom]# umount /mnt/cdrom/
umount: /mnt/cdrom: device is busy
[root@localhost cdrom]# ls
[root@localhost cdrom]# pwd
/mnt/cdrom
#因为你在光盘当前目录下,所以你正在使用到cdrom,is busy
[root@localhost cdrom]# cd
[root@localhost ~]# umount /mnt/cdrom/
[root@localhost ~]# cd /mnt/cdrom/
[root@localhost ~]# ls
[root@localhost ~]#
#里面的数据就空了
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom
必须卸载后才能拿出
5、挂载U盘
[root@localhost ~]# cd cdrom
[root@localhost cdrom]# fdisk -l
Device Boot Start
...
[root@localhost ~]# fdisk -l
#查看U盘设备文件名
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
注意:Linux默认是不支持NTFS文件系统的,需要把NTFS驱动重新加载
我们可以安装NTFS-3g,但是都是只读的
vfat:fat32,只能不支持4个G的存储
八、用户登录查看命令
1、查看登录用户信息
(1).w 用户名
命令输出:
USER:登陆的用户名;
TTY:登陆终端;
FROM:从哪个IP地址登录;
LOGIN@:登陆时间;
IDLE:用户闲置时间
JCPU:指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU:是指当前进程所占用的时间
WHAT:当前正在运行的命令
[root@localhost ~]# w
23:57:52 up 4:22, 2users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 18:47 58:15 0.17s 0.17s -bash
root pts/0 192.168.0.155 22:10 0,00s 0.13s 0.04s w
2users:两个用户
三个0.00:系统在1分钟,5分钟,15分钟下系统平均负载,值越高,系统负载越大
tty1:本机终端
pts/0:第一个远程终端
192.168.0.155:远程终端的IP
IDLE,JCPU,PCPU越大说明耗费资源越多
[root@localhost ~]#
(2).who 用户名
命令输出:
- 用户名
- 登陆终端
- 登陆时间(登陆来源IP地址)
[root@localhost ~]# who
root pts/0 2015-07-27 22:10 (192.168.0.155)
(3).last
last命令默认是读取/var/log/wtmp文件数据
命令输出:
- 用户名
- 登陆终端
- 登录IP
- 登陆时间
- 退出时间(在线时间)
可以看到用户所有的登录信息和重启信息,判断所有用户的登录信息,如果是使用vi命令打开/var/log/wtmp,只能看到乱码,是为了防止被修改。