大数据学习笔记(三) -- linux的重要知识点以及相关命令(一)

版权声明:weixin_40247263的博客 https://blog.csdn.net/weixin_40247263/article/details/82794776

Table of Contents

 

linux特点

根下目录含义

ls -l  输出的内容解释

type

file

yum

man

help

ehco

df

mount和umout

du

useradd

cd

mkdir

rm

cp 

mv

ln

stat


linux特点

linux中 一切皆文件,一个进程也会被映射成文件,一个硬盘也会被映射成文件。

linux 是一个虚拟的目录树结构,每个分区会被对应一个目录。

window中我们执行一个程序是用鼠标点击exe,linux中是通过命令,其实输入一个命令就相当于windows中打开一个程序。

像下面这种显示方式,然后接收用户输入命令-->解析出命令-->执行命令-->返回结果 就是由bash程序为我们提供的服务

bash的工作原理 : 根据空格切割,第一个元素作为命令,判断命令是内部命令还是外部命令,在环境变量中以从左到右的顺序寻找,找到了就去执行。

[root@node001 ~]# 

根下目录含义

proc  内核运行状态的映射目录

proc/进程号/fd    存放该进程的 io 流 ,0代表标准输出流,1代表标准输入流,2代表错误输出流

bin  可执行文件目录

dev  设备目录

home 用户目录

lib 和 lib64 库目录

opt  用户软件安装目录

usr  一些规范的软件会自动安装在usr目录下

etc   配置文件目录

var  存放数据,如数据库数据或war包

mnt 挂载点目录,额外的临时文件系统

media 挂载点目录,移动设备


ls -l  输出的内容解释

注意 ,上面的文件硬连接的次数是针对文件来说的,如果是一个目录,该目录下没有其他目录则为2,如果有其他目录,数字代表 2+目录数。

如下

[root@node001 ~]# ll
total 32
drwxr-xr-x.  3 root root 4096 Sep 21 16:27 abc
-rw-------.  1 root root  900 Sep 21 03:28 anaconda-ks.cfg
-rw-r--r--.  1 root root 8815 Sep 21 03:28 install.log
-rw-r--r--.  1 root root 3384 Sep 21 03:27 install.log.syslog
-rw-r--r--.  1 root root 1796 Sep 21 15:38 profile
drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
[root@node001 ~]# cd abc/
[root@node001 abc]# ll
total 8
drwxr-xr-x. 2 root root 4096 Sep 21 16:26 a
-rw-r--r--. 1 root root    4 Sep 21 16:27 b
[root@node001 abc]# cd a
[root@node001 a]# ll
total 0

 abc是一个目录,且目录下有一个目录 a ,有一个文件b ,所以abc 那里显示的是 2+1 = 3 ,而目录a是一个空目录,所以a显示的就是2,而普通文件显示的为1.


type

通过type -a command 可以查看一个 命令所指向的程序所在的路径

如下

[root@node001 ~]# type -a ifconfig
ifconfig is /sbin/ifconfig   # 告诉我们ifconfig程序在 /sbin/ifconfig目录下

向ifconfig这种 返回一个路径,说明ifconfig是一个第三方的程序,并不是linux自带的。称为外部命令

[root@node001 ~]# type cd
cd is a shell builtin    

它说 cd 命令 是一个 builtin ,意思就是说这是一个linux 集成的命令。称为内部命令

shell  代表该命令处于 人机交互层,比如这种命令行或windows下点击图标都称为shell


file

用来查看文件类型

如下

[root@node001 ~]# file /sbin/ifconfig
/sbin/ifconfig: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

ELF 代表二进制可执行文件

[root@node001 ~]# type yum
yum is hashed (/usr/bin/yum)
[root@node001 ~]# file /usr/bin/yum 
/usr/bin/yum: a /usr/bin/python script text executable

通过上面命令可以看出 yum 是一个python脚本,那么一个python脚本并不是一个可执行程序,那么它是怎么运行的呢?

 我们 使用  vi /usr/bin/yum 命令来查看一下这个python脚本的内容,可以看到如下内容

注意第一行,意思是使用 /usr/bin/下的python来执行该脚本,那么我们来看一下这个python到底 是不是一个二进制的可执行文件

[root@node001 bin]# file python
python: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for G

可以看出,是一个二进制可执行文件。 这个python程序会将 python脚本里的内容一边解释为cpu能读懂的东西,一边执行。 


yum

安装外部程序

[root@node001 ~]# yum install man -y
[root@node001 ~]# yun install man-pages

-y  代表同意安装,没有 -y 还会询问一次是否确定安装 


man

看一个外部程序的帮助文档

[root@node001 ~]# man ifconfig

 man命令可以查看下面几种类型的帮助文档

 

 可以通过 

[root@node001 ~]# man 8 ifconfig

 查看


help

看一个内部程序的帮助文档

[root@node001 ~]# help cd

ehco

在屏幕上显示字符串

$用于提取指定内容

下面 输出的是环境变量,环境变量配置的是可执行程序的所在的目录。bash会根据这些目录去找到可执行文件,从而响应用户输入的命令,要注意的是bash会从左向右去查找,查找到了就会执行。所以不存在相同的可执行程序想执行哪个就执行哪个。

[root@node001 bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

下面的命令可以输出bash程序的进程号 

[root@node001 dev]# echo $$
1557

df

查看磁盘使用情况,以及磁盘挂载目录情况

[root@node001 grub]# df
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/sda3      100944296 834348  94982220   1% /
tmpfs             502204      0    502204   0% /dev/shm
/dev/sda1         198337  27810    160287  15% /boot
[root@node001 grub]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  815M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       194M   28M  157M  15% /boot

可以看出sda3 也就是我们之前 用来存放 自己安装的程序的磁盘挂载了在 根目录下

sda1 用来引导系统启动的磁盘挂载在了 根目录下的 boot 目录下

这里说一下 linux中的 目录和分区的对应关系,linux 根目录下的 所有文件夹是固定的,也就是你安装好以后就肯定存在那些文件夹,而我们安装centOS的时候进行的手动分区,实际上是将 分区指定挂载到某个目录下。

这种设计增强了可移植性。不像winows你写个代码,从E盘读取某个文件,把代码放别人电脑上,但别人电脑可能都没有E盘。

linux能够保证目录的一致性,就是所有人安装完linux系统 ,根目录下的目录都是一致的。

windows是在分区即不同磁盘中创建的目录,而linux是将分区挂载到目录下。然后目录又一样。

linux系统启动的过程大致如下

通电以后主板里有一个 bios(basic input output system) ,bios中有一段代码放入内存执行。 从而会指向引导系统的设备如优盘、硬盘 等。默认都是硬盘。读取硬盘前512字节(读的分区表),加载程序放入内存,执行程序 , 找到活动分区 , 就是 boot 分区,分区起始位置读取固定字节数(把小程序再存入内存) , 然后就把这第一个分区(boot分区)算作 根 ,从boot下再读取配置文件 、内核文件 读到内存里,从而给cpu reset指令,使内核接管硬件。内核接管硬件以后,cpu再读取的数据,就是从内核展开的指令里面读。然后重新挂载根目录,挂载的是sda3。然后会运行sbin中init程序(第一个程序)用来完成操作系统的初始化即安装各种软件,最终bash程序加载起来,我们就可以通过命令行进行人机交互了。

查看个文件来理解

[root@node001 boot]# vi /boot/grub/grub.conf 

这个文件表明了 引导系统重要文件的位置, 它说是在根目录下,但实际这两个文件是在 boot目录下。之所以这样是因为在加载内核之前,boot分区就是根目录,只不过是加载完内核一个给cpu一个reset指令使其重新将sda3挂载到了根目录。然后再通过mount 将 sda1挂载到 boot目录下


mount和umout

通过

[root@node001 /]# umount /boot/

将挂载移除

[root@node001 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  815M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm

可以看到 sda1 的对应关系就没有了

[root@node001 /]# ll
total 92
dr-xr-xr-x.  2 root root  4096 Sep 21 03:27 bin
drwxr-xr-x.  2 root root  4096 Sep 21 03:25 boot
drwxr-xr-x. 18 root root  3700 Sep 21 06:01 dev
drwxr-xr-x. 61 root root  4096 Sep 21 09:29 etc
drwxr-xr-x.  2 root root  4096 Sep 23  2011 home
dr-xr-xr-x.  8 root root  4096 Sep 21 03:27 lib
dr-xr-xr-x.  9 root root 12288 Sep 21 03:27 lib64
drwx------.  2 root root 16384 Sep 21 03:25 lost+found
drwxr-xr-x.  2 root root  4096 Sep 23  2011 media
drwxr-xr-x.  2 root root  4096 Sep 23  2011 mnt
drwxr-xr-x.  2 root root  4096 Sep 23  2011 opt
dr-xr-xr-x. 85 root root     0 Sep 21 06:00 proc
dr-xr-x---.  2 root root  4096 Sep 21 07:56 root
dr-xr-xr-x.  2 root root 12288 Sep 21 03:27 sbin
drwxr-xr-x.  7 root root     0 Sep 21 06:00 selinux
drwxr-xr-x.  2 root root  4096 Sep 23  2011 srv
drwxr-xr-x. 13 root root     0 Sep 21 06:00 sys
drwxrwxrwt.  3 root root  4096 Sep 21 08:38 tmp
drwxr-xr-x. 13 root root  4096 Sep 21 03:26 usr
drwxr-xr-x. 17 root root  4096 Sep 21 03:26 var
[root@node001 /]# cd /boot/
[root@node001 boot]# ll
total 0

可以看到 boot 目录存在,但是里面的内容没了。

通过

[root@node001 dev]# mount /dev/sda1 /boot

将 dev 下的 sda1磁盘 挂载到 /boot 目录下 

[root@node001 boot]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  815M   91G   1% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       194M   28M  157M  15% /boot
[root@node001 dev]# cd /boot/
[root@node001 boot]# ll
total 21672
-rw-r--r--. 1 root root   105195 Nov 22  2013 config-2.6.32-431.el6.x86_64
drwxr-xr-x. 3 root root     1024 Sep 21 03:27 efi
drwxr-xr-x. 2 root root     1024 Sep 21 09:28 grub
-rw-------. 1 root root 15221168 Sep 21 03:28 initramfs-2.6.32-431.el6.x86_64.img
drwx------. 2 root root    12288 Sep 21 03:25 lost+found
-rw-r--r--. 1 root root   193758 Nov 22  2013 symvers-2.6.32-431.el6.x86_64.gz
-rw-r--r--. 1 root root  2518236 Nov 22  2013 System.map-2.6.32-431.el6.x86_64
-rwxr-xr-x. 1 root root  4128368 Nov 22  2013 vmlinuz-2.6.32-431.el6.x86_64

又可以看到内容了。


du

查看目录占用空间

-h 单位换算、-s 求和      后面再接路径代表查看指定文件所占大小

[root@node001 etc]# du -hs ./*

useradd

添加用户,添加的用户会存在home文件夹下,以文件的形式展示

[root@node001 etc]# useradd zzh
[root@node001 etc]# cd /home/
[root@node001 home]# ll
total 12
drwx------. 2 god  god  4096 Sep 21 13:24 god
drwx------. 2 good good 4096 Sep 21 13:24 good
drwx------. 2 zzh  zzh  4096 Sep 21 14:50 zzh

cd

cd ~  进入当前目录

[root@node001 home]# cd ~

cd ~ 其他用户名  和  cd/home/其他用户名               进入其他用户目录

[root@node001 ~]# cd ~god
[root@node001 god]# cd /home/good/
[root@node001 good]# 

mkdir

创建目录

平行创建多个目录

[root@node001 ~]# mkdir ./x/1dir ./x/2dir ./x/3dir
[root@node001 ~]# ls
abc  anaconda-ks.cfg  install.log  install.log.syslog  x
[root@node001 ~]# cd x
[root@node001 x]# ls
1dir  2dir  3dir  y

花括号优化  , 分号 分割命令

[root@node001 x]# cd;mkdir ./x/{a,b,c}dir
[root@node001 ~]# ls
abc  anaconda-ks.cfg  install.log  install.log.syslog  x
[root@node001 ~]# cd x
[root@node001 x]# ls
1dir  2dir  3dir  adir  bdir  cdir  y

-p 递归创建多个目录

[root@node001 ~]# ls
abc  anaconda-ks.cfg  install.log  install.log.syslog  x
[root@node001 ~]# cd x
[root@node001 x]# cd y
[root@node001 y]# cd z

rm

删除

-r  递归删除

-f  删除不询问是否确定删除

[root@node001 tmp]# rm x
rm: cannot remove `x': Is a directory
[root@node001 tmp]# rm -r x
rm: descend into directory `x'? ^C
[root@node001 tmp]# rm -rf x
[root@node001 tmp]# ls
yum.log

cp 

拷贝 文件

-r 递归拷贝

[root@node001 ~]# cp x /tmp
cp: omitting directory `x'
[root@node001 ~]# cp -r x /tmp

mv

移动文件且可以改名

[root@node001 zzh]# mv /tmp/p /home/zzh/x
[root@node001 zzh]# ls
x
[root@node001 zzh]# ls
x
[root@node001 zzh]# mv x p
[root@node001 zzh]# ls
p

ln

添加链接,类似windows中的快捷方式,链接分为软连接和硬链接

硬链接   ln  原文件名  链接名

[root@node001 ~]# ll
total 32
drwxr-xr-x.  2 root root 4096 Sep 21 15:00 abc
-rw-------.  1 root root  900 Sep 21 03:28 anaconda-ks.cfg
-rw-r--r--.  1 root root 8815 Sep 21 03:28 install.log
-rw-r--r--.  1 root root 3384 Sep 21 03:27 install.log.syslog
-rw-r--r--.  1 root root 1796 Sep 21 15:38 profile
drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
[root@node001 ~]# ln profile xyz
[root@node001 ~]# ll -i
total 36
1310732 drwxr-xr-x.  2 root root 4096 Sep 21 15:00 abc
1310729 -rw-------.  1 root root  900 Sep 21 03:28 anaconda-ks.cfg
1310722 -rw-r--r--.  1 root root 8815 Sep 21 03:28 install.log
1310723 -rw-r--r--.  1 root root 3384 Sep 21 03:27 install.log.syslog
1310742 -rw-r--r--.  2 root root 1796 Sep 21 15:38 profile
1310733 drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
1310742 -rw-r--r--.  2 root root 1796 Sep 21 15:38 xyz

ls -l -i  通过 i  可以查看 文件地址, 可以看到 xyz 和 profile 的地址指向是一样的。以及 ll -i 输出内容中profile和xyz的第三个字段 是 2. 

软连接    

ln -s 源文件名 链接名

[root@node001 ~]# ln -s xyz aaa
[root@node001 ~]# ll -i
total 36
1310744 lrwxrwxrwx.  1 root root    3 Sep 21 16:33 aaa -> xyz
1310732 drwxr-xr-x.  2 root root 4096 Sep 21 16:31 abc
1310729 -rw-------.  1 root root  900 Sep 21 03:28 anaconda-ks.cfg
1310722 -rw-r--r--.  1 root root 8815 Sep 21 03:28 install.log
1310723 -rw-r--r--.  1 root root 3384 Sep 21 03:27 install.log.syslog
1310742 -rw-r--r--.  2 root root 1796 Sep 21 15:38 profile
1310733 drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
1310742 -rw-r--r--.  2 root root 1796 Sep 21 15:38 xyz

可以发现 软连接的 第三个字段数字为1, 源文件和链接文件所指向的地址也不一样,一个是1310744一个是1310742.

并且软连接文件的 第一个字母是 l 。

删除源文件以后会提示 找不到源文件

 

 无论是软连接还是硬链接,改变链接文件中的内容或源文件内容,另一个都会跟着改变


stat

查看文件属性

[root@node001 /]# stat /etc/profile
  File: `/etc/profile'
  Size: 1796      	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 1179683     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-09-21 03:34:13.380600126 +0800
Modify: 2013-10-02 17:06:18.000000000 +0800
Change: 2018-09-21 03:26:39.649999827 +0800

Access 访问该文件的最后一次时间

Modify 修改该文件内容的最后一次时间

Change  元文件被改变的最后一次时间,什么叫元文件? 就是该文件的大小被改变,权限被改变等等都被称做元文件被改变。


touch

作用1 : 

touch 未存在文件名  创建该文件

[root@node001 /]# cd opt/
[root@node001 opt]# ll
total 0
[root@node001 opt]# touch test
[root@node001 opt]# stat test 
  File: `test'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 2621442     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-09-21 16:51:37.114888038 +0800
Modify: 2018-09-21 16:51:37.114888038 +0800
Change: 2018-09-21 16:51:37.114888038 +0800

作用2:

touch  已存在文件名  刷新 Acess、Modify、Change的三个时间到当前时间

[root@node001 opt]# stat test 
  File: `test'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 2621442     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-09-21 16:51:37.114888038 +0800
Modify: 2018-09-21 16:51:37.114888038 +0800
Change: 2018-09-21 16:51:37.114888038 +0800
[root@node001 opt]# touch test 
[root@node001 opt]# stat test 
  File: `test'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 2621442     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-09-21 16:54:03.108886546 +0800
Modify: 2018-09-21 16:54:03.108886546 +0800
Change: 2018-09-21 16:54:03.108886546 +0800

猜你喜欢

转载自blog.csdn.net/weixin_40247263/article/details/82794776