Linux基本知识与目录命令

203 阅读14分钟

Linux基本知识目录与命令

Linux 的哲学思想

1、一切皆文件;
2、单一目的的[小程序]
3、组合小程序完成复杂任务;
4、文本文件保存配置信息;
5、尽量避免捕获用户接口;
6、提供机制,而非策略。

一、什么是shell?

1.1、概念

  • shell是Linux中运行的一种特殊程序(程序为执行任务的一串代码
  • shell在用户和内核之间充当“翻译官”(内核属于操作系统的一部分,用于调度cpu,程序占用多少内存)
  • 用户登录Linux系统时会自动加载一个Shell程序
  • shell是一类软件的总称(比如bash、sh、tsh都属于分类)
  • Linux中默认的shell程序时bash

image.png

1.2、shell命令执行的顺序:

1、绝对路径下的执行程序
2、先看别名,如果有别名,就直接执行
3、再区别是内部命令还是外部命令,如果内部命令直接执行
4、如果外部命令,首先查看hash缓存表,如果在表中,就直接进行;如果表中有,但是找不到,就直接报错
5、如果没有hash缓存表,则去$PATH路径下的文件夹去找,找到执行,找不到直接报错\

$PATH 路径下的5个缓存表:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/root/bin

1.3、shell与内、外部命令

1.3.1、shell 分为内部命令和外部命令,一般先执行内部命令,hash,再执行外部命令

内部命令(系统自带):

  1. 没有单独对应的系统文件:系统自带的,没有系统文件去打开
  2. 内部命令的程序一直处于开启状态
  3. 没有独立的文件
  4. 程序会自动载入内存,可以直接使用

外部命令(需要自己额外安装):

  1. 外部命令存放在硬盘上
  2. 每个外部命令都有相对应的文件
  3. 每个外部命令都要知道对应文件的位置,才可以经过shell加载后使用 image.png

别名 > 内部命令 > hash > 外部命令
哈希(hash):内部命令执行不会存在在哈希表中,外部命令会存在哈希表中

1.3.2、help命令可以查看内部命令

image.png

1.3.3、--help命令可以查看外部命令

image.png

1.3.4、可以使用 type 命令来区分内外部命令

image.png

二、Linux命令格式

通用的命令行使用格式
命令字 +[选项]+[参数](之间一定要空格隔开)\

  1. 命令字(区分字母大小写)\
  • 是整条命令中最关键的一部分\
  • 唯一确定一条命令(一定是确定的)
  1. 选项(程序不加选项只有默认的基础作用,加入选项可以让程序功能更强大)(默认功能)
  2. 参数(需要有选择对象):如果不加参数,默认是当前文件夹的所有参数(默认当前文件夹)

1、 以 . 开头的都属于隐藏文件
2、 ;可以隔开命令,执行多个命令

2.1、ls命令

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

2.1.1、ls -a(显示隐藏文件,包括. 与 ..开头的文件)

image.png

2.1.2、ls-l(显示文件属性)ls -l长格式显示,文件属性比较详细等同于ll

image.png image.png\

d 代表文件格式
rwx 创建者;r-x 所属组;r-x 其他 (r:可读;w:可写;x:可执行;-:没有该权限)
5 代表硬链接数,这边硬链接数是5
root 创建者(拥有者)
root 所属组(拥有组)
36 文件大小
9月 20 00:18 创建时间(最后一次使用文件的时间)
11 文件名

2.1.3、ls -A(显示文件,不包含.和..开头的隐藏文件)

image.png

2.1.4、ls- d(只显示当前目录的属性)

image.png

2.1.5、ls -h 人性化显示(加入了文件大小的单位)

image.png

2.1.6、ls -R 递归显示

image.png

补充ls -t 以时间排序 ; ls -i 显示indoe号 ; ls -S 文件大小排序 ; ls -r 倒序排列
注意ls 不单独使用,要配合通配符使用

2.2、通配符

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

?代表任意单个字符
*是代表任意单个长度

举例:
以a开头的文件:a*
以.txt结尾的文件:*.txt

image.png

*.t?t:表示列出所有以 .t?t 结尾的文件,t和t中间只能有一个字符 image.png

{1..10}:1到10 10个数 image.png

{a..z}:小写字母a-z image.png

[abcd] :[abcd]只代表一个数值,从abcd中任取一个,只表示一个数,如果寻找e名字的文件夹或文件夹则找不到; image.png

[0-9]指的是0-9的单个数字一共9个数字 image.png

[a-c]:a A b B c共五个数值 image.png

[^a-c]或者[!a-c]:反向匹配:除了上列的五个数值以外的内容即[C-Z] image.png

三、别名

3.1、概念:将一些很长的命令,自定义成简单的好记的命令

3.2、通式:alias 自行定义的命令='常用的复杂命令'

例:alias sna='hostnamectl set-hostname' image.png

3.3、删除别名

通式:unalias 自定义命令

alias 直接显示所有别名

四、du(disk use):统计文件占用磁盘大小

4.1、du -a(分开显示每个文件的大小)

image.png

4.2、du -s(显示当前文件夹的总大小)

image.png

4.3、du -h(人性化显示每个文件大小)

image.png

4.4、du -d 2

image.png

注意:-as 不能一起使用

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

五、创建

  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用。

5.1、mkdir 创建目录

通式:mkdir [选项] 目录位置及名称…
mkdir -p 递归建立文件夹

例:在etc文件夹下,递归创建文件夹1/2/3

image.png

mkdir -v 显示建目录过程

一般与p一起使用(mkdir -pv 文件目录名称)

image.png

5.2、touch 创建文件

通式: touch 文件名\

例:在etc文件夹下,创建{1..10}.txt 文件

image.png

六、ln 软硬连接

6.1、软连接

软连接 类似于windows里快捷方式
通式:ln -s 源文件或目录… 链接文件或目标位置\

例:将etc目录下的1.txt的文件,连接到mnt目录下,并取名1-1.txt

image.png

  • 软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置\
  • 在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件

这里需要注意,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。

软连接特点:\

  1. 删除源文件无法访问,再新建同名文件后依然可以访问
  2. 可以跨设备
  3. 可以支持文件夹

6.2、硬连接

硬连接:是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。
通式:ln [选项] 源文件 目标文件

image.png

硬连接的特点:

  • 不论是修改源文件(hard 文件),还是修改硬链接文件(hard2 文件),另一个文件中的数据都会发生改变。
  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 33554597 的文件)都可以被访问。
  • 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

6.3、软硬连接区别:

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

七、cd

命令效果
cd 或 cd ~若不指定目标位置,切换到当前用户的宿主目录(家目录)
cd -到前一次目录
一个点号“.”开头(自己)表示以当前的工作目录作为起点(已点开头的是)
两个点号“..”开头(上一级)表示以当前目录的上一级目录(父目录)作为起点
“~用户名”形式开头”表示以指定用户的宿主目录(家目录)作为起点
"."开头文件表示隐藏文件
~zhangsan (有个用户叫zhangsan 家目录为起点)表示以指定用户的宿主目录作为起点

八、cp 复制/备份

通式:

  1. cp [选项]… 源文件 目标 相当改名复制
  2. cp [选项]... 源文件... 文件夹 多个源文件只能复制到文件夹

8.1、cp命令的选项说明

选项说明
-f覆盖目标同名文件或目录时不进行提醒,直接强制复制
-i覆盖目标同名文件或目录时提醒用户确认
-p复制时保持源文件的权限、属主及时间标记等属性不变
-r复制目录时必须使用此选项,表示递归复制所有文件及子目录
-a完整保留所有的信息包括连接文件
-v可视化
-u相当于增备,差异备份
-b先备份(只保留最近)

复制多个文件必须要是目录,不能是文件,且目录要存在

九、rm 删除文件

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

选项:

  • -f、强制
  • -i、交互
  • -r 递归(删除目录需要)
[root@localhost data]# ls -a *
1 
#不显示隐藏文件 
[root@localhost data]# ls -a 
. .. 1 
#显示隐藏文件 
[root@localhost data]# ls *
# *不包括.开头的 l
s: 无法访问*: 没有那个文件或目录

[root@localhost data]# ls .*   //包括了 .. 上层目录 
.: 
..:
aaa boot dev home lib64 misc net proc run   sdb1 sys usr bin data etc lib   media mnt   opt root sbin srv   tmp var


[root@localhost data]# touch f{a..z}.log 
[root@localhost data]# touch f{A..Z}.log 
[root@localhost data]# ls 
123456.txt fa.log     fe.log fj.log fo.log ft.log fy.log
123.txt     f{A.Z}.log ff.log fk.log fp.log fu.log fz.log 1.txt
fb.log     fg.log fl.log fq.log fv.log rh
2.txt       fc.log     fh.log fm.log fr.log fw.log test.txt 
abc.txt     fd.log      fi.log fn.log fs.log fx.log 
[root@localhost data]# ls f[zhou].log   //包含z、h、o、u四个字母中的任意一个就会显示(只匹配单个字符)  
fh.log fo.log fu.log fz.log 
[root@localhost data# ls f[x-z].log     //显示xXyYz,不包括Z 
fx.log fX.log fy.log fY.log fz.log 
[root@localhost data]# ls f[a-c].log     //显示aAbBc,不包括C 
fa.log fA.log fb.log fB.log fc.log   
[root@localhost data]# ls f{a..c}.log   //显示abc所有小写 
fa.log fb.log fc.log 

[root@localhost data]# ls 1[[:lower:]]*     //显示小写字母 
1a1.txt 1e1.txt 1i1.txt 1m1.txt 1q1.txt 1u1.txt 1y1.txt 
1b1.txt 1f1.txt 1j1.txt 1n1.txt 1r1.txt 1v1.txt 1z1.txt

[root@localhost data]# ls 1[[:upper:]]*     //显示大写字母 
[root@localhost data]# ls 1[[:upper:]]* 
1A1.txt 1E1.txt 1I1.txt 1M1.txt 1Q1.txt 1U1.txt 1Y1.txt



[root@localhost data]# touch f{1..9}.txt 
[root@localhost data]# touch f{10..20}.txt 
[root@localhost data]# ls f[0-9].txt           //[0-9]只能匹配10以下的数字 
f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt f7.txt f8.txt f9.txt 
[root@localhost data]# ls f[0-9][0-9].txt     //两个[0-9]可以匹配双数字 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f{10..20}.txt       //{10..20}可以匹配双数字 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f??.txt       //两个?号可以匹配两个字符 
f10.txt f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt f17.txt f18.txt f19.txt f20.txt 
[root@localhost data]# ls f*.txt         //*可以匹配任意字符 
f10.txt f12.txt f14.txt f16.txt f18.txt f1.txt  f2.txt f4.txt f6.txt f8.txt
f11.txt f13.txt f15.txt f17.txt f19.txt f20.txt f3.txt f5.txt f7.txt f9.txt



[root@localhost data]# ls /etc/.*   //显示隐藏文件也包括..的上层目录 
[root@localhost data]# ls /etc/.* -d   //如果不想看上层目录 就要加-d 只显示当前目录 
/etc/. /etc/.. /etc/.java /etc/.pwd.lock /etc/.updated

十、mv 移动或者改名

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

选项说明
-f强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v显示文件或目录的移动过程
[root@localhost test]# mv bbb aaa //将目录bbb改名为aaa
[root@localhost test]# mv aaa /tmp   //将目录aaa移动到/tmp目录下


[root@localhost test]# mv 1.txt 2.txt file01.txt //源文件为多个时目标必须是目录,否则系统会报错 
mv: 目标"file02" 不是目录

[root@localhost test]# mv 1.txt 2.txt /tmp/aaa   //将多个文件移动到/tmp/aaa目录下
[root@localhost test]# ls /tmp/aaa 
1.txt  2.txt

[root@localhost test]# which mv           //查看mv命令,发现mv=mv -i 
alias mv='mv -i'       
          /usr/bin/mv 
[root@localhost test]# ls /tmp/aaa 
1.txt  2.txt [root@localhost test]# mv 1.txt /tmp/aaa   //当目标文件存在时,提示是否覆盖 
mv:是否覆盖"/tmp/aaa/1.txt"

十一、find 查找文件

11.1、特点

  • 精确查找
  • 实时查找
  • 支持查找条件巨多
  • 默认递归查询

缺点:慢

11.2、命令格式:

find [OPTION]... [查找路径] [查找条件] [处理 动作]
  • 查找路径:指定具体目标路径;不指定为默认为当前目录
  • 查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件
  • 处理动作:对符合条件的文件做操作,默认输出至屏幕 (print)

处理动作:

  • -ls 对查找到的文件列出属性信息
  • -delete 对查找到的文件进行删除
  • -exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,{}: 用于引用查找到的文件名称自身。
  • -ok COMMAND {} \;
    对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认。

11.3、常用命令选项

查找类型关键字说明
按名称查找-name根据目标文件的名称进行查找,允许使用“*”及“?”通配符
按文件大小查找-size根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB
按文件属主查找-user根据文件是否属于目标用户进行查找
按文件类型查找-type根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等
按inode号-inum根据文件inode号查找
按权限查找-perm按文件权限查找
最大搜索目录深度-maxdepth level将你的文件已分级的形式查找
最小搜索目录深度-mindepth level同上

按文件名称查找 -name

[root@localhost ~]# find /etc/ -name passwd    //查找文件名为passwd的文件
/etc/pam.d/passwd
/etc/passwd

[root@localhost ~]# find /etc/ -name '*.conf'  //查找以.conf结尾的文件
/etc/resolv.conf

[root@localhost ~]# find /etc/ -name 'vm*'     //查找以vm开头的文件
/etc/pam.d/vmtoolsd
/etc/abrt/plugins/vmcore.conf

按文件属主查找 -user

[root@localhost ~]# find /mnt -user root      //查找属主为root的文件
/mnt

[root@localhost ~]# find /home -user jlx      //查找/home下属于jlx的文件并列出属性
/home/jlx
/home/jlx/.mozilla
/home/jlx/.mozilla/extensions
/home/jlx/.mozilla/plugins
/home/jlx/.bash_logout
/home/jlx/.bash_profile
/home/jlx/.bashrc

按文件类型查找 -type

[root@localhost ~]#find /boot -type d        //查找/boot下的目录文件
/boot
/boot/efi
/boot/efi/EFI
/boot/efi/EFI/centos
/boot/grub2
/boot/grub2/i386-pc
/boot/grub2/locale
/boot/grub2/fonts
/boot/grub

按文件大小查找 -size

[root@localhost ~]#find -size 1M //查找文件(0,1]M的文件
.
./.bash_logout
./.bash_profile

注意:按文件大小查找时,大小范围需注意

  • find -size 1G:查找的是从0G到1G,不包括0G,即(0,1]。

  • find -size 2G:查找的是从1G到2G,不包括1G,即(1,2]。

  • find -size 1024M:查找的是从1023M到1024M,不包括1023M,即(1023,1024)

1024kb和1Mb一样吗?

  • 1024k 表示 1023k ~ 1024k,不包括 1023k。
  • 1M 表示 0M ~1M,不包括 0M。 故使用 find -size 1024k 查找更加精准

查找到文件后并做其他处理

[root@localhost opt]# find -name "*.img" -delete 
[root@localhost opt]# find -name "*.img" -exec rm -rf {} \; 
[root@localhost opt]# find -name "*.img" | xargs rm -rf 

[root@localhost opt]# find -name "*.txt" -ok mv {} /mnt \;    //查找.txt的文件并移动到/mnt目录下,对于每个文件执行命令之前,都会交互式要求用户确认 
[root@localhost opt]# find -name "*.txt" -exec mv {} /mnt \;  //查找.txt的文件并移动到/mnt目录下

按时间查找

#以“天”为单位: find -atime [+/-]#     //按读取时间查找 
#     //表示[#,#+1) 
+#   //表示[#+1,+∞)
-#   //表示[0,#) 

find -mtime            //按文件内容改变时间查找 
find -ctime            //按元数据改变时间查找

#以“分钟”为单位: 
-amin 
-mmin 
-cmin

find -mtime 10   //10天到11天,[10,11) 
find -mtime +10 //代表11天以上,[11,+∞) 
find -mtime -10 //10天以内,[0,10)

找到文件并删除的三种方式

find -name "*.img" -delete
find -name "*.img" -exec rm -rf {} \;
find -name "*.img" | xargs rm -rf

which
which 命令|程序名
which ls