Linux操作系统

目录

文件与路径

1、文件结构

2、基本概念

用户目录

登录信息

相对路径和绝对路径

绝对路径

相对路径

. 和 ..

文件权限

文件属主与属组

3、基本命令信息

ls命令

cd命令

pwd  命令

Linux基本命令一

mkdir 命令

2、touch 命令

rm 命令

rmdir 命令

mv 命令

cp 命令

cat命令

more 命令

less 命令

Linux基本命令二

head 命令

which 命令

whereis命令

locate命令

find命令

-exec

-xargs find

depth

chmod命令

chown命令

tar 命令

date命令

 cal 命令

grep命令

ps命令

kill命令

Linux编辑器vim

1、vi与vim的简介

2、命令模式

 3、输入模式

4、末行模式

5、vim 中批量添加注释 

Linux网络

Linux网络配置文件

查看第一张网卡的网卡信息:

 查看主机名文件:

DNS配置文件

防火墙设置:

Linux的软件安装

1、rpm软件安装包

 rpm查询:

2、yum命令

Linux安装Python

1、下载Python官方源码文件

2、安装Python3.8

Linux安装MySQL

1、下载并安装MySQL官方的 Yum Repository

  2、然后进行rpm的安装

3、启动MySQL



文件与路径

1、文件结构

当我们输入ls / 可以查看更目录下的文件查看根目录下的系统文件

[root@localhost ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
目录 说明 备注
bin 存放普通用户可执行的指令 即使在单用户模式下也能够执行处理
boot 开机引导目录 包括Linux内核文件与开机所需要的文件
dev 设备目录 所有的硬件设备及周边均放置在这个设备目录中
etc 各种配置文件目录 大部分配置属性均存放在这里
lib/lib64 开机时常用的动态链接库 bin及sbin指令也会调用对应的lib库
media 可移除设备挂载目录 类似软盘 U盘 光盘等临时挂放目录
mnt 用户临时挂载其他的文件系统 额外的设备可挂载在这里,相对临时而言
opt 第三方软件安装目录 现在习惯性的放置在/usr/local中
proc 虚拟文件系统 通常是内存中的映射,特别注意在误删除数据文件后,比如DB,只要系统不重启,还是有很大几率能将数据找回来
root 系统管理员主目录 除root之外,其他用户均放置在/home目录下
run 系统运行是所需文件 以前防止在/var/run中,后来拆分成独立的/run目录。重启后重新生成对应的目录数据
sbin 只有root才能运行的管理指令 跟bin类似,但只属于root管理员
srv 服务启动后需要访问的数据目录
sys 跟proc一样虚拟文件系统 记录核心系统硬件信息
tmp 存放临时文件目录 所有用户对该目录均可读写
usr 应用程序放置目录
var 存放系统执行过程经常改变的文件

         

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录 下,具体在/var/log 目录下,另外mail的预设放置也是在这里

2、基本概念

用户目录

位于 /home/user,称之为用户工作目录或家目录,表示方式:

# 在home有一个user  这里就是之前创建的perfect123用户
[root@myLinux001 ~]# cd /home
[root@myLinux001 home]# ls
perfect123

# 使用~回到root目录,使用/是回到根目录下
[root@myLinux001 perfect123]# cd ~
[root@myLinux001 ~]# 

登录信息

[root@myLinux001 /]#

Linux的bash解析器终端用来显示主机名和当前用户的标识;

# root表示bai当前用户叫root(系统管理员账户)
# localhost表示当前使用的主机名叫localhost(没有设置系bai统名字的时候默认名称是localhost)
# / 表示你当前所处的目录位置 (这里的'/'表示你当前在根目录下)

相对路径和绝对路径

绝对路径

从/目录开始描述的路径为绝对路径,如:

[root@myLinux001 ~]# cd /home/perfect
[root@myLinux001 ~]# cd /etc/sysconfig/network-scripts/
[root@myLinux001 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

相对路径

从当前位置开始描述的路径为相对路径,如:

[root@myLinux001 ~]# cd ../../
[root@myLinux001 etc]# cd sysconfig/
[root@myLinux001 sysconfig]# cd ../../etc/
[root@myLinux001 etc]#

. 和 ..

. 表示当前目录

.. 表示上一级目录,即父目录

# 从 / 根目录切换到 home目录
[root@myLinux001 /]# cd home

# 确认路径/home
[root@myLinux001t home]# pwd
/home

# 切换到当前目录cd .  目录无变化
[root@localhost home]# cd .

# 切换到当前目录cd ..  目录回到上一级根目录
[root@myLinux001 home]# cd ..

[root@myLinux001 /]# 

(注意 根目录下的 . 和 .. 都表示当前目录

文件权限

访问用户

通过设定权限可以从以下三种访问方式限制访问权限:

1. 只允许用户自己访问(所有者) 所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。

2.- 允许一个预先指定的用户组中的用户访问(用户组) 用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。

3.- 允许系统中的任何用户访问(其他用户) 用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类

访问权限

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

 读权限(r) 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限
写权限(w) 对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限
可执行权限(x) 对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限

U,G,O 

U=USER

G=GROUP

O=OTHERS

u就是用户权限

g就是文件所属组的权限

而O就是其他人的权限了

一般对文件使用ll 可查看其权限如何,权限主要分为三种:

r:可读,w:可写,x:可执行

比如 一个文件的权限为

-r-xr-x---

这是一个十位的,第一位代表了文件的类型,此处的-说明文件是一个

普通文件,2-4位是U的权限,5-7位是G的权限,8-10位是O的权限。

此处说明用户的权限为可写与可执行,组成员的为可读可执行,其他人

则没有任何权限。

我这边列一个表格,应该能表达的更清晰些:

- - - - - - - - - -
-普通文件d文件夹 r(USER) g(GROUP) O(OTHERS)
文件的类型 用户权限 文件所属组的权限 其他人的权限

 对应的应算:

- - -
4 2 1
可读 可写 可执行

比如645对应的就是

用户权限:可读 可写(4+2)

文件所属组的权限:可读(4)

其他人的权限:可读 可执行(5+1)

用到 ls -l 命令查看当前文件夹下详细信息,具体的命令和参数,后面会深入讲解

我们需要关注的是文件或目录的权限情况

l  rwx  rwx  rwx
d  r-x  r-x  r-x

# 首先第一个字母 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
[ d ] 表示目录
[ l ] 表示为链接文档(link file)
[ - ] 表示为文件
[ b ] 表示为装置文件里面的可供储存的接口设备(可随机存取装置)
[ c ] 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)

# 其次接下来的字符中,以三个为一组,且均为 [ rwx ] 的三个参数的组合
[ r ]代表可读(read)
[ w ]代表可写(write)
[ x ]代表可执行(execute)
[ - ]

# 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

  此时问题来了那么这三组一样是有什么区分尼?
# 这里就涉及到刚才所描述的访问用户权限
# 所有者    所有者表示该文件的所有者
# 用户组    表示当前用户再同一组
# 其他用户  允许系统中的任何用户访问,系统内的其他所有用户就是 other 用户类

# 可以将这个权限进行类比,如我的篮球,
# 所有者表示的是我可以玩 
# 用户组表示,我可以借给我同班同学玩
# 其他用户表示,我可以借给其他班的同学玩

文件属主与属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

[root@myLinux001 /]# ls -l
....
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
dr-xr-x---.   2 root root  196 Nov 11 07:48 root
...

drwx------. 3 perfect perfect 96 Nov  8 20:06 perfect

# 在以上实例中,perfect 文件是一个目录文件,属主和属组都为 perfect,属主有可读、可写、可执行的权限;与属主同组的用户无权限读写执行;其他用户也无权限读写执行

# 对于 root 用户来说,一般情况下,文件的权限对其不起作用。

3、基本命令信息

ls命令

常用组合
[1]查看文件详情:ls -l 或 ll
[2]增强对文件大小易读性,以人类可读的形式显示文件大小: ls -lh
[3]对文件或者目录进行从大到小的排序: ls -lhs
[4]查看当前目录下的所有文件或者目录,包括隐藏文件: ls -la
[5]只查看当前目录下的目录文件: ls -d .
[6]按照时间顺序查看,从上到倒下时间越来越近: ls -ltr
[7]查看文件在对应的inode信息:ls -li

cd命令

作用:变换当前目录到dir。默认目录为home,可以使用绝对路径、或相对路径。

语法:cd [dir](路径)

# 跳到用户目录下
[root@myLinux001 home]# cd /home/perfect
[root@myLinux001 perfect]# 

 

# 回到根目录
[root@myLinux001 perfect]# cd ~
[root@myLinux001 ~]# 



# 跳到上次所在目录
[root@myLinux001 ~]# cd -
/home/perfect
[root@myLinux001 perfect]# 



# 跳到父目录(也可以直接使用 cd ..)
[root@myLinux001 perfect]# cd ./..
[root@myLinux001 home]# 


# 再次跳到上次所在目录
[root@myLinux001 home]# cd -
/home/perfect
[root@myLinux001 perfect]#


# 跳到当前目录的上两层
[root@myLinux001 perfect]# cd ../..
[root@myLinux001 /]# 




# 把上个命令的最后参数作为dir
这里我们先将文件夹cd 到python2.7路径
[root@myLinux001 /]# cd /usr/include/python2.7/
[root@myLinux001 python2.7]#

# 这里使用cd ./..参数作为引子
[root@myLinux001 python2.7]# cd ./..

# 这里我们使用命令,重复最后一个命令参数,直到回到了根目录
[root@myLinux001t include]# cd !$
cd ./..
[root@myLinux001 usr]# cd ./..
[root@myLinux001 /]# 

pwd  命令

作用:可立刻得知目前所在的工作目录的绝对路径名称

语法:pwd [--help][--version]


参数说明:
--help 在线帮助。
--version 显示版本信息。


查看当前所在目录:
[root@myLinux001 /]# cd /home
[root@myLinux001 home]# pwd
/home
[root@myLinux001 home]# 

Linux基本命令一

mkdir 命令

作用:命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录

语法:mkdir [选项] 目录

命令功能:通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限。并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)

命令参数:

选项参数 完整参数 功能描述
-m --mode=模式 设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask
-p --parents 可以是一个路径名称。 此时若路径中的某些目录尚不存在,加上此选项后, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
-v --verbose --help --version --verbose 每次创建新目录都显示信息 --help显示此帮助信息并退出 --version输出版本信息并退出

# 创建目录                        正常使用无参数
[root@myLinux001 text.txt]# mkdir mydir
[root@myLinux001 text.txt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月   7 13:06 mydir

# 切换至mydir目录
[root@myLinux001 text.txt]# cd mydir/

# 参数-p 进行递归创建目录          使用参数 -p
[root@myLinux001 mydir]# mkdir -p text1/text2

# 切换至text2目录
[root@myLinux001 mydir]# cd text1/text2/

[root@myLinux001 text2]# pwd
/root/mydir/text1/text2

总结:# 使用参数 -p 可以创建多层路径文件目录


# 分别创建三个目录,并设置权限                  使用参数 -m
[root@myLinux001 text2]# mkdir -m 777  exercise1
[root@myLinux001 text2]# mkdir -m 765  exercise2
[root@myLinux001 text2]# mkdir -m 654  exercise3

[root@myLinux001 text2]# ll
总用量 0
drwxrwxrwx. 2 root root 6 9月   7 13:22 exercise1
drwxrw-r-x. 2 root root 6 9月   7 13:23 exercise2
drw-r-xr--. 2 root root 6 9月   7 13:23 exercise3

总结:# 使用参数 -m 可以创建文件并设置文件的权限  
注意(777,765,654 其中每一个数字,分别表示User、Group、及Other的权限。r=4,w=2,x=1)


# 创建一个目录,并设置权限                  使用参数 -v   -m
[root@myLinux001 text2]# mkdir -v -m 654  exercise4
mkdir: 已创建目录 "exercise4"

2、touch 命令

touch

作用:用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录。

语法:touch [-acfm] [-d<日期时间>] [-r<参考文件或目录>] [-t<日期时间>] [--help] [--version] [文件或目录…]

命令参数:

参数 参数描述
-a 只更新访问时间,不改变修改时间
-m 改变修改时间记录
-c 不创建不存在的文件
-f 不使用,是为了与其他 unix 系统的相容性而保留。
-m 只更新修改时间,不改变访问时间
-r file 使用文件file的时间更新文件的时间
-t 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分
--no-create 不会建立文件
--help 列出指令格式
--version 列出版本讯息

例子:

(1)使用指令"touch"创建"text1.txt"文件

[root@myLinux001 text2]# cd exercise1
[root@myLinux001 exercise1]# touch text1.txt
[root@myLinux001 exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月   7 13:44 text1.txt
# 当然touch可以一次创建多个文件,例如:touch text1.txt  text2.txt text3.txt ...
[root@myLinux001 exercise1]# touch text2.txt text3.txt
[root@myLinux001 exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月   7 13:44 text1.txt
-rw-r--r--. 1 root root 0 9月   7 13:45 text2.txt
-rw-r--r--. 1 root root 0 9月   7 13:45 text3.txt

(2)使用指令"touch"修改文件"text1.txt"的时间属性为当前系统时间,发现如果文件存在,这里直接是修改时间了

[root@myLinux001 exercise1]# touch text1.txt
[root@myLinux001 exercise1]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月   7 13:46 text1.txt
# 发现时间是已经修改了

(3)强制避免使用touch命令创建新文件 使用参数 -c

有时,如果新文件不存在,则需要避免创建新文件。 在这种情况下,可以使用touch命令使用'-c'选项

[root@myLinux001 exercise1]# ls
text1.txt  text2.txt  text3.txt
[root@myLinux001 exercise1]# touch -c text4.txt
[root@myLinux001 exercise1]# ls
text1.txt  text2.txt  text3.txt

(4)更改文件的访问和修改时间 使用参数 -a

touch命令的另一个用途是更改文件的访问时间和修改时间

[root@myLinux001 exercise1]# stat text3.txt 
  文件:"text3.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16626       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:04:07.539848285 +0800
最近更改:2020-09-07 14:04:07.539848285 +0800
最近改动:2020-09-07 14:04:07.539848285 +0800
创建时间:-

[root@localhost exercise1]# touch -a text3.txt 

[root@localhost exercise1]# stat text3.txt 
  文件:"text3.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16626       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:08:33.788865586 +0800
最近更改:2020-09-07 14:04:07.539848285 +0800
最近改动:2020-09-07 14:08:33.788865586 +0800
创建时间:-

我们看到先是使用stat查看文件详细信息  最近访问和最近更改时间
当我们使用命令使用参数-a 对文件 text3.txt 做了一些操作 touch -a text3.txt 
再查看时间时,发现文件已经修改好了

(5)仅更改此文件的修改时间 使用参数 -m

[root@myLinux001 exercise1]# touch -m text3.txt 
[root@myLinux001 exercise1]# stat text3.txt 
  文件:"text3.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16626       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 14:08:33.788865586 +0800
最近更改:2020-09-07 14:15:59.782894567 +0800
最近改动:2020-09-07 14:15:59.782894567 +0800
创建时间:-

(6)将访问和修改时间从一个文件复制到另一个文件 使用参数 -r

[root@myLinux001 exercise1]# touch text3.txt  -r  text1.txt 

[root@myLinux001 exercise1]# stat text1.txt 
  文件:"text1.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16624       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 13:57:38.308822993 +0800
最近更改:2020-09-07 13:57:38.308822993 +0800
最近改动:2020-09-07 13:57:38.308822993 +0800
创建时间:-

[root@myLinux001 exercise1]# stat text3.txt 
  文件:"text3.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16626       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-07 13:57:38.308822993 +0800
最近更改:2020-09-07 13:57:38.308822993 +0800
最近改动:2020-09-07 14:19:35.732908600 +0800
创建时间:-

# 输出显示text3.txt现在具有与text1.txt相同的访问和修改值

(7)使用指定的时间戳创建新文件 使用参数-t

[root@myLinux001 exercise1]# touch -t 2001011314.52 time.log
#20年1月11号3点14分52秒
[root@myLinux001 exercise1]# stat time.log 
  文件:"time.log"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16627       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-01-01 13:14:52.000000000 +0800
最近更改:2020-01-01 13:14:52.000000000 +0800
最近改动:2020-09-07 14:26:23.916935124 +0800
创建时间:-
# 最近访问与最近更该时间为设定的时间 2020-01-01 13:14:52.000000000

(8)将文件的时间戳更改为其他时间 使用参数 -c

[root@myLinux001 exercise1]# touch -c -t 1801011314.52 time.log

[root@myLinux001 exercise1]# stat time.log 
  文件:"time.log"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:16627       硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2018-01-01 13:14:52.000000000 +0800
最近更改:2018-01-01 13:14:52.000000000 +0800
最近改动:2020-09-07 14:30:45.188952101 +0800
创建时间:-
# 使用参数修改为指定的时间戳

rm 命令

作用:用于删除一个文件或者目录。

语法:rm [选项] 文件…

命令参数:

参数 参数描述
-i 删除前逐一询问确认
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认
-r 将目录及以下之档案亦逐一删除 (递归删除)

 (1)删除文件或者目录前提示  使用参数  -i

[root@myLinux001 exercise1]# ls
text1.txt  text2.txt  time.log

[root@myLinux001 exercise1]# rm -i text2.txt
rm:是否删除普通空文件 "text2.txt"?y
[root@myLinux001 exercise1]# ls
text1.txt  time.log

# 这里提示是否删除,输入 y确认

(2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认 -rf

我们先切换到上一级目录

[root@myLinux001 exercise1]# cd ../

[root@myLinux001 text2]# ls
exercise1  exercise2  exercise3  exercise4
[root@myLinux001 text2]# rm -rf exercise1
[root@myLinux001 text2]# ls
exercise2  exercise3  exercise4
[root@myLinux001 text2]# 

rmdir 命令

作用:用于删除空的目录。从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

语法:rmdir [-p] dirName

命令参数:

参数 参数描述
-p 当子目录被删除后使它也成为空目录的话,则顺便一并删除。

   注意(不能删除非空目录)

 (1)正常删除目录

[root@myLinux001 text2]# ls
exercise2  exercise3  exercise4

[root@myLinux001 text2]# rmdir exercise2
[root@myLinux001 text2]# ls
exercise3  exercise4

[root@myLinux001 text2]# rmdir exercise3
[root@myLinux001 text2]# ls
exercise4

# 这里删除空目录

(2)工作目录下的 text1 目录中,删除名为 text2 的子目录。若 text2 删除后,text1 目录成为空目录,则 text1 亦予删除,类推

[root@myLinux001 ~]# ls -R mydir/
mydir/:
text1

mydir/text1:
text2

mydir/text1/text2:


[root@myLinux001 ~]# rmdir -p mydir/text1/text2/
[root@myLinux001 ~]# ls
anaconda-ks.cfg

mv 命令

作用:用来为文件或目录改名、或将文件或目录移入其它位置。

语法:

mv [options] source dest
mv [options] source... directory

命令参数:

参数 参数描述
-i 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f 在 mv 操作要覆盖某已有的目标文件时不给任何指示

 mv参数设置与运行结果

命令格式 运行结果
mv 文件名 文件名 将源文件名改为目标文件名
mv 文件名 目录名 将文件移动到目标目录
mv 目录名 目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
mv 目录名 文件名 出错

  先给个测试环境

[root@myLinux001 ~]# ls -R mydir/
mydir/:
test1  test2

mydir/test1:
text1.log  text1.txt  text2.log

mydir/test2:

(1)将文件 text1.log 重命名为 text2.txt

[root@myLinux001 test1]# ls
text1.log  text1.txt  text2.log

[root@myLinux001 test1]# mv text1.log text2.txt
[root@myLinux001 test1]# ls
text1.txt  text2.log  text2.txt

(2)将文件 text1.txt text2.log text2.txt 移动到mydir的 test2 目录中

[root@myLinux001 test1]# mv text1.txt  text2.log  text2.txt  ../test2
[root@myLinux001 test1]# ls
[root@myLinux001 test1]# cd ../test2
[root@myLinux001 test2]# ls
text1.txt  text2.log  text2.txt

(3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖 使用参数 -i 询问

[root@myLinux001 test2]# ls
text1.txt  text2.log  text2.txt

[root@myLinux001 test2]# mv -i text2.txt text1.txt 
mv:是否覆盖"text1.txt"? y
[root@localhost test2]# ls
text1.txt  text2.log
[root@myLinux001 test2]#

(4)移动当前文件夹下的所有文件到上一级目录

[root@myLinux001 test2]# mv * ../
[root@myLinux001 test2]# ls ../
test1  test2  text1.txt  text2.log

cp 命令

作用:用于复制文件或目录。

语法:

cp [options] source dest

cp [options] source... directory

命令参数:

参数 参数功能描述
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
-d 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f 覆盖已经存在的目标文件而不给出提示。
-i 与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l 不复制文件,只是生成链接文件。

 # 常用的一些有以下参数
-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样

[root@myLinux001 ~]# ls -R mydir/
mydir/:
test1  test2  text1.txt  text2.log

mydir/test1:

mydir/test2:

# 目录文件环境

(1)复制 text1.txt 到 test1 目录下,保持原文件时间,如果原文件存在提示是否覆盖。使用参数 -ai

[root@myLinux001 ~]# cp -ai mydir/text1.txt  mydir/test1
[root@myLinux001 ~]# ls mydir/test1
text1.txt

(2)为 text2.log 建议一个链接(快捷方式) 使用参数 -s

[root@myLinux001 ~]# cp -s mydir/text2.log  link_text2
[root@myLinux001 ~]# ls
anaconda-ks.cfg  link_text2  mydir

# 注意(只能于当前目录中创建相对的符号链接)

(3)将当前或者指定的目录下的所有文件复制到新目录

[root@myLinux001 ~]# cp -r mydir/  test

[root@myLinux001 ~]# ls -R test
test:
test1  test2  text1.txt  text2.log

test/test1:
text1.txt

test/test2:
test1  test2

test/test2/test1:
text1.txt

test/test2/test2:


[root@myLinux001 ~]# ls -R mydir/
mydir/:
test1  test2  text1.txt  text2.log

mydir/test1:
text1.txt

mydir/test2:
test1  test2

mydir/test2/test1:
text1.txt

mydir/test2/test2:

# 两个文件一模一样的内容

cat命令

作用:用于连接文件并打印到标准输出设备上

语法:cat [-AbeEnstTuv] [--help] [--version] fileName

命令参数:

-n --number 由 1 开始对所有输出的行数编号
-b --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v --show-nonprinting 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外
-E --show-ends 在每行结束处显示 $
-T --show-tabs 将 TAB 字符显示为 ^I
-A --show-all 等价于 -vET
-e 等价于"-vE"选项
-t 等价于"-vT"选项

参考环境,事先编辑好的文本

[root@myLinux001 ~]# vi mydir/text1.txt 

# 编辑文本,使用vi打开文本
# 按i键进入编辑界面
# 输入对应的内容后
# 按ESC退出编辑模式
# 按住shift+;进入命令行界面
# 输入wq回车接口保存退出

(1)显示整个文件内容 使用 cat 正常进查看

[root@myLinux001 ~]# cat mydir/text1.txt

(2)把 text1.txt 的文档内容加上行号后输入 text2.log 这个文档里:

[root@myLinux001 mydir]# cat -n text1.txt > text2.log 
[root@myLinux001 mydir]# cat text2.log 

(3)把 text1.txt 和 text2.txt 的文档内容加上行号(空白行不加)之后将内容附加到 text3.txt 文档里

[root@myLinux001 mydir]# cat -b text1.txt  text2.log >> text3.txt
[root@myLinux001 mydir]# cat text3.txt
     1  # 编辑文本,使用vi打开文本
     2  # 按i键进入编辑界面
     3  # 输入对应的内容后
     4  # 按ESC退出编辑模式
     5  # 按住shift+;进入命令行界面
     6  # 输入wq回车接口保存退出
     7       1  # 编辑文本,使用vi打开文本
     8       2  # 按i键进入编辑界面
     9       3  # 输入对应的内容后
    10       4  # 按ESC退出编辑模式
    11       5  # 按住shift+;进入命令行界面
    12       6  # 输入wq回车接口保存退出

(4)清空 /mydir/text1.txt 文档内容

[root@myLinux001 mydir]# cat /dev/null > text1.txt
[root@myLinux001 mydir]# cat text1.txt
[root@myLinux001 mydir]# ls
test1  test2  text1.txt  text2.log  text3.txt

more 命令

作用:类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h

语法:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

命令参数:

参数 参数功能描述
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] , 如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 需要显示内容的文档,可为复数个数

 常用的操作命令 

按键 按键功能描述
Enter 向下 n 行,需要定义。默认为 1 行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more

 (1)显示文件中从第3行起的内容

[root@myLinux001 mydir]# more +3 text3.txt
    
  

(2)在所列出文件目录详细信息,借助管道使每次显示 5 行

[root@myLinux001 mydir]# ls -l / | more -5
总用量 20	
lrwxrwxrwx.   1 root root    7 8月  31 15:48 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 8月  31 15:58 boot
drwxr-xr-x.  20 root root 3240 9月   5 13:07 dev
drwxr-xr-x.  75 root root 8192 9月   7 10:30 etc
--More--

# 空格会显示下5行
# 回车会显示下1行

less 命令

作用:less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

语法:less [参数] 文件

命令参数:

参数 参数功能描述
-i 忽略搜索时的大小写
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-s 显示连续空行为一行
/字符串: 向下搜索“字符串”的功能
?字符串: 向上搜索“字符串”的功能
n 重复前一个搜索(与 / 或 ? 有关)
N 反向重复前一个搜索(与 / 或 ? 有关)
-x <数字> 将“tab”键显示为规定的数字空格
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown] 向下翻动一页
[pageup] 向上翻动一页

(1)查看文件 

[root@myLinux001 mydir]# less text3.txt 
     1  # 编辑文本,使用vi打开文本
     2  # 按i键进入编辑界面
     ...省略...
     
     
# 进入后查看,Q键退出界面

(2)ps查看进程信息并通过less分页显示

[root@myLinux001 mydir]# ps | less
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 05:06 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 05:06 ?        00:00:00 [kthreadd]
...省略...

(3)查看命令历史使用记录并通过less分页显示

[root@myLinux001 test]# history | less
    1  exit
    2  reboot
    3  shutdowm -r now
    4  poweroff
    5  cd 

...省略...

(4)查看多个文件

[root@myLinux001 mydir]# less text3.txt 

# 此时如果需要查看多个文件可以使用 可以输入shift+;进入命令行模式
# 使用 p 和 n 进行上下页面翻页查看

附加备注 


1.全屏导航

ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
2.单行导航

j - 向前移动一行
k - 向后移动一行
3.其它导航

G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令

v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航

当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:

ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处
Linux 命令大全 Linux 命令大全

Linux基本命令二

head 命令

作用:用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容

语法:head [参数] [文件]

命令参数:

参数 参数描述
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数
-n<行数> 显示的行数

(1)显示 1.log 文件中前 20 行

[root@myLinux001 ~]# head 1.log -n 20

(2)显示 1.log 文件前 20 字节

[root@myLinux001 ~]# head -c 20 1.log

(3)显示 t.log最后 10 行

[root@myLinux001 ~]# tail -n -10 t.log

which 命令

在 linux 要查找某个命令或者文件,但不知道放在哪里了,可以使用下面的一些命令来搜索

which     查看可执行文件的位置。
whereis   查看文件的位置。
locate    配合数据库查看文件位置。
find      实际搜寻硬盘查询文件名称。

作用:用于查找文件(which指令会在环境变量$PATH设置的目录里查找符合条件的文件。)

语法:which [文件...]

命令参数:

参数 参数描述
-n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径
-w 指定输出时栏位的宽度
-V 显示版本信息

 (1)查看 ls 命令是否存在,执行哪个

[root@myLinux001 ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

(2)查看 which

[root@myLinux001 ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
        /usr/bin/alias
        /usr/bin/which

(3)查看cd

[root@myLinux001 ~]# which cd
/usr/bin/cd

(注意:显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)

(4)查看当前 PATH 配置

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

whereis命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,
而find则是遍历硬盘查找文件

作用:用于查找文件

语法:whereis [-bfmsu][-B <目录>...]-M <目录>...][-S <目录>...][文件...]

命令参数:

参数 参数描述
-b 定位可执行文件
-B<目录> 只在设置的目录下查找可执行文件
-f 不显示文件名前的路径名称
-m 定位帮助文件
-M<目录> 只在设置的目录下查找说帮助文件
-s 定位源代码文件
-S<目录> 只在设置的目录下查找源代码文件
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件

(1)查找 locate 程序相关文件

[root@myLinux001 ~]# whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

(2)查找 locate 的源码文件

[root@myLinux001 ~]# whereis -s locate

(3)查找 lcoate 的帮助文件

[root@myLinux001 ~]# whereis -m locate

locate命令

需要注意这个命令在我们的最小mini系统里面是没有安装的

[root@myLinux001 ~]# yum install mlocate
...省略...
[root@myLinux001 ~]# updatedb
###updatedb更新的意思

作用:用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录

语法:locate [-d ][--help][--version][范本样式...]

命令参数:

参数 参数描述
-b 仅匹配路径名的基本名称
-c 只输出找到的数量
-d 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e 仅打印当前现有文件的条目
-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。 这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料
-0 在输出上带有NUL的单独条目
-S 不搜索条目,打印有关每个数据库的统计信息
-q 安静模式,不会显示任何错误讯息
-P 检查文件存在时不要遵循尾随的符号链接
-l 将输出(或计数)限制为LIMIT个条目
-n 至多显示 n个输出
-m 被忽略,为了向后兼容
-r REGEXP -- 使用基本正则表达式
--regex 使用扩展正则表达式
-o 指定资料库存的名称
-h 显示帮助
-i 忽略大小写
-V 显示版本信息

 常用参数: 

参数 参数描述
-l num(要显示的行数)
-f 将特定的档案系统排除在外,如将proc排除在外
-r 使用正则运算式做为寻找条件

 (1)查找和 pwd 相关的所有文件(文件名中包含 pwd)

[root@myLinux001 ~]# locate pwd
/etc/.pwd.lock
/usr/bin/pwd
...省略...

(2)搜索 etc 目录下所有以 sh 开头的文件

[root@myLinux001 ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells

(3)查找 /etc 目录下,以 sh 结尾的文件

[root@myLinux001 ~]# locate -r '^/etc.*sh$'
/etc/ssh
...省略..

find命令

作用:用于在文件树中查找文件,并作出相应的处理

语法:

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

命令参数:

参数 参数描述
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
-print find命令将匹配的文件输出到标准输出
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行

   命令选项:

选项 选项描述
-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group 按照文件所属的组来查找文件
-type 查找某一类型的文件,诸如: b - 块设备文件 d - 目录 c - 字符设备文件 l - 符号链接文件 p - 管道文件 f - 普通文件
-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
-maxdepth n 最大查找目录深度
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心, 因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

 例子:

(1)查找48小时内修改过的文件

[root@myLinux001 ~]# find -atime -2
.
./.bash_profile
...省略..

(2)在当前目录查找 以 .log 结尾的文件。 . 代表当前目录

[root@myLinux001 ~]#  find ./ -name '*.log'
./mydir/text2.log
./test.log

(3)查找 /opt 目录下 权限为 777 的文件

[root@myLinux001 ~]# find /opt -perm 777

(4)查找大于 1K 的文件

[root@myLinux001 ~]#  find -size +1000c
./anaconda-ks.cfg
./.bash_history
./.viminfo

(5)查找等于 1000 字符的文件

[root@myLinux001 ~]# find -size 1000c

-exec

注意:-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名

(6)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

[root@myLinux001 ~]# find . -type f -mtime +10 -exec rm -f {} \;

(7)当前目录中查找所有文件名以.log结尾、更改时间在0日以上的文件,并删除它们

只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

[root@myLinux001 ~]# find . -name '*.log' -mtime +0 -ok -exec rm {} \;
< -exec ... ./mydir/text2.log > ? n

(8)用 exec 选项执行 cp 命令

[root@myLinux001 ~]# find . -name '*.log' -exec cp {} test3 \;

-xargs find

-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

(9)查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型

[root@myLinux001 ~]# find . -type f -print | xargs file

(10)查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件

[root@myLinux001 ~]# find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
[root@myLinux001 ~]# find -type f -name '*.js' | xargs grep -lF 'editor'

(11)利用 xargs 执行 mv 命令

[root@myLinux001 ~]# find . -name "*.log" | xargs -i mv {} test4

(12)用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行:

[root@myLinux001 ~]# find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'

(13)查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:

[root@myLinux001 ~]# find . -name '[a-z]*[4-9].log' -print

(14)在 test 目录查找不在 test4 子目录查找

[root@myLinux001 ~]# find test -path 'test/test4' -prune -o -print

(15)实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件

[root@myLinux001 ~]# find -newer log2012.log ! -newer log2017.log

depth

depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

实例:find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找

[root@myLinux001 ~]# find / -name "CON.FILE" -depth -print

chmod命令

语法:

chmod [-cfvR] [--help] [--version] mode file...

常用参数:

参数 参数描述
-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件

权限代号:

代号 代号权限
r 读权限,用数字4表示
w 写权限,用数字2表示
x 执行权限,用数字1表示
- 删除权限,用数字0表示
s 特殊权限

增加文件 test.log 所有用户可执行权限
[root@myLinux001 ~]# chmod u=rwx test.log
[root@myLinux001 ~]# ls -n test.log
-rwxr-xr-x. 1 0 0 36 9月   8 18:36 test.log

撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息
[root@myLinux001 ~]# chmod u=r test.log -c
mode of "test.log" changed from 0755 (rwxr-xr-x) to 0455 (r--r-xr-x)
[root@myLinux001 ~]# ls -n test.log
-r--r-xr-x. 1 0 0 36 9月   8 18:36 test.log

#主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
[root@myLinux001 ~]# chmod 751 test.log -c
或者
[root@localhost ~]# chmod u=rwx,g=rx,o=x t.log -c

#将mydir 目录及其子目录所有文件添加可读权限
[root@localhost ~]# chmod u+r,g+r,o+r -R text/ -c

chown命令

chown 将指定文件的拥有者改为指定的用户或组,
用户可以是用户名或者用户 ID;
组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符

注意:一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限

语法:

chown [-cfhvR] [--help] [--version] user[:group] file...

常用参数:

参数 参数描述
user 新的文件拥有者的使用者 ID
group 新的文件拥有者的使用者组(group)
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-v 显示详细的处理信息
-R 处理指定目录以及其子目录下的所有文件
--help 显示辅助说明
--version 显示版本

(1)改变拥有者和群组 并显示改变信息

 

[root@myLinux001 ~]# chown -c mail:mail test.log
changed ownership of "test.log" from root:root to mail:mail

-r--r-xr-x. 1 mail mail       36 9月   8 18:36 test.log

(2)改变文件群

[root@myLinux001 ~]# chown -c :mail test.sh 
changed ownership of "test.sh" from root:root to :mail

(3)改变文件夹及子文件目录属主及属组为 mail

[root@myLinux001 ~]# chown -cR mail: mydir
changed ownership of "mydir/test1/text1.txt" from root:root to mail:mail
changed ownership of "mydir/test1" from root:root to mail:mail
...省略...

tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

作用:用于备份文件(tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件)

语法:

tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F ][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]

命令参数:

参数 参数描述
-c 建立新的压缩文件
-f 定压缩文件
-r 添加文件到已经压缩文件包中
-u 添加改了和现有的文件到压缩包中
-x 从压缩包中抽取文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-Z 支持compress解压文件
-v 显示操作过程

有关 gzip 及 bzip2 压缩:

gzip 实例:压缩 gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz
          对应:tar zcvf filename.tar.gz     tar zxvf filename.tar.gz


bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
       对应:tar jcvf filename.tar.gz         解压:tar jxvf filename.tar.bz2

(1)将test.log test.sh全部打包成 tar 包

[root@myLinux001 ~]# tar -cvf log.tar test.log  test.sh
test.log
test.sh

(2)将 /etc 下的所有文件及目录打包到指定目录或当前目录,并使用 gz 压缩

[root@myLinux001 ~]# tar -zcvf ./etc.tar.gz /etc

(3)查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)

[root@myLinux001 ~]# tar -ztvf ./etc.tar.gz
...省略...

(4)要压缩打包 /home, /etc ,但不要 /home/mashibing ,只能针对文件,不能针对目录

[root@myLinux001 ~]# tar --exclude /home/mshibing -zcvf myfile.tar.gz /home/* /etc

date命令

作用:用来显示或设定系统的日期与时间

语法:

date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

时间参数

参数 描述参数
% 印出 %
%n 下一行
%t 跳格
%H 小时(00..23)
%I 小时(01..12)
%k 小时(0..23)
%l 小时(1..12)
%M 分钟(00..59)
%p 显示本地 AM 或 PM
%r 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S 秒(00..61)
%T 直接显示时间 (24 小时制)
%X 相当于 %H:%M:%S
%Z 显示时区

 日期参数

参数 描述参数
%a 星期几 (Sun..Sat)
%A 星期几 (Sunday..Saturday)
%b 月份 (Jan..Dec)
%B 月份 (January..December)
%c 直接显示日期与时间
%d 日 (01..31)
%D 直接显示日期 (mm/dd/yy)
%h 同 %b
%j 一年中的第几天 (001..366)
%m 月份 (01..12)
%U 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w 一周中的第几天 (0..6)
%W 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x 直接显示日期 (mm/dd/yy)
%y 年份的最后两位数字 (00.99)
%Y 完整年份 (0000..9999)

 

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

使用权限:所有使用者。

当您不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。

当您以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

语法:

date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

常见参数

-d 显示 datestr 中所设定的时间 (非系统时间)
--help 显示辅助讯息
-s 将系统时间设为 datestr 中所设定的时间
-u 显示目前的格林威治时间
--version 显示版本编号

 cal 命令

作用:用户显示公历(阳历)日历

语法:cal [选项] [[[日] 月] 年]

参数 参数描述
-1 只显示当前月份(默认)
-3 显示上个月、当月和下个月
-s 周日作为一周第一天
-m 周一用为一周第一天
-j 输出儒略日
-y 输出整年
-V 显示版本信息并退出
-h 显示此帮助并退出

(1)显示指定年月日期

[root@myLinux001 ~]# cal 9 1999
   September 1999   
Su Mo Tu We Th Fr Sa
          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

(2)显示2022年每个月日历

[root@myLinux001 ~]# cal 2022
                               2022                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28                  27 28 29 30 31
30 31
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2    1  2  3  4  5  6  7             1  2  3  4
 3  4  5  6  7  8  9    8  9 10 11 12 13 14    5  6  7  8  9 10 11
10 11 12 13 14 15 16   15 16 17 18 19 20 21   12 13 14 15 16 17 18
17 18 19 20 21 22 23   22 23 24 25 26 27 28   19 20 21 22 23 24 25
24 25 26 27 28 29 30   29 30 31               26 27 28 29 30

        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6                1  2  3
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    4  5  6  7  8  9 10
10 11 12 13 14 15 16   14 15 16 17 18 19 20   11 12 13 14 15 16 17
17 18 19 20 21 22 23   21 22 23 24 25 26 27   18 19 20 21 22 23 24
24 25 26 27 28 29 30   28 29 30 31            25 26 27 28 29 30
31
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5                1  2  3
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    4  5  6  7  8  9 10
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   11 12 13 14 15 16 17
16 17 18 19 20 21 22   20 21 22 23 24 25 26   18 19 20 21 22 23 24
23 24 25 26 27 28 29   27 28 29 30            25 26 27 28 29 30 31
30 31

(3)将星期一做为第一列,显示前中后三月

[root@myLinux001 ~]# cal -3m
    October 2022          November 2022         December 2022   
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                1  2      1  2  3  4  5  6            1  2  3  4
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   5  6  7  8  9 10 11
10 11 12 13 14 15 16  14 15 16 17 18 19 20  12 13 14 15 16 17 18
17 18 19 20 21 22 23  21 22 23 24 25 26 27  19 20 21 22 23 24 25
24 25 26 27 28 29 30  28 29 30              26 27 28 29 30 31   
31                                                              

grep命令

grep

强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容

作用:用于查找文件里符合条件的字符串

 注意:如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 **-**,则 grep 指令会从标准输入设备读取数据

语法:

grep [option] pattern file|dir

常用参数:

参数 参数描述
-A n 显示匹配字符后n行
-B n 显示匹配字符前n行
-C n 显示匹配字符前后n行
-c 计算符合样式的列数
-i 忽略大小写
-l 只列出文件内容符合指定的样式的文件名称
-f 从文件中读取关键词
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹

 grep 的规则表达式

^               #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 
$               #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 
.               #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。  
*               #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*              #一起用代表任意字符。  
[]              #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
[^]             #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。  
\(..\)          #标记匹配字符,如'\(love\)',love被标记为1。   
\<              #锚定单词的开始,如:'\              #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}          #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
x\{m,\}         #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。  
x\{m,n\}        #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。  
\w              #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。  
\W              #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。  
\b              #单词锁定符,如: '\bgrep\b'只匹配grep。

(1)查找指定进程

[root@myLinux001 ~]# ps -ef | grep svn
root       2032   2002  0 17:36 pts/0    00:00:00 grep --color=auto svn

(2)查找指定进程个数

[root@myLinux001 ~]#  ps -ef | grep svn -c
1

(3)从文件中读取关键词

[root@myLinux001 ~]# cat test.log | grep -f test.log

(4)从文件夹中递归查找以.sh结尾的行,并只列出文件(有问题)

[root@myLinux001 ~]# grep -lR '.sh$'

(5)查找非x开关的行内容

[root@myLinux001 ~]# grep '^[^x]' test.log

 (6)显示包含 ed 或者 at 字符的内容行

[root@myLinux001 ~]# grep -E 'ed|at' test.log

ps命令

作用:用于显示当前进程 (process) 的状态

语法:

ps [options] [--help]

linux上进程有5种状态:

1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps 工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

命令参数

参数 参数描述
-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程

(1)显示当前所有进程环境变量及进程间关系 

[root@myLinux001 ~]# ps -ef

(2)显示当前所有进程

[root@myLinux001 ~]# ps -A

(3)与grep联用查找某进程

[root@myLinux001 ~]# ps -aux | grep apache
root      20112  0.0  0.0 112824   980 pts/0    S+   15:30   0:00 grep --color=auto apache

(4)找出与 cron 与 syslog 这两个服务有关的 PID 号码

[root@myLinux001 ~]# ps aux | grep '(cron|syslog)'
root      20454  0.0  0.0 112824   984 pts/0    S+   15:30   0:00 grep --color=auto (cron|syslog)

kill命令

kill 命令用于删除执行中的程序或工作

kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看

语法:

kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

常用参数:

参数 参数描述
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户

 (1)先使用ps查找进程pro1,然后用kill杀掉

[root@localhost ~]# kill -9 $(ps -ef | grep pro1)

Linux编辑器vim

1、vi与vim的简介

在Linux下,绝大部分的配置文件都是以ASCII码的纯文本形式存在的,可以利用一些简单的编辑软件修改配置。 ​ 在Linux命令行界面下的文本编辑器有很多,比如nano,Emacs,vim等。但是所有的UNIX Like系统都会内置vi文本编辑器,而其他的文本编辑器则不一定存在。很多软件的编辑接口都会主动调用vi,而且它的编辑速度相当快。因为有太多的Linux命令都默认使用vi座位数据编辑的接口,所以我们必须学会vi,否则很多的命令无法操作。 ​ vim可以视为vi的高级版本,vim可以用颜色或者底线等方式显示一些特殊的信息。vim可以根据文件的扩展名或者是文件内的开头信息判断该文件的内容而自动调用该程序的语法判断式。 ​ 概括的说:vi是文字处理器,而vim是它的升级版本,是一个程序开发工具。vim加入了许多额外的功能,例如支持正则表达式的查找架构,多文件编辑器,块复制等。

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

既然是程序开发工具,那么就可以安装这个环境

[root@localhost ~]# yum install vim
已加载插件:fastestmirror
...省略...
中间提示是否继续或者OK选择 y 即可

基本上 vi/vim 共分为三种模式

分别是命令模式(Command mode)输入模式(Insert mode)末行命令模式(Last line mode)

一般使用VI操作直接进入的模式,即默认模式。在此模式下可以进行的操作:移动光标、复制、粘贴、删除操作。

Linux操作系统_第1张图片

 

2、命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

i           切换到输入模式,以输入字符。
x           删除当前光标所在处的字符。
shift + :   切换到末行命令模式,以在最底一行输入命令。

任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

(注意:若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。)

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!

 3、输入模式

在命令模式下按下i就进入了输入模式。

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc] 退出编辑模式,回到一般模式中(常用)

4、末行模式

末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如:

:sp newfile

则分出一个窗口编辑newfile文件。如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
ZQ 不保存,强制退出。效果等同于 :q!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g:%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)

5、vim 中批量添加注释 

批量注释。

使用下面命令在指定的行首添加注释。

使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。

取消注释:

使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。

(1)在 10 - 20 行添加 // 注释

:10,20s#^#//#g

(2)在 10 - 20 行删除 // 注释

:10,20s#^//##g

(3)在 10 - 20 行添加 # 注释

:10,20s/^/#/g

(4)在 10 - 20 行删除 # 注释

:10,20s/#//g

Linux网络

Linux网络配置文件

查看第一张网卡的网卡信息:

[root@myLinux001 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=e8a32377-2fec-4c5e-8957-826efda94fc1
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.152.9
NETMASK=255.255.255.0
GATEWAY=192.168.152.2
DNS1=8.8.8.8
DNS2=114.114.114.114
配置 说明
DEVICE=eth0 网卡设备名,eth0表示第一张网卡
BOOTPROTO=none 是否自动获取IP(none、static、dhcp),当值为dhcp时,只需配置上述例子中的那几项就可以联网
HWADDR=00:0C:29:11:30:39 MAC地址
NM_CONTROLLED=yes 是否可以由Network Manager图形管理工具托管
ONBOOT=yes 是否随网络服务启动当前网卡生效(在CentOS 6 以上的版本中ONBOOT是默认关闭的。)
TYPE=Ethernet 网络类型,这里为以太网
UUID=5ab36190-a5df-4bf1-94d8-6c126afd05f1 唯一识别码
IPADDR=192.168.0.200 IP地址
NETMASK=255.255.255.0 子网掩码
GATEWAY=192.168.0.1 网关
DNS1=202.106.0.20 DNS
IPV6INIT=no IPv6是否启用,这里设置为不启用
USERCTL=no 是否允许非root用户控制此网卡,这里为不允许

说明: 1.自动获取IP的条件是:必须在局域网内存在DHCP服务器。 2.相同UUID网络配置的计算机会导致互相不能上网。

主机名文件

 查看主机名文件:

[root@myLinux001 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.152.9 myLinux001

DNS配置文件

查看DNS配置文件:

[root@myLinux001 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 114.114.114.114

nameserver这一项,设置的是域名服务器的地址,多个域名服务器,则在后续添加空格继续补充域名服务器的地址,或者另起一行做类似的nameserver配置

防火墙设置:

查看防火墙状态: systemctl status firewalld.service

绿的running表示防火墙开启

执行关闭命令: systemctl stop firewalld.service

再次执行查看防火墙命令:systemctl status firewalld.service

执行开机禁用防火墙自启命令  : systemctl disable firewalld.service

执行开启防火墙命令:systemctl start firewalld.service

Linux的软件安装

1、rpm软件安装包

RPM(RedHat Package Manager)安装管理

这个机制最早是由Red Hat开发出来,后来实在很好用,因此很多 distributions(发行版)就使用这个机制来作为软件安装的管理方式 。包括Fedora,CentOS,SuSE等等知名的开发商。

RPM的优点

  1. RPM内含已经编译过的程序与配置文件等数据,可以让用户免除重 新编译的困扰

  2. RPM在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可 避免文件被错误安装

  3. RPM文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件

  4. RPM管理的方式使用数据库记录 RPM 文件的相关参数,便于升级 、移除、查询与验证

RPM的缺点:

1、rpm在安装的时候不能指定安装路径。安装路径是在制作RPM包的时候已经指定了。

2、rpm软件包一般都存在依赖问题没有解决。

https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/

https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/gcc-4.8.5-39.el7.x86_64.rpm

rpm安装

rpm -ivh package_name

选项与参数:

-i :install的意思

-v :察看更细部的安装信息画面

-h :以安装信息列显示安装进度

Ø 安装单个rpm包

rpm -ivh package_name

Ø 安装多个rpm包

rpm -ivh a.i386.rpm b.i386.rpm *.rpm

Ø 安装网上某个位置rpm包

rpm -ivh http://website.name/path/pkgname.rpm

 rpm查询:

简单原理:rpm在查询的时候,其实查询的地方是在/var/lib/rpm/ 这个目录下的数据库文件

rpm查询已安装软件,选项与参数:

-q :仅查询,后面接的软件名称是否有安装

-qa :列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!

-qi :列出该软件的详细信息,包含开发商、版本和说明等 !!

-ql :列出该软件所有的文件与目录所在完整文件名 !!

-qc :列出该软件的所有配置文件 !

-qd :列出该软件的所有说明文件

-qR :列出和该软件有关的相依软件所含的文件

-qf :由后面接的文件名,找出该文件属于哪一个已安装的软件

2、yum命令

yum是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器

基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记

语法

yum [options] [command] [package ...]

常用参数

参数 参数描述
options 可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等
command 要进行的操作
package 操作的对象

  常用命令:

1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install 
4.仅更新指定的软件命令:yum update 
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove 
7.查找软件包 命令:yum search 
8.清除缓存命令:
     yum clean packages: 清除缓存目录下的软件包
     yum clean headers: 清除缓存目录下的 headers
     yum clean oldheaders: 清除缓存目录下旧的 headers
     yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

Linux安装Python

1、下载Python官方源码文件

上传到Linux中

2、安装Python3.8

(1)安装依赖包

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel -y

(2)解压安装

安装到目录:/usr/local/python-3.8

# 解压压缩包
tar -zxvf Python-3.8.1.tgz  

# 进入文件夹
cd Python-3.8.1

# 配置安装位置
./configure prefix=/usr/local/python-3.8

# 安装
make && make install

(3)查看

如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python-3.8目录
ls /usr/local/python-3.8

(4)添加软连接

#添加python3的软链接 
ln -s /usr/local/python-3.8/bin/python3.8 /usr/bin/python3 

#添加 pip3 的软链接 
ln -s /usr/local/python-3.8/bin/pip3.8 /usr/bin/pip3

(5)好了,我们来测试一下python3

[root@myLinux001 ~]# python3
Python 3.8.6 (default, Nov  9 2022, 02:20:58) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Linux安装MySQL

1、下载并安装MySQL官方的 Yum Repository

安装软件一般第一步使用yum安装软件,我们先查找一下mysql存不存在

[root@myLinux001 ~]# yum search mysql-community-server
[root@myLinux001 ~]# yum search mysql-server

我们通过上面的查找并没有找到mysql服务

akonadi-mysql.x86_64 : Akonadi MySQL backend support 这个不是数据库服务的安装包

由于CentOS 的yum源中没有mysql,需要到mysql的官网下载

官网地址:MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/

  2、然后进行rpm的安装

(1)使用xftp上传四个mysql的压缩包

(2)安装

直接安装服务报错显示没有安装client和common依赖包

安装client依赖包,显示需要安装libs依赖包

安装libs依赖包,显示mariadb-libs 被libs依赖包替代,需要卸载mariadb-libs 软件包

rpm -e mariadb-libs --nodeps 卸载一个软件包,因为库空间被占用,在卸载的时候发现这个包可能被其他的软件使用,导致卸载不了,我们可以使用--nodeps,表示强制卸载

由于lib依赖common,我们先安装common,安装顺序如下,server安装依赖于net-tools,进行第3步

结束之后再安装server

使用yum命令安装依赖:net-tools

[root@myLinux001 ~]# yum install net-tools

总的安装流程是:

[root@myLinux001 software]# rpm -e mariadb-libs --nodeps
[root@myLinux001 software]# yum install net-tools
[root@myLinux001 software]# rpm -ivh mysql-community-common-8.0.21-1.el7.x86_64.rpm
[root@myLinux001 software]# rpm -ivh mysql-community-libs-8.0.21-1.el7.x86_64.rpm
[root@myLinux001 software]# rpm -ivh mysql-community-client-8.0.21-1.el7.x86_64.rpm
[root@myLinux001 software]# rpm -ivh mysql-community-server-8.0.21-1.el7.x86_64.rpm

#如果安装不了server报错
[root@myLinux001 software]# rpm -ivh mysql-community-server-8.0.21-1.el7.x86_64.rpm
warning: mysql-community-server-8.0.21-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
 /usr/bin/perl is needed by mysql-community-server-8.0.21-1.el7.x86_64
 perl(Getopt::Long) is needed by mysql-community-server-8.0.21-1.el7.x86_64
 perl(strict) is needed by mysql-community-server-8.0.21-1.el7.x86_64
#再安装依赖包
yum install -y per1-Module-Install.noarchyum 
install -y perl
#再去安装server

3、启动MySQL

(1)MySQL初始化

[root@myLinux001 software]# mysqld --initialize

由于路径/var/lib/mysql的用户是mysql,但是/var/lib/mysql中的文件用户root,我们使用mysql的过程中使用的使用户一直是mysql,所以我们需要把/var/lib/mysql中的所有文件和目录用户更改为mysql所以需要更改用户

(2)更改用户

[root@myLinux001 software]# cd /var/lib/mysql 
[root@localhost mysql]# chown mysql:mysql mysql -R

(3)启动服务

[root@myLinux001 ~]# systemctl start mysqld.service  # 注意这里的mysqld是服务名,一般默认是mysqld
[root@myLinux001 ~]# systemctl status mysqld.service  # 查看服务状态

(4)获取安装时的临时密码(在第一次登录时就是用这个密码)

[root@myLinux001 ~]# grep 'temporary password' /var/log/mysqld.log
2020-09-09T09:55:29.051013Z 1 [Note] A temporary password is generated for root@localhost: E?/=tU

(5)登录mysql

[root@myLinux001 ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.31

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 


# 注意密码这里没有回显

(6)登录后修改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

(7)验证密码

mysql> exit
Bye

[root@myLinux001 ~]# mysql -u root -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql -u root -p123456
#p后面直接接着密码 就直接进去了

你可能感兴趣的:(linux)