linux命令精讲

3,759 阅读18分钟

linux基础知识

linux的优点

1. 一切都是一个文件
2. 系统中拥有小型,单一用途的程序
3. 当遇到复杂任务,通过不同功能用途的程序组合起来完成
4. 避免令人困惑的用户界面就是没有复杂的图形界面
5. 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型

基础知识

image.png

   🎈  root         表示用户 
   🎈  localhost    主机名
   🎈  ~            家目录

家目录:存放当前用户个性化配置信息的文件夹,是当前用户对自己家目录的最高权限

  • 超级管理员的家目录: /root
  • 普通用户的家目录:/home/下面同名的文件夹

image.png

  🎈  #            管理员用户
  🎈  $            普通用户

[root@localhost ~]# su lilili

📍表示为从管理员用户root切换到普通用户lilili

从切换用户就可以看出来符号从#变成了$号,这就代表了我们的权限不一样了

image.png

关机命令:

  1. halt #立刻关机
  2. poweroff #立刻关机
  3. shutdown -h now #立刻关机(root用户使用)
  4. shutdown -h 10 #10分钟后自动关机

重启命令:

  1. reboot
  2. init6
  3. shutdown -r now

linux命令精讲

shell

📌shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。

📌shell的作用:把人类的高级语言翻译成二进制语言

📌shell有哪些:

  • bash(centos7默认的软件)
  • sh
  • nologin等(最特殊)nologin任何系统不让用

📍注意点:bash放在:/bin/bash目录里,bash既是内部命令也是外部命令

shell与内、外部命令

📌shell 分为内部命令和外部命令,一般先执行内部命令,hash 再执行外部命令(别名最大)

📌别名>内部命令>hash>外部命令

内部命令外部命令
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令Linux系统中能够完成特定功能的脚本文件或二进制程序
属于Shell的一部分属于Shell解释器程序之外的命令
没有单独对应的系统文件每个外部命令对应了系统中的一个文件
自动载入内存,可以直接使用必须知道其对应的文件位置,由Shell加载后才能执行

linux执行命令的过程:

1. 绝对路径下的执行程序
2. 先看别名,如果有别名,直接执行
3. 再区别是内部命令还是外部命令,内部命令直接执行
4. 外部命令首先看hash表,表中直接执行,表中有但是找不到,直接报错
5. 没有hash,回去$PATH路径下的文件夹去找,找到执行,找不到报错
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/root/bin
    在这5个文件夹中寻找

外部命令存放于echo $PATH 中,在这个表中一个一个找,找到为止,找不到就报无命令

image.png

区分内部命令和外部命令

image.png

使用type这个命令区分

[root@localhost ~]# type 命令

命令格式

  • 在 Linux 操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都 可以称为命令。
  • 严格来说,命令通常只代表实现某一类功能的程序的名称。

格式:命令字 空格  [选项] 空格 [参数]

📍注意点:命令和选项还有参数之间一定要有空格(不限制数量,但是必须要有)

  • 命令字 是整条命令中最关键的一部分 唯一确定
  • 选项 短格式选项:使用“-”符号引导 通常 一个字母 长格式选项:使用“--”符号引导 通常完整的单词
  • 参数 命令字的处理对象 可以是文件名、目录(路径)名或用户名等内容 个数可以是零到多个

拓展:; 可以隔开命令,执行多个命令

编辑命令时可以使用的一些快捷键

快捷键功能
Tab 键自动补齐(两次可以显示所有选项)
反斜杠“\”强制换行或转义
Ctrl+a光标移到最前
Ctrl+e 或 end 键光标移到最后
Ctrl+U清空至行首不包括当前光标处的 字符
Ctrl+K清空至行尾包括当前光标处的字符
Ctrl+w从当前光标删除到开头
ALT+d从当前光标删除末尾
Ctrl+l清屏
Ctrl+c取消本次命令编辑
Ctrl+s/Ctrl+q锁屏/解锁
向上下箭头回看执行过的命令

命令的帮助

当我们不知道有时候不知道该怎么使用什么命令时,可以获得命令的帮助

help

内部命令使用help

[root@localhost /]# help

image.png

--help

外部命令使用--help

  [root@localhost /]# ls --help

📌可以查看ls这个命令的用法

image.png

man

man是一个手册,共有九个章节,我们常用的是区间1和区间5

区间分类
区间1用户指令
区间2系统调用
区间3程序库调用
区间4设备
区间5文件格式 shadow passwd fstab
区间6游戏
区间7杂项
区间8系统指令
区间9内核内部指令
[root@localhost /]# man man

📌按q退出man手册5

image.png

info

[root@localhost /]# info ls

📌可以查看ls这个命令的信息

📌按q或者ctrl+c退出

image.png

目录操作

pwd(print work directory)

当你不知道目前处于什么路径时,可以用该命令查看当前路径

  [root@localhost pam.d]# pwd

📌说明现在处于根目录下的etc这个文件夹下的pam.d中

image.png

pwd -P

可以查看软链接的源路径

  [root@localhost dd]# pwd -P

📌用pw显示示的是当前路径,加上-P就是显示的源路径

image.png


cd(change directory)

该命令用来切换所在的文件夹(目录)

[root@localhost dd]# cd /etc

从dd文件夹切换到了etc文件夹

image.png

cd ~和单独使用cd

代表去往当前用户的家目录

[root@localhost rh]# cd ~
[root@localhost rh]# cd

输入这两个命令之后用pwd查看当前路径,我们使用的是root管理员登录,所以去往的是家目录就是root文件夹

image.png

cd ./和cd ../

  • ./ 表示以当前的工作目录作为起点

  • ../ 表示以当前目录的上一级目录(父目录)作为起点

    [root@localhost ~]# cd ./
    

现在还是在当前目录下

  [root@localhost ~]# cd ./

现在去往了root的上级目录根目录那边

image.png

cd -

返回上一次所在目录(只有一次有效)

[root@localhost mnt]# cd -

原本我们在opt切换到mnt,当输入cd -这个命令后就切换到了之前所在的opt下

image.png

绝对路径和相对路径

  • 绝对路径:从根目录开始写路径,唯一的,不会出错,以/开始的路径
  • 相对路径:不是从根目录开始写路径,不唯一会有重复的,不以/开始的路径

我们从opt下进入到该目录之下的rh用了两种方法:

  1. 绝对路径:第一个/表示根目录,之后的/表示分隔符,意思是这个目录的名字已经输完, /opt/rh就表示去往根目录之下的opt目录下的rh
  2. 相对路径:./rh表示去往当前目录(也就是opt目录)下面的rh目录

image.png

小结

命令效果
cd 和cd ~切换到当前用户的家目录
cd ./当前目录
cd ./ /上级目录
cd -返回上一次所在目录

ls(list)

列出当前文件夹下所有文件夹,基础功能不包括隐藏文件

🎈格式:ls [选项] [文件或目录… ]

📍注意点:ls命令通常都是几个选项一起使用,使用单个命令没有意义

 [root@localhost ~]# ls

image.png

-a

显示所有文件包括隐藏文件,也包括.(当前文件)和..(当前文件夹的上级文件)

[root@localhost ~]# ls -a

可以看出加上-a这个选项之后看到了以.和..文件还有隐藏文件

image.png

-A

显示所有文件不包括隐藏文件,不包括.(当前文件)和..(当前文件夹的上级文件)

[root@localhost ~]# ls -A

可以看出加上-A这个选项之后看到了隐藏文件但是没有.和..文件

image.png

-l

长格式显示,显示详细信息

[root@localhost ~]# ls -l

可以看出加上-l这个选项之后可以看到每个文件的详细信息

image.png

[root@localhost ~]# ll

可以直接用ll这个指令代替ls -l指令

image.png

-h

人性化显示文件大小

和-l这个命令一起使用的效果:

[root@localhost ~]# ls -lh

可以看出加上h这个选项配合-l之后,能更加人性化的显示出了文件的大小

image.png

-d

只显示当前文件夹,而不是列出目录内的文件数据

[root@localhost ~]# ls -d

可以看出加上-d之后显示出的是当前文件,之前我们有提到过.就是当前文件夹

image.png

-l、-d、-h配合使用

表示人性化的显示该文件夹的具体信息

[root@localhost ~]# ls -ldh

image.png

-R

递归显示该目录及该目录的子目录下的所有内容

[root@localhost ~]# ls -R

可以看出加上-R之后,显示出的文件时一层一层显示的

image.png

-t

以时间排序(默认把最新的方最下面)

和ll指令一起使用的效果:

[root@localhost ~]# ll -t

可以看出加上-t之后,是按时间排序的

image.png

-r

倒叙排序

和ll -t指令一起使用的效果:

[root@localhost ~]# ll -tr

可以看出加上-r之后,排序就相反了

image.png

-S

以文件容量大小排序(默认最大的在最上面)

和ll指令一起使用的效果:

[root@localhost ~]# ll -S

可以看出加上-S之后,是按容量大小排序的

image.png

这个选项也可以和-t一起使用:

[root@localhost ~]# ll -Sr

可以看出加上-r之后,排序就相反了

image.png

-i

显示文件的inode号

[root@localhost ~]# ls -i

可以看出输入-i这个选项后,显示出了indoe号

image.png

indoe号

是文件的身份号,每生成一个文件,系统会分配给文件一个indoe号,indoe号是可以被用完的,用完之后就不可以再创建文件,需要把别的文件删除才能再创建

文件类型

文件类型有7种,第一个字符代表了该文件的类型

第一个字符文件类型
-普通文件
d文件夹
c字符文件(一个字符一个字符读取)
p管道文件(单向传输,单工)
b块设备(硬盘)
s套接字(里面有 ip地址和端口号,传递信息)
l链接文件(类似 Windows 系统中的快捷方式)

例子:

image.png -rw-r--r--. 1 root root 0 9月 20 16:32 aa

  1. -:代表文件属性:普通文件
  2. rw-r--r--:权限
  3. 1:硬链接
  4. root:拥有者
  5. root:拥有组
  6. 0:代表文件大小
  7. 9月 20 16:32:代表创建文件的时间(最后一次使用的时间)
  8. aa:文件名

📍拓展:关于 rw-r--r--

rw- (创建者) r--(所属组) r--(其他)

权限:可读 可写 可执行

r    可读
w    可写
x    可执行
-  没有该权限

通配符

ls不可以单独使用,需要和通配符配合使用

🎈通配符作用:匹配文件的名字,去模糊查找文件

代表匹配任意一个字符

[root@localhost opt]# ls ?

可以看出这个命令显示的是只有一个数的文件名,不显示超过1个字符的文件名 image.png

[root@localhost opt]# ls ??

输入两个?就代表只显示两个字符的文件,其他的就不显示了

image.png

*

匹配所有非隐藏的文件,无论字符多长多短

通常需要配合使用

[root@localhost ~]# ls *.txt

这个命令的意思是显示所有以.txt结尾的文件

image.png

[root@localhost ~]# ls .*

这个命令的意思是显示所有以.开头的文件

包括了..(上层目录)中的文件

image.png

{1..10}、{a..z}、{A..Z}
[root@localhost opt]# ls {1..10}

这个命令的意思是显示字符1-10中任意一个字符的文件

image.png

[root@localhost opt]# ls {a..z}

这个命令的意思是显示a-z中任意一个字符的文件

image.png

[root@localhost opt]# ls {A..Z}

这个命令的意思是显示A-Z中任意一个字符的文件

image.png

[456]、[a-z]、[A-Z]
[root@localhost opt]# ls [456]

取其中之一有就显示没有也无所谓

[456]取值范围:此处括号里值代表一个字符,就是4或者5或者6

image.png

要注意区分这[a-z]、[A-Z]的取值范围

[root@localhost opt]# ls [a-z]

[a-z]的取值范围是:a-z,没有Z

[root@localhost opt]# ls  [A-Z]

[A-Z]的取值范围是:A-Z,没有a

image.png

[^love]

匹配列表中的所有字符以外的字符

[root@localhost opt]# ls [^love]

这个命令的意思是除了有love这四个字符的,其他都显示

image.png

小结

选项总结

选项作用
-a显示所有文件包括隐藏文件 也包括 .(当前文件) ..(当前文件夹的上级文件)
-A显示所有文件或隐藏文件 不包括 .(当前文件) ..(当前文件夹的上级文件)
-l长格式显示,显示详细信息 ls -l=ll
-h人性化显示当前文件夹
-d只显示当前文件夹,而不是列出目录内的文件数据
-R递归显示所有文件
-t以时间排序(默认把最新的方最下面)
-r倒叙排序
-iinode 文件的编号(能用完,需要删除没用的)
-S以文件容量大小排序(默认最大的在最上面)

alias

将一些很长的命令 自定义成简单好记忆的命令

\转义符:代表使用原来命令的意思(如果取的别名和别的命令重复,会让临时用一次别的命令的作用)

🎈格式:alias 自定义命令='原始命令'

[root@localhost ~]#alias san='hostnamectl set-hostname'

表示给原始命令hostnamectl set-hostname取了一个新名字san

hostnamectl set-hostname命令的意思是给主机改名字, 我们给这个命令取了别名之后,就可以直接使用别名作为这个命令使用

image.png

  [root@localhost ~]# alias

可以查看有哪些别名

image.png

 [root@localhost ~]# unalias

取消别名

取消了别名之后可以看出我们在输入san这个命令会显示找不到命令的

image.png


du

看当前所在文件夹的总磁盘占用量,也统计隐藏文件的大小

🎈格式:du [选项] [文件夹]

[root@localhost opt]# du /opt

显示了每一个文件的大小

image.png

-a

 [root@localhost opt]# du -a /opt

每一个文件单独列出来

image.png

-b

[root@localhost opt]# du -s /opt

当前文件夹的总大小 image.png

📍注意点:-a和-s不可以同时使用

-h

[root@localhost opt]# du -h /opt

以人性化的方式显示

image.png

-d

[root@localhost ~]# du -d 3

显示到第几层文件或目录

image.png

--exclude

不计入统计

[root@localhost opt]# du --exclude=*.txt

统计时排除以txt结尾的

image.png

du和ls区别

  • ls:看到的是真实大小
  • du:统计的是当前文件占磁盘的大小,不足4k按4k算

mkdir

格式:mkdir [选项] 目录位置及名称

[root@localhost opt]# mkdir a b c d

在opt文件夹下及创建了a b c d 四个文件夹

image.png

-p

递归创建

[root@localhost opt]# mkdir -p a/bb/cc

在a文件夹下面建立一个bb文件夹,在bb文件夹下面建立一个cc

image.png

-v

显示建目录的过程

[root@localhost opt]# mkdir -v bbb

会告诉你已经创建了一个叫bbb目录

image.png


touch

  1. 当文件不存在时,直接新建该文件,并且该文件是空文件

  2. 当文件已存在,会刷新该文件的时间戳

    [root@localhost opt]# touch abc abcd
    

image.png

ln(创建文件链接)

有两种方式:

  1. 软连接:类似于windows里快捷方式,软连接,符号连接,会指向原来的文件ln(link)
  2. 硬连接 同一个文件取不同的名或者叫多个名字,不支持文件夹,创建一个连接数加一,多路径访问

📍注意点:

  • 加-s是软连接 符号连接
  • 不加-s是硬连接
  • 只能使用绝对路径

软连接

格式:ln -s 源文件路径 目标文件路径

[root@localhost mnt]# ln -s /opt/aaa  /mnt/ccc

建立一个opt目录下的aaa目录软链接到mnt目录,并取名为ccc(也可以不取名,会保留原名aaa)

image.png

硬链接

格式:ln 源文件路径 目标文件路径

[root@localhost mnt]# ln /opt/11  /mnt/111

建立一个opt目录下的11目录软链接到mnt目录,并取名为111(也可以不取名,会保留原名11)

image.png

区别

对比项硬链接软链接
本质本质是同一个文件本质不是同一个文件
inode(身份证号)相同不同
连接数创建新的硬链接,链接数会增加,删除硬链接,链接数减少删除,新建都不会改变
文件夹不支持支持
删除源文件只是链接数减一,但链接文件的访问不受影响无法访问连接文件
文件
类型和源文件相同链接文件,和源文件无关
文件大小和源文件相同(指向硬盘上的同一个文件)源文件的路径的长度

cp(copy)

复制文件或目录

格式:cp (需要复制的文件或目录)(复制的地方,可以改名,可以不改名)

[root@localhost mnt]# cp /opt/11  /mnt/123

将opt目录下的11复制到mnt目录下并取名123(也可以不取名,会保留原名11)

image.png

-i

覆盖目标同名文件或目录时提醒用户确认

[root@localhost mnt]# cp -i  /opt/11  /mnt/123

复制时有同名的文件会提醒是否覆盖

image.png

-f

覆盖目标同名文件或目录时不进行提醒,直接强制复制

[root@localhost mnt]# cp -f  /opt/11  /mnt/123

第一次我们输入指令时系统提示了是否覆盖,是因为系统把cp -i设置了别名cp,默认都是需要提醒的,系统执行命令时是先执行别名命令,所以会有提示,这个时候我们用\反斜杠这个符号暂时使用一下原本的命令,就会发现覆盖没有提醒了

image.png

-p

复制时保持源文件的权限、属主及时间标记等属性不变

[root@localhost opt]# cp -p /home/lilili/kkk.txt /opt/kkk.txt

可以看到kkk这个文件在lilili这个用户的家目录下,拥有者和拥有组都是lilili,我们使用了-P之后就会保留kkk原文件的拥有者和拥有组

image.png

-a

完整保留所有的信息包括连接文件(要用绝对路径)

[root@localhost mnt]# cp -a  /mnt/aaa1  ./aaa2

将连接文件复制到当前文件夹,完整保留了连接文件的属性

image.png

-r

复制目录时必须使用此选项,表示递归复制所有文件及子目录

[root@localhost mnt]# cp -r /opt/aa ./aa1

有-r才能复制成功

image.png


rm

删除文件

🎈格式:rm [选项] 要删除的文件或目录

  • -f、强制

  • -i、交互

  • -r 递归(删除目录需要)

    [root@localhost opt]# rm -rf /opt/aa
    

删除了opt下的aa文件

image.png

mv

移动 改名

如果路径不一样就是移动, 如果路径相同就是改名(只能一个个改)

🎈格式:mv [选项] … 源文件或目录… 目标文件或目录 单个文件

[root@localhost opt]# mv /opt/22 /mnt/221

image.png

查找文件

which

用来找命令 搜索的范围由PATH决定:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 在这5个文件夹中寻找

[root@localhost opt]# which ls

找ls这个命令的路径在哪儿 image.png

locate

通过数据库找文件,速度快,找常年不动的文件

[root@localhost opt]# locate /etc/*.conf

查找etc下以.conf结尾的文件

image.png

find

命令的特点:

  • 精确查找
  • 实时查找 遍历(慢)
  • 支持查找条件较

格式:find [选项]... [查找路径] [查找条件] [处理动作]

  • 查找路径:指定具体目标路径;默认为当前目录

  • 查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件

  • 处理动作:对符合条件的文件做操作,默认输出至屏幕(print)

  • 查找条件 |关键字|说明| | ----------- | -------------------------- | | -name| 根据目标文件的名称进行查找,允许使用“*”及“?”通配符必须加上" "| |-iname|不区分名字的大小写| |-size|根据目标文件的大小进行查找一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件常用的容量单位包括 kB(注意 k 是小写)、MB、GB(在没有+ -的情况下写的越小越好)| |-user|根据文件是否属于目标用户进行查找| |-type|根据文件的类型进行查找文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等| |-a|和,可以省略| |-o|或 |-inum|根据文件inode号查找| |-perm|按文件权限查找| |-maxdepth level|将你的文件以分级的形式查找| |-mindepth level|将你的文件以分级的形式查找| |-mtime|时间| |-empty|空目录| |-nouser|无主用户,用户被删除|

  • 处理动作 |选项|作用| | ----------- | -------------------------- | |-print | 默认,不需要输入| |-ls | 长格式| |-delete | 删除| |-ok | 执行一次询问一次| |-exec| 直接处理,不询问|

find 命令的结合使用

[root@localhost etc]# find /data/ -mtime 30 -type f -name "*.log" -exec rm -rf {} \;

找到data目录下30天左右的以.log结尾的普通文件并删除

image.png

总结

linux命令可以结合使用,单个命令也可以配合不同的选项,要善用通配符,通配符需要加上英文模式下的双引号,linux都需要英文模式下输命令,以免影响操作