马哥培训班的第一周笔记 学习笔记二 、三合集

linux学习笔记

阅读提示:本博客为初学者的课堂笔记整理而成,特点是杂乱且说明解释不全,解释的部分也未必很准确,仅供参考,发现描述错误或者错别字等请留言,笔者会尽量修改,但初学者能力有限,请勿喷(我会告诉你这是作业必须写的吗?肯定不会!)。

 

20180331更新,为方便阅读,更新部分字色用另外的颜色显示

20180407更新,改了点错别字,将重定向内容移到第二周笔记中

20180415更新,cp命令中匹配文件名时“*”和“.”的区别

转载请保留出处,http://www.178linux.com

Linux中有趣的给命令提示符加颜色的方法

PS1=”\[\e[33;40m\][\u@\h \w \T]\\$\[\e[0m\]”设置命令提示符的颜色

关于linux中颜色命令的使用方法

基本颜色控制单元格式为 \e[33m 表示后面的字符以设定的颜色输出,其中,1表示高亮,5表示闪烁,30到37表示字符的颜色,40到47表示背景颜色,数字和数字之间,用分号“;”隔开,例如:\e[1;5;32;46m  设定好之后,这个字段后面的字符就会以设定的颜色显示,然后要加上恢复颜色的单元 \e[0m 来终止颜色的输出,不然后面所有的输入都会是前面设定的颜色,掌握了这个特性之后,可以使用echo命令在屏幕上显示有颜色的字符输出。

一个课堂中用到的命令:
dd if:/dev/zero of:(文件名) bs=1M count=800
命令的含义是:使用zero这个特殊设备输出0到(文件名)中,一块是1M,总共输入800个块,这样就可以得到一个800M的文件用于试验,尚未学习到,以后补充。
lsof|grep deleted
这个命令会显示系统中已删除,但是占用空间并未释放的文件。用到了两个命令和管道,尚未学习到,以后补充。

二进制和十进制的转换

二进制和十进制之间的转换,可使用windows自带的计算器选择程序员模式即可快速计算,也可使用linux中的bc计算器,使用bc计算器转换位数时需要进行一些设定

[root@Centos6 ~]# bc

bc 1.06.95

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type warranty'.

obase=2

210

11010010

我们输入obase=2,设定输出的为二进制数,回车后输入210,回车,即可计算出210对应的二进制数,同理还可以计算8进制、16进制等

[root@Centos6 ~]# bc

bc 1.06.95

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type warranty’.

ibase=2

11010010

210

同理,我们输入ibase=2,设定我们输入的数字为二进制,回车后输入11010010,回车,即可计算出对应的十进制数。

数字不大时,也可以进行手工的简单运算,方法如下:

首先明确下面的对应关系,第一个数为2进制数,后面为10进制数

1=20=1

10=21=2

100=22=4

1000=23=8

10000=24=16

100000=25=32

1000000=26=64

10000000=27=128

通过上表,可在二进制数和十进制数之间进行转换,例如十进制数210

210-128=82 写下10000000

82-64=18 写下11000000

18-32负数了 此位为0

18-16=2 写下11010000

2-8负数 此位为0

2-4负数 此位为0

2-2=0 写下11010010 即为2进制的210。

二进制转换则把过程反过来然后将得出的数字相加即可得出对应的十进制数。

计算机中存储单位和它们之间的对应关系

1024B=1K

1024K=1M

1024M=1G

1024G=1T

1024T=1P

1024P=1E

1024E=1Z

1024Z=1Y

1024Y=1B

1024B=1N

1024N=1D

LINUX系统文件的基本结构

与windows不同,linux目录系统中只有一个根目录,表示为“/”,同时,linux也有一套标准规定了在各种基于linux的衍生系统中目录结构所应该遵循的标准,这个标准称之为FHS标准。这个标准主要的作用在于规范每个linux系统应该具有哪些目录,以及每个特定的目录下应该要放置什么样的文件。简单的示意如下:

在遵循FHS标准的linux系统中,上面的文件夹都是存在的,但并不是一定只有这些文件夹。

每个文件夹放置的文件都有一定的规则。

/bin 此文件夹中会放置一些普通用户和root都可以使用的命令

/boot 此文件夹中放置的是系统启动会使用到的文件和系统内核等。

/dev 在linux系统上,一切皆文件,各种装置和设备会以文件的形态存在于这个目录当中。

/etc linux系统的主要存档,如各种账号密码档,各种服务的起始档等配置文件,都会以文档的形式存储在这个目录下,一般来说,除了root用户可以进行修改外,其他用户只能进行查看。

/lib 这个文件夹放置的是各种系统或命令运行中需要调用的共享库文件,有的系统上还有/lib64目录。

/media 这个文件夹一般是挂载的cd/dvd

/mnt 这个文件夹是另一个额外装置的挂载点,一般由管理员手动挂载,光盘、U盘、硬盘等都能够进行挂载。

/opt 用来安装第三方软件的文件夹,现在一般并未使用。

/sbin 这个文件夹和/bin文件夹一样是用来放置命令的文件夹,不同的是这个文件夹里的命令使用不当会对系统造成巨大的破坏,只有root账户能够使用。

/srv 用于放置系统服务的一些数据。

/tmp 是用于存放系统运行过程中产生的临时数据。

/usr 存放linux操作系统大部分应用程序的文件夹,/usr中的许多文件和根下面的文件很相似,FHS标准中称之为系统的第二个分层。

/var 放置可变数据的文件夹,比如日志文件、搭建的网站产生的数据等。

另外系统中还有root用户的家目录/root,普通用户的家目录/home,还有虚拟的文件夹/proc,/proc目录中存的文件来自于内存,用于输出当前系统上硬件设备相关信息的虚拟文件系统,可以查看cpu信息和硬盘信息等等信息。

实际系统上还会有许多其他文件夹,但有些文件夹并不是必须的。

Linux 上的应用程序的组成部分

二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/sbin,/usr/local/bin,/usr/local/sbin

库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIRECTORY, /usr/local/etc

帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

实际系统上还会有许多其他文件夹,但有些文件夹并不是必须的。

Linux下的文件类型

Linux的文件系统与Windows的不同,Linux的文件类型并不是依赖于后缀,Linux系统在判断一个文件的文件类型时,会读取文件“头部“”的信息,这里保存的信息决定了这个文件的类型,使用ls -l命令输出长格式,可以看到每条信息的最前部有一串字符,这串字符的第一个字符也表明了文件的类型,后面则是与文件的权限相关。ls命令因为是系统默认定义了别名的命令,所以会输出颜色显示。文件类型、字符、以及颜色的对应关系如下:

-:普通文件 白色 可执行文件 绿色 压缩文件 红色

d: 目录文件 蓝色

b: 块设备 黄色黑底

c: 字符设备 黄色黑底

l: 符号链接文件 浅蓝色

p: 管道文件pipe

s: 套接字文件socket 粉红色

linux文件的颜色由一个配置文件控制,/etc/DIR_COLORS

 

在linux中,一切皆文件,硬盘在linux系统中会显示为/dev/sda,如果有第二块硬盘则会显示为/dev/sdb。如果是虚拟硬盘(云存储)则可能显示为/vda 、/vdb

硬盘的主分区最多只能分4个,如果要分配更多的分区,则会用一个主分区作为扩展分区,用来引导逻辑分区,在linux中则显示为下图的样式:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0   50G  0 part /

├─sda3   8:3    0   30G  0 part /data

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

可以注意到sda4只有1k,并不能存储,sda4只是作为扩展分区来引导作为逻辑分区的sda5.

 

 

Linux中的常用命令

由于尚未深入学习linux命令,现在只能对学习过程中出现的命令进行简单的使用,随着学习的逐渐深入,将会逐渐对命令的用法进行补充。

cat 用于显示文件中的内容,并不进行编辑,但是可以创建空白文件。

示例:

显示当前系统中网卡的配置文件内容

[root@Centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=dhcp

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

UUID=b3bdce25-bd72-4f53-ae6e-995a05265e00

DEVICE=ens33

ONBOOT=yes

示例:

创建一个新的空白文件(只能创建新的文件,不能编辑已有文件)

 

[root@Centos6 ~]# cat > f1

^C

[root@Centos6 ~]# ls

anaconda-ks.cfg  f1  install.log  install.log.syslog

uname 打印当前系统的相关信息,包括内核版本号、硬件架构、主机名称和操作系统类型等

示例:

操作系统名称

[root@Centos6 ~]# uname

Linux

内核版本号

[root@Centos6 ~]# uname -r

2.6.32-696.el6.x86_64

全部信息

[root@Centos6 ~]# uname -a

Linux Centos6.9.magedu30 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Cpu架构

[root@Centos6 ~]# uname -m

x86_64

主机名

[root@Centos6 ~]# uname -n

Centos6.9.magedu30

操作系统名称

[root@Centos6 ~]# uname -s

Linux

linux中的关机命令

halt 最简单的关机命令,直接关机。halt命令实际上是调用shutdown -h,halt执行时会终止应用程序,执行sync系统调用,文件系统写操作完成后停止内核,一般并未断电。

poweroff 在关闭计算机操作系统后,会通知电源切断电源供应。

shutdown 是linux系统提供的主要的关机操作命令,一般建议使用此命令关机,关机过程实际上是调用了init进程,并且提供了许多选项以实现各种关机需要。

-h 关闭电源 一般写作 shutdown -h now 执行时系统会立即关机,也可以指定关机时间

示例:

指定10点关机并提示用户

[root@Centos6 ~]# shutdown -h 10:00 “system will be down”

 

Broadcast message from root@Centos6.9.magedu30

        (/dev/pts/0) at 20:48 …

 

The system is going down for halt in 792 minutes!

system will be down

shutdown也支持直接在后面使用“+n”的方式关机,n为数字,单位为分钟。

示例:

[root@Centos6 ~]# shutdown +5 “system will be down”       

 

Broadcast message from root@Centos6.9.magedu30

        (/dev/pts/0) at 20:54 …

 

The system is going down for maintenance in 5 minutes!

system will be down

-c 关机通知会发送到每一个登录的终端上,如果在某一个终端上有用户有比较重要的工作暂时不能终止,就需要取消关机计划,此时可以使用 “-c”选项

[root@Centos6 ~]#

Broadcast message from root@Centos6.9.magedu30

        (/dev/tty1) at 20:59 …

 

The system is going down for maintenance in 5 minutes!

 

[root@Centos6 ~]# shutdown -c

上面的终端收到了通知,并执行了终止命令

在此终端上输入了5分钟后关机的命令,在前一个终端输入终止关机命令后,下方提示“shutdown cencelled”关机被终止。

-n 强行关机

-r 关机后重新开机

-t seconds以秒为单位设定关机计划

init 0 使用的是linux系统中一种名为runlevel的机制(runlevel也是一个命令,可以查看当前系统的runlevel,例如3为字符界面,5为图形界面),init 0为关机,init 6为重启,这种机制只能有root账户操作,普通用户是没有权限的。

重启命令

reboot 直译为重引导,即重新启动系统。

Init6 重新启动,root账户使用。

ifconfig 用于配置和显示linux内核中网络接口的网络参数,比如查询本机ip地址。

ls 此命令用于显示系统中的文件和目录,通过参数可以显示更多的文件和目录的信息。

ls

 [root@Centos6 ~]# ls

anaconda-ks.cfg  Downloads    install.log.syslog  Public

Desktop          f1           Music               Templates

Documents        install.log  Pictures            Videos

ls -l 一般系统里定义了ls -l的别名为ll,也可以手动自行定义(alias命令)

[root@Centos6 ~]# ll

total 108

-rw——-. 1 root root  1479 Mar 27 17:07 anaconda-ks.cfg

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Desktop

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Documents

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Downloads

-rw-r–r–. 1 root root     0 Mar 28 20:03 f1

-rw-r–r–. 1 root root 55444 Mar 27 17:07 install.log

-rw-r–r–. 1 root root 10606 Mar 27 17:05 install.log.syslog

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Music

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Pictures

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Public

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Templates

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Videos

ls -a可以显示隐藏文件,即以“.”开头的文件,ls -A输出和-a基本一样但是A选项没有 “.” 和“..”

ls -lh l选项提供长格式,h选项提供以人类方式显示,前面说了ll是ls -l的别名,所以如下输入,可以看到文件大小的单位发生了变化

[root@Centos6 ~]# ll -h

total 108K

-rw——-. 1 root root 1.5K Mar 27 17:07 anaconda-ks.cfg

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Desktop

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Documents

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Downloads

-rw-r–r–. 1 root root    0 Mar 28 20:03 f1

-rw-r–r–. 1 root root  55K Mar 27 17:07 install.log

-rw-r–r–. 1 root root  11K Mar 27 17:05 install.log.syslog

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Music

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Pictures

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Public

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Templates

drwxr-xr-x. 2 root root 4.0K Mar 28 20:35 Videos

ls -F选项会在不同的文件后面添加符号标记,例如目录为/ 可执行程序为*,因为现在的ls命令实际上已经被定义为别名,会自动给不同的文件添加颜色加以区分,这个选项并不常用

ls -r 以倒序的方式显示文件和目录

ls -R 以递归的方式显示目录和每个目录下的子目录

ls -ltr 组合选项,以文件或目录的最新修改时间的次序来显示,方便找到最新或最旧的文件,t选项提供了以时间进行排序的功能。

示例:

[root@Centos6 ~]# ll -t

total 108

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Music

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Pictures

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Videos

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Desktop

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Documents

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Downloads

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Public

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Templates

-rw-r–r–. 1 root root     0 Mar 28 20:03 f1

-rw——-. 1 root root  1479 Mar 27 17:07 anaconda-ks.cfg

-rw-r–r–. 1 root root 55444 Mar 27 17:07 install.log

-rw-r–r–. 1 root root 10606 Mar 27 17:05 install.log.syslog

[root@Centos6 ~]# ll -tr

total 108

-rw-r–r–. 1 root root 10606 Mar 27 17:05 install.log.syslog

-rw-r–r–. 1 root root 55444 Mar 27 17:07 install.log

-rw——-. 1 root root  1479 Mar 27 17:07 anaconda-ks.cfg

-rw-r–r–. 1 root root     0 Mar 28 20:03 f1

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Templates

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Public

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Downloads

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Documents

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Desktop

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Videos

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Pictures

drwxr-xr-x. 2 root root  4096 Mar 28 20:35 Music

ls -lS 可以按文件的大小进行排序

ls -I 显示文件和目录名的inode号

ls命令也支持在后面跟上目录名,显示指定目录的信息,

示例:

显示指定目录中文件和目录

[root@Centos6 ~]# ll /etc/sysconfig/  

total 224

-rw-r–r–. 1 root root  164 Feb 17  2016 acpid

-rw-r–r–. 1 root root  403 Mar 22  2017 atd

-rw-r—–. 1 root root  992 Mar 22  2017 auditd

-rw-r–r–. 1 root root  398 Mar 27 17:07 authconfig

-rw-r–r–. 1 root root  339 Mar 23  2017 autofs

drwxr-xr-x. 2 root root 4096 Mar 27 17:02 cbq

……省略……

也可以通过-d选项,仅显示此文件夹本身的信息

[root@Centos6 ~]# ll -d /etc/sysconfig/

drwxr-xr-x. 7 root root 4096 Mar 27 17:11 /etc/sysconfig/

ls -n显示文件和目录的UID和GID

ls -1 这里是个数字1,并非l,作用是关闭紧凑显示模式,以单列分行显示文件和目录列表。

l. 在系统中定义了一个别名,相当于ls -d .*,即显示目录中的隐藏文件夹。

ls -X 按后缀排序,要注意的是linux系统以紧凑模式显示文件和目录列表时,是以列为顺序显示的,并非行。

ls -U 按文件生成的顺序排序,新的在最后显示。

ls -d */ 只显示文件夹而不显示文件。

ls -t 按mtime(修改时间)排序。

ls -ltu 按atime(读时间/访问时间)排序

ls -ltc 按ctime(状态更改的时间,比如权限,所属组,所属主等文件的元数据而非文件内容更改)进行排序

 

ls 配合通配符使用的时候要注意,当你使用ls加通配符时,实际上系统是先对通配符进行了解释,然后将解释的内容传输给ls命令处理。此时显示的内容其实分为两层(没有文件夹就看不到第二层),第一层是由通配符匹配到的文件和文件夹的名字,第二层才是ls命令对第一层显示的文件或文件夹进行挨个匹配的结果。比如说有dir文件夹下面有a b c d四个文件夹被通配符匹配到,ls命令其实并不是对dir文件夹进行了ls,而是分别对a b c d四个文件夹进行了ls,如果现在需要的是显示dir文件夹下面有几个文件能被通配符匹配,则需要加上-d选项,这样ls就会对dir本身进行ls,且只显示能够被通配符匹配到的文件和文件夹。

特殊情况:

当ls指向软连接时,还是以/bin文件夹为例,输入ls /bin和ls /bin/显示的内容是一致的,但是当加上-d选项后,会发现前者是浅蓝色的链接文件,后者会显示蓝色的文件夹文件,而将选项换成-l,以ls -l的长格式输出会发现,ls-l /bin显示的是一个软连接,而ls -l /bin/则会显示usr文件下/bin文件夹中的文件,列表太长,有兴趣的可以在自己的机器上试验。

 

stat可以查看上面ls命令里提到的文件的3个时间。

[root@Centos7 /data 05:36:00]#stat ff1

  File: ‘ff1’

  Size: 0               Blocks: 0          IO Block: 4096   regular empty file

Device: 803h/2051d      Inode: 76          Links: 1

Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:etc_runtime_t:s0

Access: 2018-04-06 08:44:36.376958236 +0800

Modify: 2018-04-06 08:44:36.376958236 +0800

Change: 2018-04-06 08:44:36.376958236 +0800

 Birth: –

– File:显示文件名

– Size:显示文件大小

– Blocks:文件使用的数据块总数

– IO Block:IO块大小

– regular file:文件类型(常规文件)

– Device:设备编号

– Inode:Inode号

– Links:链接数

– Access:文件的权限

– Gid、Uid:文件所有权的Gid和Uid。

-文件的三种时间

这里特别提一下atime访问时间,在工作场景中,假设架设了一个网站,网站上的文件可能会被频繁的访问读取,此时atime会频繁的变化,而系统会频繁的将atime的变化写入到文件的元数据中,从而频繁的写磁盘,这个动作是无意义且会占用系统性能的,所以会在这种情况下会禁用atime,禁用方法现在学到了,通过chattr +A 锁定。

alias 用于定义别名, 当单独输入此命令时,会显示当前系统中已经定义的别名。

alias定义的命令别名只在当前生效,无法保存,如果要保存别名必须将别名的定义写入下面的文件中:

仅对当前用户:~/.bashrc(一般推荐仅对自己,不要修改全局配置)

 

[root@Centos7 ~]# cat ~/.bashrc

# .bashrc

 

# User specific aliases and functions

 

alias rm=’rm -i’

alias cp=’cp -i’

alias mv=’mv -i’

alias cdnet=’cd /etc/sysconfig/network-scripts/’

# Source global definitions

if [ -f /etc/bashrc ]; then

        . /etc/bashrc

fi

上面可以看到alias开头的行,即定义的别名,系统已经定义了三个,第四个为自行添加的别名,参照上面的格式即可在下次登录时成功生效(如果要立即生效,需要使用“.”命令或source命令使其立即生效,这里可以看到linux系统的一个特点,即系统启动后,运行于内存中的系统和保存在硬盘上的配置文件是相互独立的,必须通过一些命令或计划任务才能使两者发生交互)

对所有用户: /etc/bashrc

如果某个命令定义了别名,但某些情况下需要使用该命令的原始命令时,可以使用如下方法:

  • 输入完整命令路径
  • 使用单引号或双引号将命令扩起来
  • 在命令前面添加反斜线
  • 在命令前写上command(空格接命令)

unalias 用于取消别名,-a 取消所有别名(仅当前生效)

 

lsblk 显示当前系统中的块设备信息

[root@Centos6 ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.9_Final

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 29.3G  0 part /data

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

fdisk 是一个创建和维护分区表的程序,目前尚未学习到更多的使用方法。使用-l选项可以查看当前所有的分区表

示例:

[root@Centos6 ~]# fdisk -l

 

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0007cfab

 

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2             131        6505    51200000   83  Linux

/dev/sda3            6505       10330    30720000   83  Linux

/dev/sda4           10330       26109   126745600    5  Extended

/dev/sda5           10330       10591     2097152   82  Linux swap / Solaris

df 该命令可以查看系统上的块设备。同样支持-h选项以人类易读模式输出。

-i 选项显示设备的inode总共有多少个,使用了多少个。

[root@Centos6 /data 02:07:35]#df -i

Filesystem      Inodes  IUsed   IFree IUse% Mounted on

/dev/sda2      3203072 133936 3069136    5% /

tmpfs           125514      6  125508    1% /dev/shm

/dev/sda1        65536     38   65498    1% /boot

/dev/sda3      1921360     44 1921316    1% /data

/dev/sr0             0      0       0     – /media/CentOS_6.9_Final

cd 此命令用于切换用户当前所在的目录,输入cd会自动切换回家目录,切换支持相对路径和绝对路径,绝对路径需要输入完整的路径名,即以/开头,从根目录开始输入完整的路径,相对路径可以在当前目录位置的基础上进行目录切换,“./”示当前用户所在的目录(可省略),“../”表示当前目录的前一个目录,也支持连续使用例如:“../../”表示上一层目录的上一层目录。

cd 回到用户的家目录,相当于cd ~

cd – 返回上次进入的目录,只能返回一层,假设上一个目录是/b,当前所在目录为/a,反复使用cd -,只会在/a和/b之间切换,这个功能的实现依赖于变量$OLDPWD。

cd .. 相对路径的表示法,表示返回上一层目录,同理,../..则表示上上层目录。

cd -P cd的选项不多,-P表示如果要切换的目标目录是一个软连接,则会直接切换到软连接指向的目录。

示例:以7版本上的/bin文件夹为例

[root@Centos7 ~ 08:08:44]#ll -d /bin

lrwxrwxrwx. 1 root root 7 Mar 28 01:54 /bin -> usr/bin

[root@Centos7 ~ 08:08:53]#cd /bin

[root@Centos7 /bin 08:09:12]#pwd

/bin

[root@Centos7 /bin 08:09:20]#cd –

/root

[root@Centos7 ~ 08:09:30]#cd -P /bin

[root@Centos7 /usr/bin 08:09:38]#pwd

/usr/bin

pwd 用于查看用户当前所在的路径,以绝对路径的方式显示,这个命令的实现依赖于$PWD变量。

free 此命令用于显示内存的使用情况,也支持-h以人类易读的方式输出

示例:

[root@Centos6 ~]# free

             total       used       free     shared    buffers     cached

Mem:       1004112     393072     611040        320      30456     203728

-/+ buffers/cache:     158888     845224

Swap:      2097148          0    2097148

[root@Centos6 ~]# free -h

             total       used       free     shared    buffers     cached

Mem:          980M       383M       596M       320K        29M       198M

-/+ buffers/cache:       155M       825M

Swap:         2.0G         0B       2.0G

nano 简单的文本编辑器,编辑完成后按ctrl+o进行保存,然后按ctrl+x退出

id 查看当前用户的id号 -u选项查看UID

ip add 可以查看当前所有网卡的信息。

tty 查看当前的终端号

who 查看当前连接到系统的所有终端,如果是远程连接,则会在最后显示ip地址

who am i显示当前用户的用户名,登录终端类型编号、登录日期、时间、和ip地址。

也可以将am和 i替换成任意字母,例如who ss dd。

w 显示当前登录的用户的比较详细的信息,显示内容如下所示:

[root@Centos6 ~]# w

 22:19:04 up  1:50,  2 users,  load average: 0.00, 0.00, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT

root     pts/0    192.168.65.1          20:34    0.00s    0.17s    0.07s    w

root     tty1     –                    20:36   27:56     0.02s    0.02s   -bash

chvt 切换终端命令

echo 该命令会将输入的字符串送往标准输出,并在最后加上换行符。也可以用来显示变量的内容。

-n 不自动换行

-e 启用\字符的解释功能,当使用-e选项时,出现以下字符会进行特殊处理,而不是当成一般文字输出:

\a 发出警告声,编写脚本时有用

\b 退格键

\c 最后不加上换行符号

\n 换行且光标移至行首

\r 回车,即光标移至行首,但不换行

\t 插入tab

\\插入\字符

显示当前用户提示符的变量$PS1

[root@Centos6 ~]# echo $PS1

[\u@\h \W]\$

显示当前用户的shell类型,变量$SHELL

[root@Centos6 ~]# echo $SHELL

/bin/bash

显示定义系统寻找命令文件的位置和顺序的变量$PATH

[root@Centos6 ~]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

显示系统当前设置的历史命令列表中最大的保存条数

[root@Centos6 ~]# echo $HISTSIZE

1000

显示系统当前设置的历史命令存档文件中最大的保存条数

[root@Centos6 ~]# echo $HISTFILESIZE

1000

 

enable 可以显示当前shell的内建命令,并且可以禁用和解禁,-n选项禁用某个命令,要解禁只需要去掉-n选项执行即可。

hostname 显示完整的主机名

type 查看一个命令是shell的内部命令还是外部命令。

yes 重复打印命令,默认不停的显示y,也可以跟一个参数显示参数内容

touch touch命令会刷新文件的时间戳,如果指定的文件不存在,则会创建一个新的空白文件,所以此命令常用于安全的创建新文件,其本来的功能反而用的较少。

touch有几个常用选项:

touch -a 仅改变atime 和 ctime

touch -m 仅改变mtime和citme

touch -c 只刷新时间戳,不创建新文件,如果文件不存在,也不进行任何操作。也就是说关闭了默认的,没有指定的文件会创建一个的功能。

touch -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳

这里复习一下文件的三个时间戳的概念

        atime 最近一次读取(访问)文件的时间。

        mtime 最近一次修改文件内容的时间。

        ctime 最近一次文件元数据(权限、所属主、所属组等)而非文件本身发生改变的时间

cp 用于复制文件或文件夹

cp命令的格式为 :cp 【选项】 【源文件(夹)】 【目标文件(夹)】

当使用-t选项时格式是: cp -t  【目标文件(夹)】 【源文件(夹)】

同时cp命令也支持多个源文件,所以cp命令在使用时分成多种情况:

  • 源是文件,目标也是文件。此时又有三种情况,目标不存在,目标存在,目标存在但是是个文件夹

先在文件夹里建立了几个实验用的文件和文件夹

[root@Centos6 /data 09:28:29]#ls -F

dir1/  dir2/  f1  f1.bak  f2  testdir/

这里因为没有色彩,在使用了ls命令的-F参数,可以看到文件夹的后面添加了后缀/,方便理解。下同。

目标不存在

[root@Centos6 /data 09:30:55]#cp f1 dir2/f12

[root@Centos6 /data 09:35:15]#ls -F dir2

f12

可以看到f1文件被复制到dir2文件夹中并被重命名为f12,同时可以看到这里的文件路径使用的是相对路径,复习一下相对路径和绝对路径。

目标存在

重复上面的cp命令

[root@Centos6 /data 09:35:18]#cp f1 dir2/f12

cp: overwrite dir2/f12'

可以看到cp命令提示是否覆盖此时输入y然后回车是同意覆盖,直接回车则不覆盖。有一点要非常注意,这项功能的实现依赖的是cp命令的-i选项,因为当前是在root下操作,cp命令在系统默认中已经定义了别名,但是如果你是登录的普通用户,普通用户的默认设置中是没有这一别名的,需要自行设置,如果没有-i选项,cp命令会直接覆盖原有的同名文件,没有任何提示,所以建议拿到一个新系统,先确认系统中的别名,如果有需要,可以将自己习惯的别名添加进~/.bashrc文件中。此时,就有另外一个问题,如果定义了别名,而需要复制的文件很多,也确定了要覆盖目标处原有的文件,不想一个一个确认,此时就要使用原有的cp命令,在cp命令前加上\即可直接覆盖不提示(其他方法见alias命令)。

[root@Centos6 /data 09:41:33]#alias cp

alias cp='cp -i'

[root@Centos6 /data 09:44:54]#\cp f1 dir2/f12

目标存在且为文件夹

[root@Centos6 /data 10:28:23]#ls -F dir1        dir1下已经有一个名为f1的文件夹

f1/  f1.bak

[root@Centos6 /data 10:29:01]#cp f1 dir1/f1     使用这条cp命令,本来应该生成一个f1文件在dir1下

[root@Centos6 /data 10:29:08]#tree dir1        使用tree命令发现f1文件被放在了f1文件夹下面

dir1

├── f1

│   └── f1

└── f1.bak

 

1 directory, 2 files

tree命令也不是系统默认就有的命令,安装方法可以套用screen命令的安装方法,参见screen命令。

  • 源是多个文件或文件夹(需加-r/R选项),此时要求目标必须为文件夹,文件或文件夹会放在目标文件夹下,这个好理解,可能遇到覆盖提示的问题参见第一种情况即可。
  • 源是文件夹,当源是文件夹时,cp命名是无法直接使用的,必须加上-r/R选项,即递归复制文件夹下的所有内容,此时有三种情况,目标不存在,目标存在且为文件,目标存在且为文件夹

目标不存在

[root@Centos6 /data 10:39:53]#cp -R dir1 dir2/dir1bak

[root@Centos6 /data 10:40:16]#ls -F dir2

dir1bak/  f12

[root@Centos6 /data 10:40:25]#tree dir2/dir1bak

dir2/dir1bak

├── f1

│   └── f1

└── f1.bak

可以看到dir1被复制到dir2下,并且重命名为dir1bak,里面的内容和dir1完全一致。

目标存在且为文件

很显然文件夹是不可能变成文件的,所以结果是报错,可以选择将目标文件夹的名字修改下。

目标存在且为文件夹

上面我们已经使用cp命令在dir2下面生成了一个dir1bak的文件夹,重复上面的命令

[root@Centos6 /data 10:45:59]#cp -R dir1 dir2/dir1bak

[root@Centos6 /data 10:54:35]#tree dir2

dir2

├── dir1bak

│   ├── dir1

│   │   ├── f1

│   │   │   └── f1

│   │   └── f1.bak

│   ├── f1

│   │   └── f1

│   └── f1.bak

└── f12

输入的命令和上面是一模一样的,但是对比上面tree输出的结果,我们发现,第一、命令并没有报错。第二、命令并没有提示你dir1bak存在是否覆盖。第三、dir1bak文件夹的下面出现了一个保留了源文件名字的dir1文件夹,也就是说,当目标文件夹存在的时候,源文件夹会被直接复制到目标文件夹的下面,并且保留源文件夹的名字。

4、当复制的目标是系统里的特殊文件时,比如/dev/sda、/etc/zero之类的文件,在复制时一定要加-a选项保留源的属性,否则会造成灾难性的后果

cp命令的常用选项

-i:覆盖前提示–n:不覆盖,注意两者顺序,root账户默认cp定义了别名cp -i,普通用户使用的是原始的直接覆盖不提示的cp命令。

-r, -R: 递归复制目录及内部的所有内容,当源为文件夹时,必须要加该选项

-a: 归档,相当于-dR--preserv=all 常用选项,可保留源文件的权限。

-d:--no-dereference --preserv=links 不复制原文件,只复制链接名

--preserv[=ATTR_LIST]

mode: 权限

ownership: 属主属组

timestamp:

links

xattr

context

all

        -p: 等同--preserv=mode,ownership,timestamp

        -v: --verbose 可视化,可显示复制过程

        -f: --force 强制覆盖,实际实现流程是先删除原目标文件,再复制源文件,也就是说,如果用户对所在文件夹的权限有删除权限,只是对文件本身权限不够,才可以实现。

        -u:--update 只复制源比目标新的文件或目标不存在的文件

        -b 当文件存在时,覆盖前,为其创建一个备份

       --backup=numbered 目标存在,覆盖前先备份加数字后缀,在实际工作过程中,可定义成别名,防止误覆盖。

cp命令在使用时,可使用通配符对文件(夹)进行匹配,但有一点需要注意,如果源目录有隐藏文件,使用“*”号是无法匹配到隐藏文件的,但可以通过“.”号进行匹配“.”号匹配的是目录下代表目录本身的“.”:

[root@Centos6 /data 03:21:24]#cp -a /root/.  /data/roottest

mv 该命令用于移动或重命名文件和文件夹

当源(文件或文件夹,以下简称源)和目标(文件或文件夹,以下简称目标)在同一目录下时,mv命令起到的作用是重命名。

当源和目标位于不同目录时,mv命令起到的作用是移动源,其机制和cp命令类似,可参考cp命令的各种情况,但要注意的是,cp命令会保留源文件,但是mv命令会删除源。

mv命令同样有一些和cp类似的选项:

 -b:当文件存在时,覆盖前,为其创建一个备份

-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录

-i:交互式操作,覆盖前先行询问用户

rm 该命令用于删除文件或目录,建议在实际工作中设置为别名alisa rm=‘mv -t /recycle’

具体使用方法可百度:linux 从入门到删库跑路。

rename 该命令用于批量对文件进行重命名

语法: rename  ‘源文件名中要替换的字符串’   ‘替换成什么字符串’   匹配什么样的源文件

示例:[root@CentOS6 data]#ls

2018       file10.bak  file18.bak  file25.bak  file32.bak  file3.bak   file47.bak  file8.bak

21:08:06    file11.bak  file19.bak  file26.bak  file33.bak  file40.bak  file48.bak  file9.bak

30         file12.bak  file1.bak   file27.bak  file34.bak  file41.bak  file49.bak  Fri

cd         file13.bak  file20.bak  file28.bak  file35.bak  file42.bak  file4.bak   lost+found

CST        file14.bak  file21.bak  file29.bak  file36.bak  file43.bak  file50.bak  Mar

data       file15.bak  file22.bak  file2.bak   file37.bak  file44.bak  file5.bak   test.txt

DD.txt      file16.bak  file23.bak  file30.bak  file38.bak  file45.bak  file6.bak

file0.bak    file17.bak  file24.bak  file31.bak  file39.bak  file46.bak  file7.bak

[root@CentOS6 ~]#rename "bak" "txt" /data/file*

[root@CentOS6 ~]#ls /data

2018     file0.txt   file17.txt  file24.txt  file31.txt  file39.txt  file46.txt  file7.txt

21:08:06  file10.txt  file18.txt  file25.txt  file32.txt  file3.txt   file47.txt  file8.txt

30       file11.txt  file19.txt  file26.txt  file33.txt  file40.txt  file48.txt  file9.txt

cd       file12.txt  file1.txt   file27.txt  file34.txt  file41.txt  file49.txt  Fri

CST      file13.txt  file20.txt  file28.txt  file35.txt  file42.txt  file4.txt   lost+found

data     file14.txt  file21.txt  file29.txt  file36.txt  file43.txt  file50.txt  Mar

DD.txt    file15.txt  file22.txt  file2.txt   file37.txt  file44.txt  file5.txt   test.txt

fiel       file16.txt  file23.txt  file30.txt  file38.txt  file45.txt  file6.txt

killall 以名字的方式杀死进程。更多的用法尚未学习到,以后补充。

tree 该命令可以以树状图的形式显示文件列表,这个命令并非系统默认安装的命令,安装方法参见screen命令的安装方法。

mkdir 创建目录。

-p 创建多级目录时,必须使用-p选项,自动创建所需的父目录。

-v 可视化创建过程

-m 创建目录时直接指定权限

mkdir支持大括号扩展(准确的说是bash支持大括号扩展)。(因为个人试验目录为/data,故都加入了/data路径,如果cd到/data文件夹可使用相对路径表示)

创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

[root@Centos7 ~ 02:31:16]#mkdir -pv /data/testdir/dir1/{x,y}/{a,b}

mkdir: created directory ‘/data/testdir’

mkdir: created directory ‘/data/testdir/dir1’

mkdir: created directory ‘/data/testdir/dir1/x’

mkdir: created directory ‘/data/testdir/dir1/x/a’

mkdir: created directory ‘/data/testdir/dir1/x/b’

mkdir: created directory ‘/data/testdir/dir1/y’

mkdir: created directory ‘/data/testdir/dir1/y/a’

mkdir: created directory ‘/data/testdir/dir1/y/b’

 

创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

[root@Centos7 ~ 02:38:40]#mkdir -pv /data/testdir/dir2/{x/{a,b},y}

mkdir: created directory ‘/data/testdir/dir2’

mkdir: created directory ‘/data/testdir/dir2/x’

mkdir: created directory ‘/data/testdir/dir2/x/a’

mkdir: created directory ‘/data/testdir/dir2/x/b’

mkdir: created directory ‘/data/testdir/dir2/y’

 

创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

[root@Centos7 ~ 02:40:10]#mkdir -pv /data/testdir2/dir{3,4,5/dir{6,7}}

mkdir: created directory ‘/data/testdir2’

mkdir: created directory ‘/data/testdir2/dir3’

mkdir: created directory ‘/data/testdir2/dir4’

mkdir: created directory ‘/data/testdir2/dir5’

mkdir: created directory ‘/data/testdir2/dir5/dir6’

mkdir: created directory ‘/data/testdir2/dir5/dir7’

大括号扩展 在bash中有一种机制叫做大括号扩展,在上面的mkdir命令中可以看到例子。

我们可以看到shell在解释命令的过程中,会将大括号的内容以逗号作为分隔符,逐个拿出来和外面的参数进行匹配,补完成完整的参数,然后再将得出的参数交给命令执行,这个机制就叫做大括号扩展,除了支持字符外,也支持“空”。

例如:cp /data/dir1/f1 /data/dir1/f1.bak可以写成cp /data/dir1/f1 {,.bak},

bash在解释上面命令的过程中,会将后面的格式扩展成前面的完整格式,然后执行。

大括号扩展同样支持有规律的输入缺省的补完。

例如:输入1到100的数

[root@Centos6 /data 11:47:02]#echo {1..100}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

同样支持{a..z}之类有规律的输入,同时也可以指定额外的规律。

例如:指定以2个数字的间隔跳着显示

[root@Centos6 /data 01:51:56]#echo {1..100..2}                                          

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

在大括号扩展中,同样支持通配符,但大括号本身并不是通配符中的符号。虽然通配符中有[ ]的存在,但两者不可混为一谈。

rmdir 删除空目录,使用-p选项递归删除,-v可视化,用的不多,通常使用rm命令代替其功能。

 

date 用于显示时间,配合选项和参数可以以指定格式显示任意时间,也可以设定系统时间。

常用方式:

显示当前的时间

[root@Centos6 ~]# date

Wed Mar 28 22:36:09 CST 2018

以指定的格式输出时间

[root@Centos6 ~]# date  "+%Y-%m-%d %H:%M:%S" 

2018-03-28 22:45:15

按照指定的字符串输出时间

[root@Centos6 ~]# date -d "20101010"

Sun Oct 10 00:00:00 CST 2010

按照指定的字符串以指定的格式输出时间

[root@Centos6 ~]# date -d "20101010" "+%F"

2010-10-10

显示3天前的日期并且以指定的格式输出

[root@Centos6 ~]# date -d "-3 days" "+%F"

2018-03-26

显示3年前的日期并且以指定的格式输出

[root@Centos6 ~]# date -d "-3 years" "+%F"   

2015-03-29

同理还有星期weeks、和月mouths。

显示指定日期是星期几,注意A a代表星期几,W w代表的是一年中的第几周和一周中的第几天

[root@Centos6 ~]# date -d "-3 days" "+%A"

Monday

ntpdate 以指定服务器的时间同步系统时间,虚拟机仅主机模式的话可以查下自己windows系统的ip地址进行同步。

[root@Centos6 ~]# ntpdate 172.20.0.1

29 Mar 11:36:52 ntpdate[3558]: adjust time server 172.20.0.1 offset -0.004801 sec

hwclock;clock显示硬件时钟

 

-s, --hctosys以硬件时钟为准,校正系统时钟

-w, --systohc以系统时钟为准,校正硬件时钟

 

hash

hash是一种模式,会记录用户执行过的外部命令路径记录在内存中,以提高下次操作的速度并节约资源,hash命令则是用于查看内存中已缓存的外部命令以及执行的次数,使用-d参数可删除某项缓存的命令,-p可以给缓存的命名设一个其他名字, 这时输入这个别名会执行原命令,即使名字和其他命令重复,系统也不会执行真正的命令,而是会优先执行在内存的缓存的命令,此时可以使用-t命令显示被设其他名字的命令的真实路径。-r清除缓存。

 

which 查看外部命令的路径,如果定义了别名,则会显示该别名的设定,并且显示原始命令的路径

-a选项可以查看一个命令所在的所有文件夹(如果有的话)。

特殊用法:

which –skip-alias 忽略命令别名只显示路径

[root@Centos7 ~]# which --skip-alias ls

/usr/bin/ls

[root@Centos7 ~]# which ls

alias ls='ls --color=auto'

        /usr/bin/ls

whereis 可以显示外部命令的路径,以及与该命令相关的帮助文档的路径。

systemctl restart network 重新启动网络服务,7版本上使用service network restart会提示你是通过systemctl实现的操作。

[root@Centos7 ~]# service network restart

Restarting network (via systemctl):                        [  OK  ]

cal 该命令会显示万年历

cal 默认显示当前月的日历

cal 跟年份,显示该年的日历。 cal 2018

cal 跟月份再跟年份,显示该年该月的日历。cal 8 2016

tzselect 设置时区的命令

screen 命令

screen并不是一个默认就有的命令,需要到光盘中进行安装,这个命令可以实现多终端同用户之间的同屏操作,在实际应用中,假设需要远程对主机进行一个耗时较长的操作,如果直接操作,万一断网,操作就会意外停止,产生不可预知的后果,此时,如果使用screen来操作,即使远程操作端意外离线,screen仍然能在后台继续执行命令。

screen -S创建会话,需指定一个名称。

screen -x 加入会话,如果并非同用户,则需要输入开启会话一方的密码。

screen -r 恢复某个会话,需跟上名称。

screen -ls 显示所有已经打开的screen会话。

exit 关闭所有终端上的screen会话并退出。

ctrl+a 松手,按d 退出当前screen会话,screen会话仍然运行。

安装screen,

  1. 首先需要将安装光盘挂载上,如果有图形界面,点击虚拟机右下角的光盘图标选择挂载,光盘将自动挂载上,如果没有图形界面则需要输入如下命令:mount /dev/sr0 /mnt/cdrom,使用这个命令要注意,虚拟机设置里面,光盘必须是已经挂载上了,只是没有挂载到系统,而且,如果cdrom文件夹不存在,需要先用mkdir /mnt/cdrom创建一个。挂载成功后使用df命令查看是否挂载成功。
  2. 可以在下面看到,代表光盘的路径/dev/sr0被挂载到了/mnt/cdrom上

[root@Centos7 ~]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       52403200 3687856  48715344   8% /

devtmpfs          623432       0    623432   0% /dev

tmpfs             638100       0    638100   0% /dev/shm

tmpfs             638100    8952    629148   2% /run

tmpfs             638100       0    638100   0% /sys/fs/cgroup

/dev/sda1        1038336  161472    876864  16% /boot

/dev/sda3       31441920   32944  31408976   1% /data

tmpfs             127620       8    127612   1% /run/user/0

/dev/sr0         8490330 8490330         0 100%  /mnt/cdrom

3.输入下面的命令

rpm -ivh 跟安装包的路径来安装,以上面的/mnt路径为例,演示如何寻找路径:

[root@Centos7 ~]# cd /mnt/cdrom

[root@Centos7 cdrom]# ls

CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7

EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7

EULA             isolinux  repodata  TRANS.TBL

这里看到一个名为Packages的目录,添加到上面的路径后面,注意大小写,多利用TAB键补全功能,回车进入,按上方向键进入之前的命令,ctrl+a将光标移动到行首,将cd命令替换为rpm -ivh,然后ctrl+e移动到行位,在最后输入screen之后用TAB键补全文件名,回车即可。

[root@Centos7 Packages]# rpm -ivh /mnt/cdrom/Packages/screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm

注意上面的路径并不一定是你电脑上的路径,如果是自动挂载的光盘,路径应该在/media目录下,按照步骤找到自己的路径即可,如果对目录结构很熟悉,可直接输入完整路径。

rz/sz命令用于在windows和linux之间传递文件。

rz/sz同样并非默认安装的文件,利用上面安装screen的办法,将最后的文件名替换成lrzsz后按TAB键补全文件名进行安装。

hexdump命令一般用来查看二进制文件的十六进制编码,但实际上它能查看任何文件,并不仅限于二进制文件。

whatis可以用来查看linux系统命令和文件的简介以及所属章节,依赖于数据库,新安装的系统要过一段时间才会自动生成,但可以使用makewhatis(6系列)| mandb(7系列)制作数据库。

history 该命令用于查看曾经输入的历史命令。

history命令相关变量有$HISTSIZE、$HISTFILESIZED等,分别规定了历史列表最大命令历史的保存数量和历史文件中最大命令的保存条数,这里有两个概念,历史列表指的是在内存中,即时更新的历史命令列表,历史命令文件指的是磁盘上的一个文件,在系统关闭时,如果是正常关机,历史列表会从缓存中写入到磁盘里的历史命令文件中,而登录时,系统则会将历史命令文件中的命令读到历史列表中,可以通过命令同步。

-c: 清空命令历史

-d offset: 删除历史中指定的第offset个命令

n: 显示最近的n条历史

-a: 追加本次会话新执行的命令历史列表至历史文件

-r: 读历史文件附加到历史列表

-w: 保存历史列表到指定的历史文件

-n: 读历史文件中未读过的行到历史列表

-p: 展开历史参数成多行,但不存在历史列表中

-s: 展开历史参数成一行,附加在历史列表后,伪造历史。

 

history命令的相关变量

HISTSIZE:命令历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

HISTTIMEFORMAT=“%F %T “ 显示时间

HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史

控制命令历史的记录方式:

环境变量:HISTCONTROL

ignoredups默认,忽略重复的命令,连续且相同为“重复”

ignorespace忽略所有以空白开头的命令

ignoreboth相当于ignoredups, ignorespace的组合

erasedups删除重复命令

配置文件存放在/etc/profile(全局)或~/.bash_ptofile(自己),但一般不建议将修改这些默认的配置文件,建议在下面的目录中建立一个配置环境变量的文件,将自己的配置放在这个文件中,文件名并无影响,但必须以.sh结尾。

例如:/etc/profile.d/env.sh

info 查帮助的命令

man 常用的查帮助的命令

--help 查内部命令帮助的命令

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看。这个命令同样支持-h以人类易读模式输出。

basename 取基名,去掉前面的路径

dirname 取目录名,去掉最后的文件名

wall这是一个广播命令用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。

bash里的快捷键

Ctrl + l清屏,相当于clear命令 常用

Ctrl + o执行当前命令,并重新显示本命令 常用

Ctrl + s阻止屏幕输出,锁定

Ctrl + q允许屏幕输出

Ctrl + c终止命令

Ctrl + z挂起命令

Ctrl + a光标移到命令行首,相当于Home 常用

Ctrl + e光标移到命令行尾,相当于End 常用

Ctrl + f光标向右移动一个字符

Ctrl + b光标向左移动一个字符

Alt + f光标向右移动一个单词尾

Alt + b光标向左移动一个单词首

Ctrl + xx光标在命令行首和光标之间移动

Ctrl + u从光标处删除至命令行首 常用

Ctrl + k从光标处删除至命令行尾 常用

Alt + r 删除当前整行 常用

Ctrl + w从光标处向左删除至单词首

Alt + d从光标处向右删除至单词尾

Ctrl + d删除光标处的一个字符

Ctrl + h删除光标前的一个字符

Ctrl + y将删除的字符粘贴至光标后

Alt + c从光标处开始向右更改为首字母大写的单词

Alt + u从光标处开始,将右边一个单词更改为大写

Alt + l从光标处开始,将右边一个单词更改为小写

Ctrl + t交换光标处和之前的字符位置

Alt + t交换光标处和之前的单词位置

Alt + N提示输入指定字符后,重复显示该字符N次

课堂上讲的一些实用技巧:

!string 重复前一个以“string”开头的命令

command !^ 利用上一个命令的第一个参数做cmd的参数

command !$ 利用上一个命令的最后一个参数做cmd的参数

command !* 利用上一个命令的全部参数做cmd的参数

command !:n 利用上一个命令的第n个参数做cmd的参数!?string 重复前一个包含string的命令

 

课堂中提到的一些文件

/proc/cpuinfo 查看cpu的详细信息

/etc/issue 配置登录前的提示内容

issue是个特殊的文件,支持一些特殊的选项:

issue选项说明:

\d:插入当前日期;

\s:插入系统名称;

\l:插入当前终端登入的名称;

\m:插入计算机的体系结构标识符,cpu架构;

\n:插入机器的节点(主机名);

\o:机器的NIS域名;

\O:计算机的DNS域名;

\r:操作系统内核版本号(uname -r);

\t:插入当前时间;

\u:插入当前用户登陆的数量;

 

/etc/motd 配置登录后提示内容

/proc/meminfo 查看内存

/ect/centos-release 看当前centos版本号

/etc/profile.d/XXX.sh 这个文件为自己创建,以.sh结尾即可,可以用来配置一些环境变量,而不用去修改系统默认的配置文件,减少误操作风险。

学习笔记三

inode索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。

(声明:以下内容节选自百度百科。  除特别声明外,其他内容均为原创或整理而来,转载请注明出处)

inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。

有时,人们使用了一些不同的术语,如 inode 和索引编号 (inumber)。这两个术语非常相似,并且相互关联,但它们所指的并不是同样的概念。inode 指的是数据结构;而索引编号实际上是 inode 的标识编号,因此也称其为inode 编号 或者索引编号。索引编号只是文件相关信息中一项重要的内容。下一个部分将介绍 inode 中的其他一些属性。

inode 表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。

下面的定义仅给出了 inode 中所包含的、UNIX 用户经常使用的一些重要信息:

  • inode 编号
  • 用来识别文件类型,以及用于 stat C 函数的模式信息
  • 文件的链接数目
  • 属主的 UID
  • 属主的组 ID (GID)
  • 文件的大小
  • 文件所使用的磁盘块的实际数目
  • 最近一次修改的时间
  • 最近一次访问的时间
  • 最近一次更改的时间

从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外)。可以在 AIX 的 Header 文件 /usr/include/jf/ino.h 中、或者 Web 页面 中可以找到完整的 inode 结构。

(节选完毕)

从上面的描述可以看出inode构成了linux系统的文件系统基础,linux中对文件的管理完全基于inode号,而linux系统的哲学思想是“一切皆文件”,由此可见inode号的重要性,由于笔者是初学者,水平有限,仅讨论较基础的内容。

inode与分区相关,即每个分区有自己的节点号体系,在这个体系中,索引节点号唯一,系统通过inode号来寻找磁盘上文件存放的具体位置,文件夹也有自己的节点号,在文件夹中,存放的是文件夹中的文件的节点号信息,当访问一个文件夹中的文件时,首先找到的是文件夹的节点号,访问文件夹,再访问文件夹中的文件的节点号,通过节点号找到文件在磁盘上的真实位置。使用df -i命令可以看到每个分区的inode号的数量,和已使用的inode号的数量,也就是说,在每个分区上inode号的数量其实是有限的,前面说了每个文件都会分配一个inode号来让系统能够找到文件的位置,哪怕这个文件是空的,这就会带来一个问题,如果一个分区有大量的小文件占用的大量的inode号,就会造成系统提示磁盘满的结果,虽然磁盘并没有满。

那么来看前面学过的cp命令,cp命令的作用机制是:收到命令请求时,系统分配一个空闲的inode号,在inode表中生成一个新的条目,将位置存储到inode中,然后复制源数据到目标位置,生成一个新的文件。

再看rm命令的作用机制,rm命令在使用的时候实际上是删除的指定文件所对应的inode号,而后将原文件占用的数据块标记为空闲,而数据实际上并未在硬件上被抹去,这也是为什么数据能够恢复的原因,但是如果有新的数据写入,则有可能被分配到这一数据块进行写入,这样就会破坏掉磁盘上面的数据,与此相关的,就有一条清除重要数据,保证数据安全的命令shred,这个命令的作用是对指定文件占用的数据块进行反复的写入,从而达到让数据无法恢复的作用。

插入一条命令:

shred 该命令功能是重复覆盖文件使其难以恢复。

常用选项:

-n 指定覆盖多少次,不加该选项默认为3次

-u 覆盖完成后,删除文件,linux系统一切皆文件,但像/dev/sda这样的的设备文件显然是不应该被删除的,所以有这个选项。

-z 最后一次覆盖使用0进行覆盖以隐藏覆盖动作

  再回来接着看inode与mv命令的关系,前面说了inode里存储的是文件的元数据信息,而且每个分区的inode表是互不相干的,那么当mv命令的源和目标都在一个分区的时候,mv命令执行的操作其实只是将inode表指向的文件位置进行了更改,并修改了时间戳,文件的数据本身并没有发生任何变化和移动,而当mv命令的源和目标不再同一分区时,执行的操作相当于先执行了一个cp命令,然后执行了一个rm命令。

   再看linux系统中的硬链接,硬链接实际上是增加了一个额外的记录项,这个记录项的作用是把指定的文件路径和inode号联系起来,比如有一个文件a inode号为100,我们指定文件b为a的硬链接,实际上b并未指向a,而是指向了a的inode号,那么我们在使用b时,已经和a没有任何关系,而是直接调用的100这个inode号,从另外一个方面来说,就是文件本身并未有任何改变和移动,仅仅是多了一个链接指向它,前面讲rm和inode号的关系时已经说明,删除文件只是删除了文件的inode号,并没有删除数据,那么在这里,删除a文件时,因为100这个inode号还有b在使用,所以这个inode号并不会被删除,b依然可以通过inode号对这个文件进行正常的访问而不受任何影响。那么这里还可以看出硬链接的另外一个特性,在前面我们提到inode号的体系是每个分区独立的,而硬链接是依赖inode体系来实现功能的,所以,硬链接的使用时,是无法跨分区使用的,同时创建硬链接时,链接的目标必须是硬盘上的文件,而不能链接到文件夹。

与硬链接对应的是软连接,虽然设置硬链接和软连接是使用的同一个命令的不同选项,但两种链接的实现机制是完全不一样的,软链接只是通过路径来寻找要链接的目标,类似windows的快捷方式,所以可以跨分区,而且软连接本身是一个独立的文件,里面记录了目标文件的位置而已。

对比一下硬链接和软连接的区别:

  • 硬链接会增加文件的链接数,而软连接不会,因为软链接和它链接的目标本质是两个文件。链接数在使用ls -l命令时,可以看到权限相关的字符串后面有个数字,这个数字就是硬链接,前面提到创建硬链接是不能对文件夹使用的,但是文件夹依然有这个链接数,而且最小是2,这个链接是系统创建的,一个来源于本身的路径,一个是linux文件系统中,每个文件夹下面会有一个“.”链接到自身,那么文件夹下面建立一个子文件夹时,这个子文件夹里有个“..”表示自己的父目录,此时父文件夹的链接数就会增加到3,以此类推。
  • 上面说了硬链接是不能垮分区的,而软连接只是储存了一个路径,所以不受限制,而且软连接支持相对路径。在这里是建议使用相对路径的,原因是:假设/etc下有目录a b,b里面有一个软链接链接到a下的一个文件夹,此时将a b移动到data下,使用相对路径的话,软连接就不会失效,使用绝对路径软连接就会失效,且有可能链接到一个不知道干什么用的文件上造成未知的后果。不过,使用相对路径时,一定要注意,相对的是软连接所在的路径,可以这么理解,我们只是设定了一个路径存放在一个文件中,系统发现这这个文件是一个软连接,它就会读里面的路径来找到真正需要使用的目标文件或文件夹在什么位置,而寻找的起点显然是软连接所在的文件夹。
  • 硬链接是不能对目录创建的,软链接可以。
  • 硬链接创建完毕之后,文件之间是相互平等相互独立的,只要有一个没有被删除,数据就可以正常访问,而软连接的目标文件被删除之后,软链接就失效了,除非在软链接链接的位置再放一个同名文件,但是这个文件的数据已经不是原来的数据了。
  • 硬链接各个文件的大小是完全一样的,而软连接的大小只和路径的长短有关。

应用举例:

在实际生产场景中,我们可能需要用命令或脚本调用一些软件,而软件一般是有版本号的,如果每次更新软件都要更改所有相关的脚本那显然很浪费时间,此时就可以对软件创建软连接,当版本更新时,只需要换一个软链接就可以达到更新软件的目的,同时,旧的软件也可以安心的放在磁盘上作为备份,需要回滚版本时,只需要删除软链接重新创建一个链接旧版本的软链接即可。

ln 该命令可以用来创建硬链接和软连接,默认创建的是硬链接,加上选项-s,创建软连接。

语法:

     ln [-s] filename [linkname]

当没有写入linkname的时候,默认在当前文件夹创建一个与filename同名的链接链接到filename。

readlink命令可以显示软链接链接到的目标文件,与ll不同的是,readlink只显示链接到的目标文件,而ll会将软连接和目标文件同时显示出来。

file 该命令用于判断文件的类型,工作原理是读取文件“头部”储存的信息

与windows不同,linux系统在绝大部分情况下对文件的后缀是不敏感的,linux在生成文件的时候,会在文件的“头部”存储文件类型,当使用ls -l命令时,每行第一个字符,显示了文件的类型。(参考笔记二中:Linux 上的应用程序的组成部分 条目)

选项:

-b 只列出辨识结果,不显示文件名称

[root@Centos6 /data 04:31:43]#file f3

f3: symbolic link to dir2/f1′

[root@Centos6 /data 04:47:56]#file -b f3

symbolic link to dir2/f1'

-f filelist 列出文件filelist中,文件名的文件类型

[root@Centos6 /data 04:49:58]#ls > filelist

[root@Centos6 /data 04:50:23]#file -f  filelist

dir1:     directory

dir2:     directory

f1:       empty

f1.bak:   empty

f2:       empty

f2~:      empty

f3:       symbolic link to dir2/f1′

f4:       symbolic link to dir2/f4'

filelist: ASCII text

testdir:  directory

注:上面的例子中,我们使用了一个>来将ls输出的内容,写到了filelist文件中,这个技术叫做重定向,后面再讨论。

-F 使用指定的分割符替换输出的文件名后默认的“:”

-L 查看对应软连接对应的文件的文件类型,而不是软连接本身。

[root@Centos6 /data 04:50:35]#file -L f3

f3: empty

[root@Centos6 /data 04:53:41]#file  f3 

f3: symbolic link to dir2/f1′

文件通配符

 

*匹配零个或多个字符

?匹配任何单个字符

~ 当前用户家目录

~mage 用户mage家目录

~+ 当前工作目录

~-前一个工作目录

[0-9]匹配数字范围

[a-z]:字母

[A-Z]:字母

[abcd]匹配列表中的任何的一个字符

[^abcd]匹配列表中的所有字符以外的字符

注意:关于字母的匹配,通配符是按照一个小写,一个大写,一个小写,一个大写的顺序排列的,例如:

[a-d]匹配的是a A b B c C d,[a-D] a A b B c C d D,在匹配时,要注意这个特性。

示例:

[root@Centos6 /data/test1 05:06:44]#ls

a  A  b  B  c  C  d  D

[root@Centos6 /data/test1 05:06:46]#ls [a-d]

a  A  b  B  c  C  d

[root@Centos6 /data/test1 05:07:13]#ls [a-D]

a  A  b  B  c  C  d  D

 

预定义的字符类:

输入man 7 glob可在系统中查看

预定义字符是一个整体,不要分开理解,比如[:digit:]表示的是数字0-9,写成通配符是[[:digit:]]相当于[0-9]

 

[:digit:]:任意数字,相当于0-9 常用

[:lower:]:任意小写字母 常用

[:upper:]: 任意大写字母 常用

[:alpha:]: 任意大小写字母 常用

[:alnum:]:任意数字或字母 常用

[:blank:]:水平空白字符 常用

[:space:]:水平或垂直空白字符 常用

[:punct:]:标点符号 常用

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:图形字符

[:xdigit:]:十六进制字符

通过实例来学习通配符的用法:

为了试验方便,首先使用了大括号扩展的用法(关于大括号扩展,请参见笔记二),创建了一些文件

[root@Centos6 /data 07:09:28]#touch {{1..9},{a..z}}{{6..8},{c..j}}{.conf,ps}

另外使用mkdir创建了几个目录,列表太长就不复制了。

1、显示/data目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数

字的文件或目录

[root@Centos6 /data 07:19:09]#ls -d l*[[:digit:]]*[[:lower:]]

l6.conf  l6ps  l7.conf  l7ps  l8.conf  l8ps

 

2、显示/data目录下以任意一位数字开头,且以非数字结尾的文件或目录

[root@Centos6 /data 07:22:15]#ls -d [[:digit:]]*[^[:digit:]]

16.conf  1j.conf  2i.conf  3h.conf  4g.conf  5f.conf  6e.conf  7d.conf  8c.conf  98.conf

16ps     1jps     2ips     3hps     4gps     5fps     6eps     7dps     8cps     98ps

17.conf  26.conf  2j.conf  3i.conf  4h.conf  5g.conf  6f.conf  7e.conf  8d.conf  9c.conf

……省略……

3、显示/data目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符

的文件或目录

[root@Centos6 /data 07:23:46]#ls -d [^[:alpha:]][[:alpha:]]*

1c.conf  1jps     2j.conf  3ips     4i.conf  5hps     6h.conf  7gps     8g.conf  9fps

1cps     2c.conf  2jps     3j.conf  4ips     5i.conf  6hps     7h.conf  8gps     9g.conf

1d.conf  2cps     3c.conf  3jps     4j.conf  5ips     6i.conf  7hps     8h.conf  9gps

1dps     2d.conf  3cps     4c.conf  4jps     5j.conf  6ips     7i.conf  8hps     9h.conf

1e.conf  2dps     3d.conf  4cps     5c.conf  5jps     6j.conf  7ips     8i.conf  9hps

……省略……

4、显示/etc目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符

的文件或目录

[root@Centos6 /data 07:29:57]#ls -d /etc/rc[0-6]*

/etc/rc0.d  /etc/rc1.d  /etc/rc2.d  /etc/rc3.d  /etc/rc4.d  /etc/rc5.d  /etc/rc6.d

5、显示/etc目录下,所有以.d结尾的文件或目录

[root@Centos6 /data 07:30:04]#ls -d /etc/*.d

/etc/bash_completion.d  /etc/logrotate.d     /etc/rc1.d          /etc/rwtab.d

/etc/chkconfig.d        /etc/lsb-release.d   /etc/rc2.d          /etc/sane.d

/etc/cron.d             /etc/makedev.d       /etc/rc3.d          /etc/setuptool.d

/etc/depmod.d           /etc/modprobe.d      /etc/rc4.d          /etc/statetab.d

/etc/dnsmasq.d          /etc/oddjobd.conf.d  /etc/rc5.d          /etc/sudoers.d

/etc/dracut.conf.d      /etc/pam.d           /etc/rc6.d          /etc/sysctl.d

/etc/ggz.modules.d      /etc/popt.d          /etc/rc.d           /etc/xinetd.d

/etc/init.d             /etc/prelink.conf.d  /etc/reader.conf.d  /etc/yum.repos.d

/etc/latrace.d          /etc/profile.d       /etc/request-key.d

/etc/ld.so.conf.d       /etc/rc0.d           /etc/rsyslog.d

6、显示/data目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

[root@Centos6 /data 07:31:01]#ls -d [mnrp]*.conf

m6.conf  me.conf  mj.conf  nd.conf  ni.conf  pc.conf  ph.conf  r8.conf  rg.conf

m7.conf  mf.conf  n6.conf  ne.conf  nj.conf  pd.conf  pi.conf  rc.conf  rh.conf

m8.conf  mg.conf  n7.conf  nf.conf  p6.conf  pe.conf  pj.conf  rd.conf  ri.conf

mc.conf  mh.conf  n8.conf  ng.conf  p7.conf  pf.conf  r6.conf  re.conf  rj.conf

md.conf  mi.conf  nc.conf  nh.conf  p8.conf  pg.conf  r7.conf  rf.conf

7、只显示/root下的隐藏文件和目录

[root@Centos6 /data 07:33:11]#ls -d /root/.[^.]*

/root/.abrt          /root/.cshrc     /root/.gtk-bookmarks   /root/.pulse

/root/.bash_history  /root/.dbus      /root/.gvfs            /root/.pulse-cookie

/root/.bash_logout   /root/.esd_auth  /root/.ICEauthority    /root/.ssh

/root/.bash_profile  /root/.gconf     /root/.icons           /root/.tcshrc

/root/.bashrc        /root/.gnome2    /root/.imsettings.log  /root/.themes

/root/.cache         /root/.gnote     /root/.local           /root/.thumbnails

/root/.config        /root/.gnupg     /root/.nautilus

8、只显示/etc下的非隐藏目录

[root@Centos6 /data 07:34:28]#ls -d /etc/*/

/etc/abrt/               /etc/ImageMagick/       /etc/purple/

/etc/acpi/               /etc/init/              /etc/rc0.d/

/etc/akonadi/            /etc/init.d/            /etc/rc1.d/

/etc/alsa/               /etc/ipa/               /etc/rc2.d/

/etc/alternatives/       /etc/iproute2/          /etc/rc3.d/

……省略……

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/93732

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

评论列表(2条)

  • wangxcz
    wangxcz 2018-03-29 20:58

    很仔细

  • 伪装的萝莉
    伪装的萝莉 2018-03-30 13:02

    偷偷告诉你。我已经知道你这是为了博客作业才写的

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班