ps -ef用于查看全格式的全部进程,其中“ps”是在Linux中是查看进程的命令,“-e ”参数代表显示所有进程,“-f”参数代表全格式。

禁用防火墙
systemctl disable firewalld centos7以后版本
chkconfig iptables off centos6以前版本

禁用selinux
vim /etc/selinux/config
SELINUX=disabled

>表示这个文件如果不存在则创建该文件,如果该文件存在则清空该文件。

Centos7上修改网卡名称由原来ens33改成eth0
sed -ri '/^[[:space:]]+linux16/s#.*#& net.ifnames=0#' /boot/grub2/grub.cfg

1.目录操作

(1)绝对路径与相对路径

绝对路径:路径的写法一定由根目录”/”写起,比如:/usr/local/lib
相对路径:路径的写法不是由根目录”/”写起,比如:local/lib。这时,这个目录相当于是将当前目录作为“根目录”,如果当前目录变化了,那么这个相对路径就要需要修改。

(2)打印当前目录:pwd

root 用户

一个特殊的管理帐户
也被称为超级用户
root已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要,不要登录为 root

root用户id为零

普通( 非特权 )用户

CentOS7的r普通用户id从1000开始起步

CentOS6普通用户id从500开始起步

权限有限
造成损害的能力比较有限

判断一个用户是否是管理员用户,如果该用户id为0就是root用户,如果该用户id为非零就是普通用户。

管理员用户已#开头,普通用户以$开头。

命令格式:pwd

返回当前目录的绝对路径

(3)切换目录:cd

(4)创建目录:mkdir

命令格式:mkdir 新目录(既可以是绝对路径,也可以是相对路径)

-p参数

mkdir -p 新目录

-p的作用是,不使用-p参数时,如果要创建的目录所在的上层目录不存在时,就会报错;而使用了-p参数后,就会直接一次性连上层目录都创建了。如下:创建tmp3中的tmp4,其中tmp3之前是不存在的。未使用-p时,提示了tmp3不存在;使用-p时,不提示错了,tmp3、tmp4都会一次性创建。

(5)查看目录内容:ls

命令格式:ls 目录

直接使用ls命令,查看当前目录下的内容

使用ls命令+路径,查看指定目录下的内容。

常用参数搭配:

ls -a 列出目录所有文件,包含以.开始的隐藏文件

ls -A 列出除.及..的其它文件

ls -r 反序排列

ls -t 以文件修改时间排序

ls -S 以文件大小排序

ls -h 以易读大小显示

ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

不同的颜色,表示的含义不一样:
白色:普通文件
蓝色:目录
绿色:可执行文件
红色:压缩文件
浅蓝色:链接文件
黄色:设备文件
灰色:其他文件

(6)复制目录:cp -r

cp命令既可用于拷贝文件,又可用于拷贝目录,但是拷贝目录时必须使用-r参数

命令格式:cp -r 原目录 目标目录

    

       常用参数:

-a 归档,相当于-dR --preserv=all

-b 目标存在,覆盖前先备份,形式为 filename~

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

-r 复制目录及目录内所有项目

-i 覆盖前提示
        -n 不覆盖,注意两者顺序
         r, -R 递归复制目录及内部的所有内容

--backup=numbered 目标存在,覆盖前先备份加数字后缀

将tmp3目录下所有文件复制成ttmp4

(7)移动目录:mv

命令格式: mv 源目录 目标目录

常用参数:

-i 覆盖前提示
-f 强制
-b 目标存在,覆盖前先备份

mv命令移动文件或修改文件名

将tmp3目录下的fstab文件移动tmp7目录下,并给新的文件起名为fstab1(备注:文件移动后,tmp3目录下fstab文件将不存在)

mv f7 f8(修改f7文件名称,改为f8)

(8)

(8)删除目录:rm

命令格式: rm 目录名

删除tmp8目录

常用参数:

-i   删除前提示

-f   强制删除

-r   递归

(9)cat命令:

命令格式:cat 文件名

cat主要有三大功能:

1.一次显示整个文件:cat filename

2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:cat file1 file2 > file

常用参数:

-E:显示行结束符$

-n:对显示出的每一行编号

-A:显示所有控制符

-b:非空行编号

-s:压缩连续的空行成一行

查看更多文件内容:more、less

当文件内容太多,一屏不能显示完,如果用cat就只能显示最后面的部分,这时候就需要用more或者less了。
more看完一屏后,就可以通过空格(打印下一屏)、或者回车键(打印下一行),可以随时通过q结束浏览模式

(10)head命令    head 用来显示文件开头至标准输出中,默认head命令打印其相应文件的开头10行。

常用参数 -n  显示行数

命令格式:head -n 文件名

默认打印前十行

head -2 /etc/passwd   显示/etc/passwd文件下前2行

(11)tail命令    打印/etc/profile文件结尾后10行

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

用户user

令牌token,identity
Linux用户:Username/UID
管理员:root, 0
普通用户:1-60000 自动分配
系统用户:1-499, 1-999 (CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)
交互式登录

组group

Linux组:Groupname/GID
管理员组:root, 0
普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)

组的类别

Linux组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组

生成随机口令

密码的复杂性策略

足够长
使用数字、大写字母、小写字母及特殊字符中至少3种
使用随机密码
定期更换,不要使用最近曾经使用过的密码

用户和组的配置文件

Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性

(12)chown   更改所属主:

命令格式:chown 用户名 文件名

把原来的root用户改成张三用户

(13)chgrp  更改所属组:

把原来root组改成张三组

(14)更改用户操作权限:chmod

命令格式:chmod 权限值 文件名

为方便权限的修改,将权限用数字表示,r:4,w:2,x:1,-:0,三个权限组的值拼接在一起,比如:上面的rw-r--r--,第一个权限组:rw-等于4+2+0=6,第二个权限组:r--等于4+0+0=4,第三个权限组:r--等于4+0+0=4,所以其权限值为644。
同样,使用-R参数,实现级联更改


在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644。
-rwxrwx---用数字表示就是770,下面我们通过chmod命令将5.txt文件进行权限修改。

模式修改文件权限方式

将fstab文件3中身份对应的3中权限,修改为u=rw,g=rw,o=rw

数字修改文件权限方式:

目录:

读权限:可以列出文件名

执行权限:可以进入目录,可以访问目录的文件的内容

写权限:创建和删除文件

删除一个文本和文件本身没有关系,和该文件的父目录有关。

一个文件或目录最大权限为666或777

文件默认权限:644           目录默认权限:755     usmak:0022

文件默认权限

666-umask,如果结果有奇数,就加1,偶数不变

目录默认权限

777-umask

Linux系统中三种特殊权限

特殊权限
suid: 作用于可执行的二进制的程序,权限数字4(单独计算),功能:用户执行此程序时,将继承此程序所有者的权限

sgid:
作用于可执行的二进制的程序,权限数字2(单独计算),功能:用户执行此程序时,将继承此程序所属组的权限
作用于目录,功能:新建的文件将自动继承此目录的所属组

sticky:作用于目录,权限数字1(单独计算),功能:只有删除自已的文件

(15)useradd 创建用户

命令格式:useradd 用户名

常用参数:

-u UID

-d<登入目录> 指定用户登入时的目录。-g 指定初始群组,这个组必须存在。-G 指定附加组,这个村必须存在。-m 自动创建用户的家目录。-M 不要创建用户的家目录。-N 不要创建以用户名称为名的群组。-s 指定用户登入后所使用的shell。

创建mayun用户并且指定他的主组为zhangsa,附加组为lisi

给magedu这个用户指定登录密码

(16)usermod 修改用户属性

将一个用户添加到组中

usermod -G mail test 加入mail组

usermod -G new test 加入new组

使用vim编辑器需要读的权限,可以使用echo替代,ehco  abcd > f1(文件名)

命令格式:usermod -aG 组名 用户名

给mage这个用户指定两个附加组分别为zhangsan和jack

查看一个组下有哪些用户

groupmems -l -g 组名

groupdel 删除组

命令格式:groupdel 组名

切换用户或以其他用户身份执行命令

su切换用户却不切换工作环境

su - 同时切换用户与工作环境 。直接现象就是su切换当前目录不变,环境不变

在Ubuntu版本中使用sudo -i命令切换root账户

命令提示符:[root@localhost ~]#

修改提示符颜色:

PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"

cp /etc/fstab /data/dir/ 普通用户需要什么最少权限?
cp 执行权限
/etc/fstab /etc/执行权限,fstab需要有读权限
/data/dir/ /data至少有执行权限,/data/dir/至少有xw权限

设定文件特定属性

chattr +i 不能删除,改名,更改
chattr +a 只能追加内容
lsattr 显示特定属性

访问控制列表

ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人

什么是shell

Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
shell也被称为LINUX的命令解释器(command interpreter)
shell是一种高级程序设计语言

显示当前使用的shell
echo $SHELL

显示当前系统所有的shell

cat /etc/shells

在shell中可执行的命令有两类

内部命令:由shell自带的,而且通过某命令形式提供


help 内部命令列表
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令

外部命令:在文件系统路径下有对应的可执行程序文件

查看路径:which -a |--skip-alias ; whereis

区别指定的命令是内部或外部命令

格式:type 命令名

(17)Hash缓存表

系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的

路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,

存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。

hash常见用法
hash 显示hash缓存
hash –l 显示hash缓存,可作为输入使用
hash –p path name 将命令全路径path起别名为name
hash –t name 打印缓存中name的路径
hash –d name 清除name缓存
hash –r 清除缓存

(18)alias命令别名

alias

删除别名

显示当前shell进程所有可用的命令别名
alias
定义别名NAME,其相当于执行命令VALUE
alias NAME='VALUE'
在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中

仅对当前用户:~/.bashrc

对所有用户有效:/etc/bashrc

别名不会立即生效,想要别名立即生效

. .bashrc

.

如果别名同原命令同名,如果要执行原命令,可使用

\ALIASNAME
“ALIASNAME”
‘ALIASNAME’

命令执行过程

1别名

2内部命令

3hash表

4外部命令$PATH

5该命令不存在

(19)日期和时间

Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板
相关命令
date 显示和设置系统时间
date +%s
date -d @1509536033
hwclock,clock: 显示硬件时钟
hctosys  -s 以硬件时钟为准,校正系统时钟
hctosys -w 以系统时钟为准,校正硬件时钟
时区:/etc/localtime
显示日历:cal –y

显示当前系统时间

(20)nano 命令

命令格式:nano 文件名

打开或新建文件

(21)echo 命令

命令格式:echo echo [-ne][字符串]或 echo [--help][--version]

功能说明:显示文字

启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出

\a 发出警告声;
   \b 删除前一个字符;
   \c 最后不加上换行符号;
   \f 换行但光标仍旧停留在原来的位置
   \n 换行且光标移至行首;
   \r 光标移至行首,但不换行;
   \t 插入tab;
   \v 与\f相同;
   \\ 插入\字符;
   \nnn 插入nnn(八进制)所代表的ASCII字符;
–help 显示帮助
–version 显示版本信息

(22)screen  命令

可以实现桌面共享。

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该

软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

要想使用screen功能,首先必须安装screen命令,在线安装:yum install screen -y

创建会话:screen -S 会话名

查看创建的会话

screen -ls

加入screen -x 会话名

剥离当前screen会话
Ctrl+a,d

退出并关闭会话

exit

命令行扩展、被括起来的集合

括号扩展:{ }打印重复字符串的简化形式

echo file{1,3,5} 结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {000..20..2}

(23)history 命令

功能:可以通过history来查看历史命令,用来确认在某个时刻使用了哪个命令。但是,history的默认的,

只会输出命令的序号以及命令。这时我们就需要对history进行一些配置,让它报告命令执行的具体时间。

-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后

注意:history命令会把我们以前敲过所有的命令保存到一个.bash_history磁盘文件中,

它不会立即保存我们敲过的命令到.bash_history磁盘文件中,重启操作系统,就会保存

我们敲过的命令到.bash_history磁盘文件中。

(24)获得帮助

获取帮助的能力决定了技术的能力!
多层次的帮助

命令格式:whatis 命令名

whatis rm

whatis命令只能给出一些命令非常简单的帮助信息

用来查看内部命令的帮助信息

格式:help - 命令名

(23)man命令

man章节

提供命令帮助的文件                                                                                                      man 1 man
手册页存放在/usr/share/man                                                                                         1:用户命令
几乎每个命令都有man的“页面”                                                                                      2:系统调用
man页面分组为不同的“章节”                                                                                          3:C库调用

统称为Linux手册                                                                                                             4:设备文件及特殊文件     5:配置文件格式 

中文man需安装包man-pages-zh-CN(不推荐使用中文帮助信息)                                    6:游戏     7:杂项    8:管理类的命令   9:Linux内核API

man命令的操作方法:使用less命令实现
space, ^v, ^f, ^F: 向文件尾翻屏
b, ^b: 向文件首部翻屏
d, ^d: 向文件尾部翻半屏
u, ^u: 向文件首部翻半屏
RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行
y or ^Y or ^P or k or ^K:向文件首部翻一行
q: 退出
#:跳转至第#行
1G: 回到文件首部
G:翻至文件尾部

(24)touch命令

touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。

命令格式:touch 文件名

linux⽂件系统上的⽂件类型如下:

-:表示普通文件
d:表示目录文件
b:表示块设备文件
c:表示字符设备文件
l:表示软链接文件
p:表示管道文件
s:表示套接字文件

(25)rename 批量修改文件名

 在Linux系统中一个文件有三个时间分别是:

读文件内容时间(atime): 

修改文件内容时间(mtime):

        

修改文件属性包括:(文件名、大小、内容、权限、属主、属组)                                                                  

  文件通配符                                                                       预定义的字符类:man 7 glob                                                    

* 匹配零个或多个字符                                                          [:digit:]:任意数字,相当于0-9
 ? 匹配任何单个字符                                                            [:lower:]:任意小写字母
~ 当前用户家目录                                                                [:upper:]: 任意大写字母
~mage 用户mage家目录                                                     [:alpha:]: 任意大小写字母
~+ 当前工作目录                                                                [:alnum:]:任意数字或字母
~- 前一个工作目录                                                             [:blank:]:水平空白字符
 [0-9] 匹配数字范围                                                            [:space:]:水平或垂直空白字符
 [a-z]:字母                                                                        [:punct:]:标点符号
 [A-Z]:字母                                                                       [:cntrl:]:控制(非打印)字符
 [wang] 匹配列表中的任何的一个字符                               [:graph:]:图形字符
[^wang] 匹配列表中的所有字符以外的字符                       [:xdigit:]:十六进制字符

basename命令:取路径基民

dirname:取路径名

硬链接:

命令格式:ln f1 f1_link

1.同一个文件可以有多个名称。
2.多个文件名的索引编号相同。
3.不支持跨区。
4.创建源文件的多个名称,增长链接数。
5.不支持目录。
6.删除原始文件,不影响其它文件名。
7.没有依赖性。

软连接:

在创建软链接的时候,如果原始文件要写相对路径,一定是相对软链接的路径,而不是相对当前工作目录。

1.创建文件的快捷方式与原文件不是同一个文件 。
2.创建源文件的快捷方式,不增长链接数。
3.原文件的快捷方式与文件名的索引编号不同。
4.支持跨分区,跨设备。
5.支持目录创建快捷方式。
6.删除原始文件,该文件快捷方式没用。
7.有依赖性。

标准输出重定向

>表示标准输出重定向

输出重定向就是指不使用linux默认的标准输出设备显示,而是指定某个文件做为标准输出设备来存储文件信息。

程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种 I/O 设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置

hostname命令使用>标准输出重定向到/dev/pts/2终端,改变默认输出终端窗/dev/pts/1

把输出和错误重新定向到文件

2> 覆盖重定向错误输出数据流
2>> 追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
():合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt

把out.txt⽂件⾥的内容,写到file.txt⽂件⾥

标准输入重定向

输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用

标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)

<表示标准输入重定向

tr命令

tr 转换和删除字符
tr [OPTION]... SET1 [SET2]
选项:
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符
[:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母
[:xdigit:]:十六进制字符

mail 发送邮件

管道(使用符号"|"表示)  用来连接命令

命令1 | 命令2 |命令3 | ...

命令1表示标准输出 命令2表示标准输入

命令1与命令2结合使用逻辑关系:把命令1标准输出传递给命令2,作为命令2的标准输入。

文本处理工具和正则表达式

抽取文本的工具

文件内容: cat ,more,less
文件截取:head,tail
按列抽取:cut
排序和统计:sort,wc
按关键字抽取:grep

文件查看

文件查看命令:
cat,nl,tac,rev
cat [OPTION]... [FILE]...
-E:显示行结束符$
-n:对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行

nl
tac
rev

分页查看文件内容

more:分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器

显示文本前或后行内容

head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行
-# 指定行数
tail [OPTION]... [FILE]...
-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor
-F 跟踪文件名,相当于--follow=name --retry
tailf 类似tail –f,当文件不增长时并不访问文件

按列抽取文本cut和合并文件paste

cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符

cut和paste

显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
示例:
paste f1 f2
paste -s f1 f2

分析文本的工具

文本数据统计:wc
整理文本:sort
比较文件:diff和patch

收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次

uniq

uniq命令:从输入中删除前后相接的重复的行
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c

比较文件

比较两个文件之间的区别
diff foo.conf foo2.conf
5c5
< use_widgets = no
---
> use_widgets = yes
注明第5行有区别(改变)

复制对文件改变patch

diff 命令的输出被保存在一种叫做“补丁”的文件中
使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch 复制在其它文件中进行的改变(要谨慎使用)
适用 -b 选项来自动备份改变了的文件
diff -u foo.conf foo2.conf > foo.patch
patch -b foo.conf foo.patch

Linux文本处理三剑客

grep:文本过滤(模式:pattern)工具
grep, egrep, fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器

grep

grep: Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd

grep命令选项

--color=auto: 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE
-F 相当于fgrep,不支持正则表达式
-f file 根据模式文件处理

正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep
正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
元字符分类:字符匹配、匹配次数、位置锚定、分组
man 7 regex

基本正则表达式元字符

字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

正则表达式

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次

位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例: \(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat

egrep及扩展的正则表达式

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符

扩展正则表达式

次数匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次

扩展正则表达式

位置锚定:
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾
分组:
()
后向引用:\1, \2, ...
或者:
a|b a或b
C|cat C或cat
(C|c)at Cat或cat

文件查找

在文件系统上查找符合条件的文件
文件查找:locate, find
非实时查找(数据库查找):locate
实时查找:find

locate

查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:
•查找速度快
•模糊查找
•非实时查找
•搜索的是文件的全路径,不仅仅是文件名
•可能只搜索用户具备读取和执行权限的目录

locate KEYWORD
有用的选项
-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-r 使用基本正则表达式
示例
搜索名称或路径中带有“conf”的文件
locate conf
使用Regex来搜索以“.conf”结尾的文件
locate -r ‘\.conf$’

find

实时查找工具,通过遍历指定路径完成文件查找
工作特点:
• 查找速度略慢
• 精确查找
• 实时查找
• 可能只搜索用户具备读取和执行权限的目录

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

查找条件

指搜索层级
-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
-mindepth level 最小搜索目录深度
先处理目录内的文件,再处理指定目录
-depth
根据文件名和inode查找:
-name "文件名称":支持使用glob
*, ?, [], [^]
-iname "文件名称":不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称

根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件

根据文件类型查找
-type TYPE
•f: 普通文件
•d: 目录文件
•l: 符号链接文件
•s:套接字文件
•b: 块设备文件
•c: 字符设备文件
•p: 管道文件
空文件或目录
-empty
示例:find /app -type d -empty

组合条件:
与:-a
或:-o
非:-not !
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)

find示例

找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
find /tmp -not \( -user root -o -name 'f*' \) –ls
排除目录
示例:
查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
find /etc -path ‘/etc/sane.d’ -a –prune -o -name “*.conf”
查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件
find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name "*.conf"

根据文件大小来查找:

-size [+|-]#UNIT
常用单位:k, M, G,c(byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)

根据时间戳:
以“天”为单位
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位
-amin
-mmin
-cmin

查找条件

根据权限查找:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
•find -perm 755 会匹配权限模式恰好是755的文件
•只要当任意人有写权限时,find -perm +222就会匹配
•只有当每个人都有写权限时,find -perm -222才会匹配
•只有当其它人(other)有写权限时,find -perm -002才会匹配

处理动作

-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

find示例

备份配置文件,添加.orig这个扩展名
find -name “*.conf” -exec cp {} {}.orig \;
提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;
在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w {} \;
查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
查看/home的目录
find /home –type d -ls

参数替换xargs

由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
find和xargs的组合:find | xargs COMMAND
示例:
ls | xargs rm 删除当前目录下的大量文件
find /sbin/ -perm +700 | ls -l 这个命令是错误的
find /bin/ -perm /7000 | xargs ls -Sl 查找有特殊权限的文件
find /bin/ -perm -7000 | xargs ls -Sl 此命令和上面有何区别?
find -type f -name “*.txt” -print0 | xargs -0 rm 以字符nul分隔

压缩、解压缩及归档工具

file-roller
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz: .xz
zip/unzip
tar
cpio

compress/uncompress

compress [-dfvcVr] [-b maxbits] [file ...]
-d 解压缩,相当于uncompress
-c 结果输出至标准输出,不删除原文件
-v 显示详情
uncompress file.Z 解压缩
zcat file.Z 不显式解压缩的前提下查看文本文件内容
示例:zcat file.Z >file

gzip/gunzip

gzip [OPTION]... FILE ...
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留原文件不改变
-# 指定压缩比,#取值为1-9,值越大压缩比越大
gunzip file.gz 解压缩
zcat file.gz 不显式解压缩的前提下查看文本文件内容
示例:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
cat messages | gzip > m.gz

bzip2/bunzip2/bzcat

bzip2 [OPTION]... FILE ...
-k keep, 保留原文件
-d 解压缩
-# 1-9,压缩比,默认为9
bunzip2 file.bz2 解压缩
bzcat file.bz2 不显式解压缩的前提下查看文本文件内容

xz/unxz/xzcat

xz [OPTION]... FILE ...
-k keep, 保留原文件
-d 解压缩
-# 压缩比,取值1-9,默认为6
unxz file.xz 解压缩
xzcat file.xz 不显式解压缩的前提下查看文本文件内容

zip/unzip

打包压缩
zip –r /backup/sysconfig /etc/sysconfig/
解包解压缩
unzip sysconfig.zip
cat /var/log/messages | zip messages -
unzip -p message > message

tar工具

打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件

tar(Tape ARchive,磁带归档的缩写)
tar [OPTION]...
(1) 创建归档,保留权限
tar -cpvf /PATH/FILE.tar FILE...
(2) 追加文件至归档: 注:不支持对压缩文件追加
tar -r -f /PATH/FILE.tar FILE...
(3) 查看归档文件中的文件列表
tar -t -f /PATH/FILE.tar
(4) 展开归档
tar -x -f /PATH/FILE.tar
tar -x -f /PATH/FILE.tar -C /PATH/
(5) 结合压缩工具实现:归档并压缩
-j: bzip2, -z: gzip, -J: xz

-exclude 排除文件
tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app
-T 选项指定输入文件 -X 选项指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
split:分割一个文件为多个文件
分割大的 tar 文件为多份小文件
split -b Size –d tar-file-name prefix-name
split -b 1M –d mybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
合并:
cat mybackup-parts

cpio

功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-O filename 输出到指定的归档文件名
-A 向已存在的归档文件中追加文件
-i 解包,将打包文件解压或将设备上的备份还原到系统
-I filename 对指定的归档文件名解压
-t 预览,查看文件内容或者输出到设备上的文件内容
-F filename 使用指定的文件名替代标准输入或输出
-d 解包生成目录,在cpio还原时,自动的建立目录
-v 显示打包过程中的文件名称

处理文本的工具sed

Stream EDitor, 行编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把

缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内

容并没有改变,除非你使用重定向存储输出。

功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
参考: http://www.gnu.org/software/sed/manual/sed.html

sed工具

用法:
sed [option]... 'script' inputfile...
常用选项:
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i.bak 备份文件并原处编辑
script:
'地址命令'

地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2 奇数行
2~2 偶数行

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理

d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理

s/// 查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中

高级编辑命令

P: 打印模式空间开端至\n内容,并追加到默认输出之前
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

软件运行和编译

ABI:Application Binary Interface
Windows与Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
库级别的虚拟化:
Linux: WINE
Windows: Cygwin
API:Application Programming Interface
POSIX:Portable OS
程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
静态编译:.a
动态编译:.so

C程序编译过程

静态和动态链接

链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接
静态链接
把程序对应的依赖库复制一份到包
libxxx.a
嵌入程序包
升级难,需重新编译
占用较多空间,迁移容易
动态链接
只把依赖加做一个动态链接
libxxx.so
连接指向
占用较少空间,升级方便

静态和动态链接

C程序静态链接

Java程序运行

yum 在线管理就可以自动处理 RPM 包的依赖性问题,从而大大简化 RPM 包的安装过程。但需要

注意的是,首先,yum 安装的还是 RPM 包,其次,yum安装是需要有可用的 yum 服务器存在的,当然

这个 yum 服务器可以在网上,也可以使用光盘在本地搭建。

yum 可以方便地进行 RPM 包的安装、升级、査询和卸载,而且可以自动解决依赖性问题,非常方便和快捷。但是,一定

要注意 yum 的卸载功能。yum 在卸载软件的同时会卸载这个软件的依赖包,但是如果卸载的依赖包是系统的必备软件包,就有

可能导致系统崩溃。除非你确实知道 yum 在自动卸载时会卸载哪些软件包,否则最好不要执行 yum 卸载。

rpm包管理

CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE ...

rpm包安装

[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun

rpm包升级

升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级
--force: 强制安装

升级注意项

注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

包查询

rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件

[query-options]
--changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY

常用查询用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa
包卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

包校验

rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ

包来源的合法性验证及完整性验证
完整性验证:SHA256
来源合法性验证:RSA
公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

rpm数据库

数据库重建:
/var/lib/rpm
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之
否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录

yum 

首先将光盘挂载到/mnt目录下

mount -r /dev/cdrom /mnt  

CentOS: yum, dnf
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
文件服务器:
http://
https://
ftp://
file://

要当yum路径的前提,repodata这个文件夹所在的目录,该目录就是yum路径。

实验:基于光盘的yum源

systemctl start autofs
systemctl enable autofs

mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

vim /etc/yum.repos.d/base.repo
[base]
name=cdrom repo
baseurl=file:///misc/cd/
gpgcheck=0

yum配置文件

实验:基于http协议的Yum源
1 selinux 关闭
2 systemctl stop firewalld ;systemctl disable 或 service iptables stop ;chkconfig iptables off

实验:基于http协议的Yum源

1 selinux 关闭
2 systemctl stop firewalld ;systemctl disable 或 service iptables stop ;chkconfig iptables off

服务器配置
yum install httpd -y
systemctl start httpd
cd /var/www/html
mkdir centos/{6,7}/os/x86_64/ -pv
echo '- - -' > /sys/class/scsi_host/host2/scan
mount /dev/sr0 centos/7/os/x86_64/
mount /dev/sr1 centos/6/os/x86_64/

客户端配置

vim /etc/yum.repos.d/test.repo
[test]
name=base yum
baseurl=http://192.168.37.7/centos/$releasever/os/$basearch/
gpgkey=http://192.168.37.7/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6

服务器配置
yum install httpd -y
systemctl start httpd
cd /var/www/html
mkdir centos/{6,7}/os/x86_64/ -pv
echo '- - -' > /sys/class/scsi_host/host2/scan
mount /dev/sr0 centos/7/os/x86_64/
mount /dev/sr1 centos/6/os/x86_64/

yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000

yum仓库

yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i386

yum源

阿里云repo文件
http://mirrors.aliyun.com/repo/
CentOS系统的yum源
阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴开源软件
https://opsx.alibaba.com/

生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库
yum-config-manager

yum命令

yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)

yum-config-manager

生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库

yum命令

yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)

升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]

查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
yum makecache

yum命令

搜索:yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
日志 :/var/log/yum.log

安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件

系统光盘yum仓库

系统安装光盘作为本地yum仓库:
(1) 挂载光盘至某目录,例如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
创建yum仓库:
createrepo [options] <directory>

编译httpd-2.4.25.tar.bz包,第一步:

安装httpd-2.4.25.tar.bz包,解包 tar xvf httpd-2.4.25.tar.bz

./configure --prefix=/apps/httpd24 --sysconfdir=/etc/httpd --enable-ssl --enable-so

以下是编译httpd-2.4.25.tar.bz编代码,所需要安装的yum包

yum install gcc -y

yum install apr-devel -y

yum install apr-util-devel -y

yum install pcre-devel -y

yum install mod_ssl -y

./表示当前路径,要运行configure,就要写configure的路径。

第二步:

第三步:

最后一步执行make install

DNF (DaNdiFied)

NF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等
安装所需软件包,依赖epel源
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.8-3.el7.x86_64.rpm
配置文件:/etc/dnf/dnf.conf
仓库文件:/etc/yum.repos.d/ *.repo
日志: /var/log/dnf.rpm.log

DNF 使用

帮助:man dnf
dnf 用法:与yum一致
dnf [options] <command> [<arguments>...]
dnf --version
dnf repolist
dnf clean all
dnf makecache
dnf list installed
dnf list available
dnf search nano
dnf history
dnf history undo 1

程序包编译

程序包编译安装:
Application-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码-->预处理-->编译-->汇编-->链接-->执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C、C++:make 项目管理器
configure脚本 --> Makefile.in --> Makefile
java: maven

编译安装C语言源代码编译安装三步骤:

1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
2、make 根据Makefile文件,构建应用程序
 3、make install 复制文件到相应路径
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
注意:安装前查看INSTALL,README

开源程序源代码的获取:
官方自建站点:
apache.org (ASF:Apache Software Foundation)
mariadb.org
...
代码托管:
SourceForge.net
Github.com
code.google.com
c/c++编译器: gcc (GNU C Complier)

编译C源代码:
准备:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
实现:通过“包组”提供开发组件
Development Tools
Server Platform Development
生产实践:(基于最小化安装的系统)
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils

第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH:指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
System types:支持交叉编译

Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install

安装后的配置:
(1) 二进制程序目录导入至PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导入帮助手册
编辑/etc/man.config|man_db.conf文件
添加一个MANPATH

Ubuntu 软件管理

Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令
dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
APT:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/服务器架构
APT工作原理:在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header)信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的

dpkg常见用法: man dpkg
dpkg -i package.deb 安装包
dpkg -r package 删除包,不建议,不自动卸载依赖于它的包
dpkg -P package 删除包(包括配置文件)
dpkg -l 列出当前已安装的包,类似rpm -qa
dpkg -l package 显示该包的简要说明,类似rpm –qi
dpkg -L package 列出该包中所包含的文件,类似rpm –ql
dpkg -S <pattern> 搜索包含pattern的包,类似rpm –qf
dpkg -s package 列出该包的状态,包括详细信息,类似rpm –qi
dpkg --configure package 配置包,-a 使用,配置所有没有配置的软件包
dpkg -c package.deb 列出 deb 包的内容,类似rpm –qpl
dpkg --unpack package.deb 解开 deb 包的内容

dpkg示例:
列出系统上安装的所有软件包
dpkg -l
列出软件包安装的文件
dpkg -L bash
查看/bin/bash来自于哪个软件包
dpkg -S /bin/bash
安装本地的 .deb 文件
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
卸载软件包
dpkg -r zip
注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行

Debian 使用APT工具来管理包系统,它与 apt 命令不同。在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 是其中一个常用的命令行工具,另外一款较为流行的命令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令中
在 2014 年apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解决了命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,提供管理软件包所需的必要选项
apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常有帮助。例如:可以在使用 apt 命令安装或删除程序时看到进度条,apt 还会在更新存储库数据库时提示用户可升级的软件包个数
apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令,也即可用 apt 替换部分 apt-get 系列命令,但不是全部

查看帮助:apt help
apt与apt-get命令对比
apt 命令 被取代的命令 命令的功能
apt install apt-get install 安装软件包
apt remove apt-get remove 移除软件包
apt purge apt-get purge 移除软件包及配置文件
apt update apt-get update 刷新存储库索引
apt upgrade apt-get upgrade 升级所有可升级的软件包
apt autoremove apt-get autoremove 自动删除不需要的包
apt full-upgrade apt-get dist-upgrade 在升级软件包时自动处理依赖关系
apt search apt-cache search 搜索应用程序
apt show apt-cache show 显示安装细节

Ubuntu 软件管理

apt 特有的命令
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表
APT包索引来自/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引
apt命令操作(如安装和删除软件包)记录在/var/log/dpkg.log日志文件中

apt示例:
安装包:
apt install tree zip
删除包:
apt remove tree zip
说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用
更新包索引:
apt update
升级包:要升级系统,请首先更新软件包索引,再升级
apt upgrade

Ubuntu操作

在Ubuntu版本中使用sudo -i命令切换root账户

apt update    与互联网数据库同步

apt install ubuntu-desktop  安装图形界面命令

转载于:https://www.cnblogs.com/quguwei/p/10839915.html

Linux基础常用命令相关推荐

  1. Linux——基础+常用命令

    Linux命令基础和常用命令 Linux命令基础 Shell Linux命令的分类 Linux命令行的格式 编辑Linux命令行的辅助操作 获得命令帮助的方法 内部命令 help 使用man命令阅读 ...

  2. linux 基础常用命令集

    这里写自定义目录标题 RHCSA 学习笔记 系统组成 常用的目录结构: shell解释器 bash的优点 BASH快捷键操作: 路径 常用简单基础命令 BASH的高级应用 管理用户和组 管理文档的权限 ...

  3. Linux基础——常用命令

    find /grep /xargs /sort /uniq /tr /cut /paste /sed /awk......待续...... 1.find 名字查找: find . -name file ...

  4. Linux基础 常用命令学习

    2019独角兽企业重金招聘Python工程师标准>>> touch FILE 更新/创建文件 -a 访问时间 -m 修改时间 -c 不创建 -t 指定时间 mv FILE/DIR D ...

  5. linux权限切换命令,Linux基础常用命令汇总(权限操作)

    权限操作 权限简介 Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功. Linux下文件的权限类型一般包括读,写,执行.对应字母为 r.w. ...

  6. Linux 入门基础——常用命令(一)

    1. 初识 Linux Linux根据原生程度,分为两种: (1)内核版本: Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核.内核是什么?内核建立了计算机软件与硬件之间通讯的 ...

  7. Linux下netstat常用,Linux netstat常用命令

    1.统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2.统计httpd协议连接数(查看Apache的并发请求数及其TCP连接状态) ps -ef ...

  8. linux的常用命令行

    linux的常用命令行 sftp– help chmod g+w 文件 nohl 清除文件高亮显示 可用命令: cd 路径 更改远程目录到"路径" chgrp group plcd ...

  9. Linux GCC常用命令和ELF文件格式

    Linux GCC常用命令和ELF文件格式 一.各种工具 (一)GCC编译工具 (二)Binutils (三)C 运行库 一. C 语言程序 Hello.c示例 (一)准备工作 (二)编译过程 1.预 ...

最新文章

  1. 中科大团队打造“象鼻”机器人,开门、擦玻璃、会给女朋友拧瓶盖的那种
  2. 图像降噪算法——Variance Stabilizing Transform / Generalization Anscombe Transform算法
  3. 牛客网 小白赛4 A三角形【贪心】
  4. LINUX BASH SHELL,小小学习一下
  5. [蓝桥杯2017决赛]数位和-模拟(水题)
  6. EF 拉姆达 linq if else (整理)
  7. Java学习笔记—生产者和消费者模式
  8. Spring Boot整合swagger2(生成有左右菜单式的api文档界面)
  9. html如何查找文件,如何查找网站上HTML的CLASS文件并下?如何查找网站上HTM 爱问知识人...
  10. Python网络爬虫与信息提取[request库的应用](单元一)
  11. 机器学习算法之KNN算法
  12. php合成图片系统,php图片合成
  13. Autoware docker 环境安装
  14. 基于java-GUI高校科研成果管理系统
  15. 面试官问你“有什么问题问我吗?”,你该如何回答? 1
  16. dw新建一个html网页,Dreamweaver创建网页的基本方法
  17. 新点软件怎么导入清单_【新点软件怎么导出到excel】新点造价软件怎么导入清单...
  18. get请求图片出现403 防盗链解决方式 no-referrer
  19. 通俗易懂理解——双向LSTM
  20. 微信企业付款 ”错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置“报错的处理办法

热门文章

  1. linux 内核网络协议栈--linux内核路由机制(一)
  2. 和ts一般怎么玩_KPL:一诺采访引热议,quot;裴擒虎是个野王都会quot;,暖阳怎么办?...
  3. amuse ui(web插件,js插件,css样式)?
  4. 【leetcode】581. Shortest Unsorted Continuous Subarray
  5. RHEL 4 update 4 DVD版制作
  6. hihoCoder 1549 或运算和
  7. free是自由,不是免费,从王开源说起
  8. .NET中可空值类型实现原理
  9. 常用解决方案技术一览
  10. 分享一些有趣的面试智力题