Linux常用命令
Updated:
文章目录
命令基本格式
- [root@localhost ~]# :
- root :当前登录用户
- localhost :主机名
- ~ :当前所在目录(家目录)
- # :超级用户(管理员)提示符
- $ :普通用户提示符
- 命令格式 :
- 命令 [选项] [参数]
Linux 中常见目录的作用
- / 根目录
- /bin 命令保存目录(所有用户均可使用)
- /boot 启动目录,用来启动相关文件
- /dev 设备文件保存目录
- /etc 配置文件保存目录(没事不要动它)
- /home 普通用户的家目录
- /lib 系统库保存目录(保存封装好的函数的)
- /misc & /mnt & /media :
空目录,给系统挂载(即分配盘辐)用的 - /root 超级用户的家目录
- /tmp 临时目录(可以玩耍的那种)
- /sbin 命令保存目录(供超级用户使用的)
- /proc & /sys :
保存的是内存的过载点,不可直接操作- /usr 系统软件资源目录
- /usr/bin/系统命令(普通用户)
- /usr/sbin/系统命令(超级用户)
- /var 系统相关文档内容
查询目录中内容 :ls
- 基本格式 :ls [选项] [文件或目录]
- 选项 :
- -a :显示所有文件(包括隐藏文件)
- -l :显示详细信息
注:ls -l 可简写为 ll
-rw-r–r– 代表文件权限:- 第一个 - :表示文件类型
- - :普通文件
- d :目录文件
- l :软链接文件(即快捷方式)
- 后九位 :三三一组,代表身份与对应权限
- 用户身份依次为:
- u所有者、g所属组、o其他人
- 各个身份所能拥有的权限有:
- r:可读、w:可写、x:可执行
- 故 rw-r–r– 可解析为:
- 所有者拥有权限:rw-(读写)
- 所属组拥有权限:r–(只读)
- 其他人拥有权限:r–(只读)
- 用户身份依次为:
- 第一个 - :表示文件类型
- -d :查看目录属性
对比一下加 d 和不加 d : - -h :人性化显示文件大小
- -i :显示 iNode(i节点)
第一串数字即文件的i节点(可以理解为 id 号)
- -a :显示所有文件(包括隐藏文件)
目录 / 文件处理命令
- 建立目录 :mkdir
即 make directories- 基本格式:mkdir -p [目录名]
- -p 递归创建(即同时创建多级目录)
比如说不加 -p 的时候想要直接创建,就会报错:
但加上 -p 之后就可以愉快地一起创建了:
- 基本格式:mkdir -p [目录名]
- 切换所在目录 :cd
即 change directory- 简化操作 :
- cd / cd ~ :回到当前用户的家目录
- cd - :进入上次目录
- cd .. :进入上一级目录
- cd / cd ~ :回到当前用户的家目录
- 简化操作 :
- 查询当前所在目录的位置 :pwd
即 print working directory- 超级简单的命令,没有引申,还是单独放张图
- 超级简单的命令,没有引申,还是单独放张图
- 删除空目录 :rmdir
即 remove empty directories- 当你要删的是一个空目录的时候:
- 然而如果你要删的这个并不空…
- 所以说它其实用的不多啦,我们一般用这个:
- 当你要删的是一个空目录的时候:
- 删除文件或目录 :rm
即 remove- 基本格式 :rm -rf [文件或目录]
- 选项:
- -r 删除目录
- -f 强制
- 如果啥都不加只有一个 rm :
只能删文件不能删目录 - 如果只加了 -r 没有加 -f :
它里面每个分支都会问你一遍,超级麻烦 - 所以让我们之间 rm -rf :
好舒服了…..了???–> 千万注意可别删错了(哭 - 千万不要打 rm -rf /* 或者 rm -rf / 或者 rm -rf *
- 千万不要打 rm -rf /* 或者 rm -rf / 或者 rm -rf *
- 千万不要打 rm -rf /* 或者 rm -rf / 或者 rm -rf *
- 复制命令 :cp
即 copy- 基本格式 :cp [选项] [原文件或目录] [目标目录]
- 选项:
- 不加 :只能复制文件
或者给它重命名一下 - -r :是用来复制目录的
不加 -r 的时候想要复制目录,会报错
加上 -r 就可以正常复制啦 - -p :连带文件属性复制
- -d :连带链接属性复制
- -a :相当于 -pdr
- 不加 :只能复制文件
- 一般来说只会用到 -r 和 -a,对比如下:
- -r 或直接不加:(注意这个时间对比)
- 需要文件属性完全相同,包括时间等,用 -a
- -r 或直接不加:(注意这个时间对比)
- 剪切或改名命令 :mv
即 move- 基本格式 :mv [原文件或目录] [目标目录]
- 注 :可以直接对目录进行操作,不需要加 -r
- mv 的两种使用场景 :
- 若用在不同目录下 :剪切
- 若用在同一目录下 :改名
- 若用在不同目录下 :剪切
- 链接处理命令 :ln
即 link- 基本格式 :ln -s [原文件] [目标文件]
- 选项 :
- -s 创建软链接
- 硬链接(不推荐使用):
- 除了创建后文件的引用计数会加一之外,其他信息不改变且完全一样(当然文件名除外)
- 不能跨分区创建:毕竟不能在别的楼给它修门
- 删除原文件后依然可以通过硬链接打开该文件
查看文件内容,就会发现它是可以正常使用的: - 只能对文件操作,不能创建目录的硬链接
- 除了创建后文件的引用计数会加一之外,其他信息不改变且完全一样(当然文件名除外)
- 软链接(推荐推荐推荐):
- 几乎完全等同于 Windows 的快捷方式
- 软链接:lrwxrwxrwx;创建后,文件的引用计数不变,且会有一个明确的箭头指向原文件
- 允许创建对目录的软链接
- 删除原文件后,无法通过软链接打开该文件
- 敲黑板:创建的时候必须输绝对路径!绝对路径绝对路径绝对路径!!不然它就会变成这样:
- 软硬链接最大的区别:
- 硬:拥有与原文件相同的i节点和存储block块,可看做同一个文件,相当于一间教室的两个门;
- 软:拥有自己的i节点和block块,保存的是原文件的文件名和i节点号,而非实际的文件数据;
- 一张图说明一切:
文件搜索命令
- 快速文件搜索 :locate
- 基本格式 :locate [文件名]
- 特点:
- 在后台数据库中搜索,速度比 find 要快
- 只能搜索文件或目录,不能搜索其他的
- 不能搜素到刚刚建立的文件,比如这样 :
为啥子呢?因为它是在 /var/lib/mlocate(可能不叫mlocate,最好用 locate locate 查一下)这个数据库中进行搜索的,而数据库的更新是有定时的嘛(大概一天一更新),所以是找不到刚刚创建的文件的啦;一定想现在找到的话,可以用 updatedb 先强制更新一下,比如这样:
但是发现还是查不出来╭(╯^╰)╮为什么呢 为什么呢 因为它在 /tmp 里面,不会被搜索(ノдヽ)
让我们换一个试试 :
然后就可以成功找到啦 φ(>ω<*) - 那么问题来了:为啥在 /tmp 里面它就不搜索了呢?诶嘿~这就是 locate 的另一个特性了:
locate 是按照 /etc/updatedb.conf 这个配置文件来进行搜索的,让我们打开它看一下 :
这写的是个啥?–>四个连串的大写分别表示:
PRUNE_BIND_MOUNTS=”yes” :开启搜索限制
PRUNEFS= :搜索时,不搜索的文件系统
PRUNENAMES= :搜索时,不搜索的文件类型
PRUNEPATHS= :搜索时,不搜索的路径
( 备注 :PRUNE = prune = 删减,去除 )
可以看到 /var/tmp 也在里面,所以就不搜索啦
- 基本格式 :locate [文件名]
- 命令搜索命令 :whereis / which
- whereis 基本格式 :whereis [选项] [命令名]
- 选项 :
- 不加:可执行文件可帮助文件均会查找
- -b 只查找可执行文件
- -m 只查找帮助文件
- 不加:可执行文件可帮助文件均会查找
- which 基本格式 :which [文件名]
- 特别的 :
- 除了查找可执行文件外,还会查找它的别名
当然没有别名就不会显示啦
- 除了查找可执行文件外,还会查找它的别名
- last but not least :
- 不是所有命令都可以找到的!比如说 cd:
- 用 whereis 找的话 :只找到了帮助文档
- 用 which 的话 :出现了一串奇怪的东西
那么这是什么呢!这是它的 PATH 环境变量啦(`・ω・´)因为理论上来讲只有打绝对路径才能正常执行它嘛,但是这样就太麻烦了,所有系统帮你把相应的路径都保存起来了 (=´ω`=) - 好了现在来说说为什么不能找到 cd :
其实也很容易理解啦,因为 cd 属于 shell 自带的命令之一,而类似 ls / pwd 这种就属于外来的;它当然不能自己查找自己啦
- 文件搜索命令 :find
- 基本格式 :find [搜索范围] [搜索条件]
- 这个涉及到的东西太杂,举几个例子好了
- find / -name install.log
表示在根目录下按文件名查找 install.log
注意 :不建议这样使用 –> 搜索范围太大,会耗费大量系统资源;那为啥它只找到了一个而没找 install.log.syslog ? –> 因为 find 默认为绝对匹配,要想让它能模糊查询,得使用通配符 - 可以在 find 查询时使用的通配符 :
- * :匹配任意内容
表示查询家目录下以 install.log 开头的 - ? :匹配任意一个字符
表示查询文件名以ab开头且共三个字母的 - [] :匹配任意一个括号内的字符
表示查询以ab开头,第三个字母为c或d的
- * :匹配任意内容
- find /root -iname INStall.log
可以看到加上 i 之后就可以不区分大小写查找啦 - find /root -user root
按所有者身份搜索(该条表示查询root目录下所有者为root的全部文件),那么这有啥用呢?我们一般会这样: - find /root -nouser
这找出来的是没有所有者的垃圾文件,我们就可以手动把它们清理掉啦ヾ(๑╹◡╹)ノ”但要注意的是,”位于 /sys or /proc 中由内核产生的文件” 和 “来自光盘/U盘/移动盘中的外来文件” 属于正常的无所有者文件,忽略它们就好啦,不用删的 - find /var/log/ -mtime +10
表示查找10天前修改过的文件;一般用于对 log 信息的查找与整理(所以是在 /var/log/ 中搜索的),其他选项如下:- -10 :最近10天内修改的文件
- 10 :10天前当天修改的文件
- +10 :距今10天前修改的文件
- atime :文件访问时间
- ctime :文件属性改变
- mtime :文件内容修改
- find . -size 25k
表示搜索当前目录下大小为25k的文件
find . -size -25k
表示当前目录下大小小于25k的文件
注意:除了k是小写外,其他都大写(比如M)
另外:一定要带单位!不然系统默认的单位是扇区!25 = 25个扇区 = 25 * 512个字节! - find -inum 658173
表示根据 i 节点查找文件,和 ls -i 是对应的 - find /etc -size +20k -a -size -50k
表示查找/etc/下,大于20k且小于50k的文件- -a –> and –> 逻辑与,两个条件都满足
- -o –> or –> 逻辑或,满足一个即可
- 那如果我们想对上面查到的一长串做统一操作呢?这时候就可以使用 -exec “命令” {} \; 啦:
表示查找/etc/下大于20k且小于50k的文件,并人性化显示它们的详细信息;最后的最后 :注意{} 和 \; 之间是有空格的!空格!
- find / -name install.log
- 搜索字符串命令 :grep
- 基本格式 :grep [选项] [字符串] [文件名]
- 选项 :
- 不加 :查找包含该字符串的对应行
- -i :忽略大小写
- -v :排除指定字符串(即找出不含该字符串的)
- 不加 :查找包含该字符串的对应行
- 与 find 的区别 :
- find :在系统中搜索符合条件的文件名
- grep :在文件中搜索包含该字符串的行
- 另:find 使用通配符进行匹配(完全匹配),而 prep 使用的是正则表达式(包含匹配)
帮助命令
- 基本帮助命令 :man
即 manual,文档- 基本格式 :man [选项] [命令]
- 不加选项时的具体用法:
- 就比如说先查一下 ls 的 :
输入 man ls,回车,就可以得到这个 : - 可是这个文档太多啦,要怎么快速找到需要的那个选项的信息呢?就可以直接在下面输入 /[选项],就比如说下面这样 :
输入 /-d 然后回车,就可以迅速找到 ls -d 的 : - 话说回来,回到这个文档第一行的话 :
这是干嘛的呢?让我们来 man 一下 man :
退出后输入 man man,打开,往下翻一点,就会发现这个东西 :
翻译过来就是..给 man 查询的级别 :
比如说1是”查看命令的帮助”等等,就不挨着写了 - 那么要怎么查看命令拥有哪个级别的帮助呢?这时候就需要给 man 加上具体的选项了
- 就比如说先查一下 ls 的 :
- 选项:
- -f :查看命令拥有哪个级别的帮助
–> 相当于 whatis [命令]
然后就可以通过 man [帮助级别] [命令] 来查看该帮助级别下的命令文档啦(不加帮助级别的话会默认显示数值最小哪个级别) - -k :查看与该命令相关的所有帮助
–> 相当于 apropos [命令]
用于..当你忘记这个命令叫啥只记得里面仿佛有个passwd的时候
- -f :查看命令拥有哪个级别的帮助
- 最后的最后 :同样,它无法获取shell的内部命令
- 其他帮助命令
- 选项帮助:–help
只显示该命令的选项帮助,而且!可以是中文的!
基本格式 :[命令] –help - 内部命令帮助 :help
基本格式 :help [shell内部命令]
注意它只能获取内部命令,否则会报错的! - 那要怎么判断是否为 shell 的内部命令呢?
我们可以用 whereis [命令],比如这样 :
可以看到查询 ls 时给出了执行路径,而查询 cd 时没有;这就说明 ls 是一个外来命令,而 cd 是内部的 - 详细命令帮助 :info
基本格式 :info [命令]
但并不推荐使用,因为它相当于给了你一本书那么大的文档,还能按n/p前往下一小节/上一小节呢╭(╯^╰)╮
- 选项帮助:–help
压缩与解压缩命令
- .zip 的压缩与解压缩
- 压缩文件 :zip [压缩文件名] [源文件]
- 压缩目录 :zip -r [压缩文件名] [源文件]
- 备注备注 :
- 其实也可以不带后缀 .zip,但这样会清楚一些
- 压缩文件不一定比源文件小的(比如说源文件为空):因为压缩的时候会有一定压缩格式的换算
- 都是空文件的话会显示 stored 0%,没啥影响啦
- 压缩之后会变红的哦(因为是软件包)
- 解压缩 :unzip [压缩文件]
文件和目录都是直接解压就好了,但不能一起解压
- 压缩文件 :zip [压缩文件名] [源文件]
- .gz 的压缩与解压缩
- 压缩文件 :gzip [源文件]
然而源文件会消失(也可以强行保留但是太麻烦了) - 压缩目录 :gzip -r [目录]
首先创建一个包含三个文件的目录
然后压缩,ls –> 诶我的老婆怎么没被压???
进入 laopo –> 就会发现每个文件被单独压缩了
所以说 gzip 只会去单独压缩目录下的每个子文件,但无法压缩目录本身,就hin麻烦 - 解压缩文件 :gzip -d [压缩文件]
或者像 zip 一样,用 gunzip [压缩文件]
还可以对目录解压,但是要记得加上 -r
同样的,解压后压缩文件会消失,只剩解压出来的那个
- 压缩文件 :gzip [源文件]
- .bz2 的压缩与解压缩
- 不保留源文件 :bzip2 [源文件]
- 保留源文件 bzip2 -k [源文件]
- 注意 ;bzip2 命令不能压缩目录
- 解压缩文件 :bunzip2 / bzip2 -d [压缩文件]
同样,加上 -k 会保留原压缩文件
- 不保留源文件 :bzip2 [源文件]
- .tar.gz / .tar.bz2 压缩格式(推荐)
- 原理:将目录打包成 .tar 格式,再压缩为 .gz / .bz2
- .tar.gz 的压缩与解压缩
- 压缩 :tar -zcvf [压缩包名] [源文件]
- 解压缩 :tar -zxvf [压缩包名]
- 注意 :该压缩包名一般以 .tar.gz 结尾,便于区分;压缩与解压缩过程中,源文件均会予以保留
- 压缩 :tar -zcvf [压缩包名] [源文件]
- .tar.bz2 的压缩与解压缩
- 压缩 :tar -jcvf [压缩包名] [源文件]
- 解压缩 :tar -jxvf [压缩包名
- 注意 :该压缩包名一般以 .tar.bz2 结尾,便于区分;压缩与解压缩过程中,源文件均会予以保留
- 压缩 :tar -jcvf [压缩包名] [源文件]
关机与重启命令
- 安全关机命令 :shutdown
- 基本格式 :shutdown [选项] [时间]
- 选项 :
- -h :关机(避免对服务器采用远程关机)
表示让它第二天05:20的时候关机;但是我们会发现,一旦输入这条命令,终端就不能正常使用了,怎么办呢?Ctrl + C :
就可以取消掉定时关机的命令了 –> 可这样感觉定时关机好像没啥用的样子,能不能让它在后台运行呢?加个 & 就OK啦 : - -c :取消前一个关机命令
直接 shutdown -c,就能把前一个关机or重启命令终止掉啦 : - -r :重启(对服务器:推荐)
只要把 -h 换成 -r 就行了啦(不敢回车.jpg)
- -h :关机(避免对服务器采用远程关机)
- 时间 :
- now :现在执行
- 具体时间点 :定时执行
- 其他关机命令(不推荐)
- 关机 :
- halt
- poweroff
- init 0
- 重启 :
- reboot
- init 6
- 关机 :
- 最后的最后,到底安全在哪里呢?
- 因为 shutdown 在关机之前会给你尽量保存一下啦,其他的命令就有点像强行拔电源,太凶了嗯
Linux中的挂载命令
相当于分配盘辐
- 查询与自动挂载
- 查询系统中已挂载的设备 :mount
- 根据配置文件自动挂载 :mount -a
- 所谓配置文件指的其实是 /etc/fstab 啦 :
- 让我们进去看一下这个文件写了点啥 :
- 其实就是Linux中自动挂载的文件啦
- 也就是说,只要你按照规定格式将相关内容写入这个文件,那么,它们就会在开机的时候随着系统启动而自动挂载,不再需要人为参与了(然鹅一般还是不要瞎动叭)
- 让我们进去看一下这个文件写了点啥 :
- 查询系统中已挂载的设备 :mount
- 挂载命令格式
- 基本格式 :
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 - 选项 :
- -t 文件系统 :加入文件系统类型来指定挂载类型
(如ext3、ext4、iso9660等等这些文件系统) - -0 特殊选项 :可以指定挂载的额外选项
(比如下面这些,虽然其实一般保持默认就行了)
- -t 文件系统 :加入文件系统类型来指定挂载类型
- 基本格式 :
- 挂载光盘
- 首先第一件事 :放入光盘 ( • ̀ω•́ )✧
- 建立挂载点 :mkdir /mnt/cdrom
- 挂载光盘 :mount -t iso9660 /dev/sr0 /mnt/cdrom/
- 挂载光盘时的备注 :
- 可以省略 -t iso9660
- /dev/sr0 换成 /dev/cdrom 也行,它俩是软链接
- 但还是建议用 /dev/sr0 啦
- 最后进入 /mnt/cdrom/,ls 查看一下,完美
- 放张流程图 :
- 卸载光盘
- 基本语法 :umount [设备文件名或挂载点]
- 啥意思呢?也就是说 :
- umount /mnt/cdrom
- 或者 umount /dev/sr0
- 都可以;毕竟两个挂载到一起了
- 让我们来看下效果 :
- 为什么没有成功呢?因为你还在目录里呢!
- 让我们退出来再看一下 –> 就成功啦
- 注意用完之后一定要卸载一定要卸载一定要卸载!
Linux中的用户登录查看命令
- 查看用户的登录信息 :w
- 基本语法 :w
- 对没错就是 w!然后回车!
- 命令输出 :
- USER :登录的用户名
- TTY :登录终端
- FROM :从哪个IP地址登录的
- LOGIN@ :登录时间
- IDLE :用户闲置时间
- JCPU :指的是和该终端连接的所有进程占用的时间(注 :该时间不包括过去的后台作业时间,但包括当前正在运行的后台作业所占用的时间)
- PCPU :指当前进程所占用的时间
- WHAT :当前正在运行的命令
- 查看用户的登录信息 :who
- 基本语法 :who
- 命令输出 :
- 用户名
- 登录终端
- 登录时间(登录来源IP)
- 基本语法 :who
- 查询当前登录和过去登录的用户信息 :last
- 基本语法 :last
- 注 :last命令默认是读取 /var/log/wtmp 文件中的数据的
- 命令输出 :
- 用户名
- 登录终端
- 登录IP
- 登录时间
- 退出时间(在线时间)
- 基本语法 :last
- 查看所有用户的最后一次登录时间 :lastlog
- 基本语法 :lastlog
- 注 :lastlog命令默认读取 /var/log/lastlog
- 命令输出 :
- 用户名
- 登录终端
- 登录IP
- 最后一次登录时间
- 基本语法 :lastlog
- 最后来一个小小的总结 :
- 总之上面几个主要用途是!
- 用来看你的系统有没有被其他用户登录过啦 _(:з」∠)_
常用快捷键
- Ctrl + C :强制终止当前命令
- Ctrl + L :清屏
- Ctrl + A :光标移动到命令行首
- Ctrl + E :光标移动到命令行尾
- Ctrl + U :从光标所在位置删除到行首
- Ctrl + Z :将命令放入后台执行(避免使用)
- Ctrl + R :搜索历史命令(不常用)
- Ctrl + Alt + Enter :将虚拟机全屏
- Ctrl + Alt :将光标移出虚拟机
杂七杂八的
- pwd :查看当前所在目录
- cd - :回到刚刚所在的目录
- Tab 键按一下 再按一下 :
唯一则自动补全,不唯一则给提示 - ll : ls -l 的简写,显示文件详细信息
- 删除某文件夹内的全部内容 :rm -rf 目录名/*
注意加不加根目录的那个”/“要看它到底在不在根目录下 - touch 创建空文件
- touch .xxx 创建隐藏文件
- mkdir .xxx 创建隐藏文件夹
- ls -a 可查看隐藏文件/文件夹
- cat 查看文件
- vim 进入文件
- echo “xxx” :在屏幕上输出xxx
- chmod 改变文件权限(查一下再用)
- alias :查看系统中已生效的别名
- 设置别名 :alias [原名]=’别名’(重启后失效)
- 永久设置别名 :vi !/.bashrc –> 进入环境变量配置文件 –> 然后像上面一下设置一下 –> 保存退出,over(重启后生效)–> 或者在最后 source .bashrc(立即生效)
- 删除别名 :unalias 别名(重启后失效)
- 程序自动执行时判断是否出错 :
命令(如ls) && echo ‘yes’ || echo ‘no’ - 管道符 :命令1 | 命令2 –>
使命令1的执行结果作为命令2的操作对象