查看所有开机自启动的服务
systemctl list-unit-files
CentOS7安装图形界面
CentOS7安装图形界面
tcpdump抓包
(rootRoses)-[~]
└─# tcpdump -n -c 6 port 22 ##抓22端口的6个包 1 ⚙
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
20:47:48.900847 IP 192.168.11.100.22 > 192.168.11.1.50676: Flags [P.],
seq 1116172279:1116172467, ack 3360537668, win 501, length 188 ##seq=x.
20:47:48.901083 IP 192.168.11.1.50676 > 192.168.11.100.22: Flags [.],
ack 188, win 4100, length 0 #ack=y.
20:47:48.979204 IP 192.168.11.100.22 > 192.168.11.1.50676: Flags [P.],
seq 188:456, ack 1, win 501, length 268 #seq=
20:47:49.039329 IP 192.168.11.1.50676 > 192.168.11.100.22: Flags [.],
ack 456, win 4106, length 0
20:47:49.099971 IP 192.168.11.100.22 > 192.168.11.1.50676: Flags [P.],
seq 456:708, ack 1, win 501, length 252
20:47:49.158992 IP 192.168.11.1.50676 > 192.168.11.100.22: Flags [.],
ack 708, win 4105, length 0
拓展:syn洪水攻击过程
自己描述版本:客户端伪装一个不存在的ip和Mac物理地址,发送大量syn到服务端,服务端不知道是不存在的伪装的,回复大量回应到客户端,
然后又有大量连接等待time_wait,这就浪费了硬件软件资源。
官方描述版本:在服务端返回一个确认的SYN-ACK包的时候存在个潜在弊端,如果发起的客户端是一个不存在的客户端,那么服务单就不会接到客户端回应的ACK包
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超时关闭,才能
如果恶意者通过ip欺骗,发送不良SYN包给受害系统,导致存在大量未决的连接
切换级别
1. systemctl isolate multi-user.target #切换到多用户模式(命令行界面)
2. systemctl isolate graphical.target #切换图形界面
3. systemctl set-default graphical.target #默认开机为图形界面
4. systemctl set-default multi-user.target #默认开机为命令行模式
创建软连接
ln –sf /root/software/hadoop-2.7.3/ /root/hadoop
#在/root下创建指向/root/software/hadoop-2.7.3/的软连接hadoop
tar.gz解压缩命令
1、压缩命令:
命令格式:
tar -zcvf 压缩文件名 .tar.gz 被压缩文件名
可先切换到当前目录下,压缩文件名和被压缩文件名都可加入路径。
2、解压缩命令:
命令格式:
tar -zxvf 压缩文件名.tar.gz
解压缩后的文件只能放在当前的目录。
修改用户、目录,文件所属
chown 修改文件所有者
- chown 新所属用户 文件名
案例1:将demo.txt修改为tom拥有
案例2:将tes目录下面的所有文件都更改为tom所有,-R是递归
chown tom demo.txt
chown -R tom /home/test
chown :adminuser /home/admins/ #修改admins目录所属于到adminuser组
chown tom demo.txt
chown -R tom /home/test
chown :adminuser /home/admins/ #修改admins目录所属于到adminuser组
chgrp 修改文件所属组
- chgrp
案例1:将zwj用户更改所属组为mojiao
chgrp mojiao zwj
chmod 修改文件或者文件夹rwx权限
- chmod
案例1:将demo.txt的权限更改为自己可读可写可执行,本组用户可读可写,其他组用户可读
案例2:将demo文件夹更改为自己可读可写可执行,本组用户可读可写,其他组用户可读
详解:rwx=7,rw=6,r=4
chmod 764 demo.txt
chmod 764 demo
usermod 修改用户所在组
- usermod
案例1:将zwj更改所在组为wudang
usermod -g wudang zwj
crontab 设置任务定时执行
crontab默认用nano编辑器打开,用不惯nano的先执行select editor按数字选择vim编辑器
- crontab
先执行crontab -e打开定时任务列表写下如下命令。从左往右数*代表分、小时、日、月,星期。
案例1:将/root下面的my.sh设置为每隔一分钟执行一次。
案例2:将/root下面的my.sh设置为每周的星期三凌晨4:00执行。
-e:编辑定时任务
-l:显示定时任务
-r:删除定时任务
*/1 * * * * /root/my.sh
0 4 * * 3 /root /my.sh
at 定时调度(只执行一次,执行完就消失)
- at
按两次Ctrl+D结束编写
案例1:明天凌晨5点执行date到myat.txt
atq:显示任务、atrm:删除任务
at 5am 24 hours
at> date > myat.txt
磁盘分区、挂载
- lsblk、lsblk -a,lsblk -f查看分区情况,lsblk=list block=块设备列表
1.fdisk /dev/sdb --分区新添加的硬盘,按提示进行
2.mkfs -t ext4 /dev/sdb1 --格式化分区,分区类型为ext4并分配UUID给分区
分完区如果ls没有看到刚才的分区要reboot重启一下
注意:如遇到此错误“mkfs: failed to execute mkfs.xfs: 没有那个文件或目录”,不能格式化成
某个格式(ext4,xfs等),用which mkfs查看命令位置得/usr/sbin/mkfs,再查看ls -la /usr/sbin/mkfs是否,
有mkfs.ext4/mkfs.xfs格式,没有则apt-get install xfsprogs/yum install xfsprogs再执行查看命令。
1.vim /etc/fstab --打开永久挂载目录的文件写入以下命令
2./dev/sdb1 /newdisk ext4 defaults 0 0 --将sdb1分区永久挂载到/newdisk,此处的newdisk为挂载目标目录,格式为ext4
3.添加完成后执行mount -a即刻生效
创建新的swap交换分区:
新加一块磁盘或者分区出来512M大小/dev/sdb1
1. fdisk分区
2. mkswap /dev/sdb1
3. 把UUID保存到/etc/fstab下永久挂载
4. swapon -a生效
5. swapon -s显示
- 取消挂载
umount /dev/sdb1 或者 umount /newdisk
磁盘使用情况查询
- df -h
查询指定目录对磁盘的占用情况
- du
-s 指定目录占用大小汇总
-h 带计量单位
-a 把文件也显示出来=all
--max-depth=1 子目录深度为1
-c 列出明细,列出占用磁盘总量=count
案例1:查看/etc目录的磁盘占用情况,深度为1
du -hac --max-depth=1 /opt
显示系统执行的进程
- ps
案例1:查看sshd进程
案例2:查看sshd的父进程
ps aux | more | grep sshd
ps -ef | grep sshd
查看服务netstat
- netstat -anp | grep sshd
- netstat -tunlp #查看端口占用情况
动态监控top
top -d 1 #每秒刷新一次进程
使用方法
2.1 使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
2.2 参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
- 下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。使用方法
2.1 使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
2.2 参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
2.3 其他
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
终止进程kill,killall
- kill
案例1:强制终止pid(进程号)888的进程,-9强制终止(数字9)
kill -9 888
查看进程树pstree
- pstree
pstree -u/pstree -p
查看开启的服务
service --status-all
设置服务自启/关闭
update-rc.d ssh enable //系统自动启动SSH服务
update-rc.d ssh disabled // 关闭系统自动启动SSH服务
服务自启管理
- chkconfig
chkconfig重新设置服务自启/关闭后,需要reboot重启才能生效
chkconfig --list | grep sshd #查看sshd服务
案例1:将sshd在3运行级别,关闭/开启自启
chkconfig --level 3 sshd off/on
通常用ps -aux | grep ssh/netstat -anp | grep ssh
****************************起始分割线*******************************
那还有其他办法来配置linux服务器的防火墙吗?答案有,便是linux自带的ufw防火墙工具。
UFW介绍与安装
Uncomplicated Firewall,它是一款「用户友好」的shell工具,可用于管理 iptables 防火墙规则,其主要目的就是让管理 iptables防火墙规则 更加轻松容易。
【系统默认携带UFW +UFW 默认禁用】Ubuntu 18.04 LTS 系统中已默认附带了 UFW 工具,并且默认都是禁用状态(status:inactive)。
【UFW默认:禁止所有端口入站,开启所有端口出站】默认情况下,UFW 将阻止所有传入连接并允许所有传出连接。即 除非用户专门打开特定端口,否则任何尝试访问本服务器的人都无法连接,但服务器上运行的应用程序和服务却能够对外访问。
检查是否已安装ufw工具
# 方式一
man
ufw
# 方式二(推荐)
sudo
ufw status verbose ``#查看UFW已配置的状态详细信息
sudo
ufw status numbered``#查看UFW已配置的状态详细信息,并对每一项配置编号显示
# verbose: adj.详细的,冗长的
如果未安装,可通过下述命令一键安装
apt-get ``install
ufw
UFW使用
- 作为一个基本的防火墙,拒绝所有输入流量,允许输出流量,是一个不错的选择。我们通过下面的命令,来设置默认的防火墙规则:
sudo ufw default deny incoming
sudo ufw default allow outgoing
1.列出所有应用程序配置策略
sudo
ufw app list
2.查找有关配置文件和包含规则的更多信息
sudo
ufw app info ``'Nginx Full'
3.允许SSH连接
备注:在服务器上正式启用 UFW 防火墙之前,需要事先添加允许 SSH 连接的传入规则;否则,即使UFW开启SSH连接命令,也无效。
sudo
ufw allow ``ssh
sudo
ufw allow http
4.允许指定端口连接
sudo
ufw allow 3306``/tcp
sudo
ufw allow 80``/tcp
sudo
ufw allow 8080``/tcp
sudo
ufw allow 22``/tcp
5.允许指定端口范围内连接
sudo
ufw allow 7100:7200``/tcp
sudo
ufw allow 7100:7200``/udp
# 注:除允许单个端口连接之外,UFW 还允许直接配置端口范围。在使用 UFW 的端口范围时,必需指定 tcp 或 udp 协议。
6.允许/拒绝指定特定IP地址****入站/连接
sudo
ufw allow from XX.YY.ZZ.MM
sudo
ufw deny from XX.YY.ZZ.MM
7.删除UFW策略
# 方式一
# 查看想删除UFW策略的配置项对应编号
sudo
ufw status numbered
# 指定删除编号为XX的防火墙策略
sudo
ufw delete 4
#方式二
sudo
ufw delete allow 8069
8.启用UFW配置
sudo
ufw ``enable
9.禁用UFW配置
sudo
ufw disable
10.重置UFW配置
备注:重置 UFW配置项时,系统会禁用 UFW 并删除所有活动规则。
sudo
ufw rest
kali开启端口、关闭防火墙方法
先安装ufw命令
apt-get install ufw
ufw命令用法
检查防火墙的状态(默认 inactive) # ufw status
防火墙版本 # ufw version
启动ufw防火墙 # ufw enable
关闭ufw防火墙 # ufw disable
默认禁止访问所有 # ufw default deny
开放22/TCP端口 # ufw allow 22/tcp
开放53端口(tcp/udp) # ufw allow 53
禁止外部访问 # ufw deny 3306
删除已经添加过的规则 # ufw delete allow 22
允许此IP访问所有的本机端口 # ufw allow from 192.168.1.100
删除上面的规则 # ufw delete allow from 192.168.1.100
查看规则,显示行号 # ufw status numbered
删除第三条规则 # ufw delete 3
关闭ufw # ufw disable
禁止对8888端口的访问 # ufw deny 8888
打开来自192.168.0.1的tcp请求的22端口 # ufw allow proto tcp from 192.168.0.1 to any port 22
####上面的“关闭ufw”指的是关闭ufw策略
### 开启/关闭ufw防火墙服务
service start/stop/restart ufw.service
****************************结束分割线*******************************
firewall防火墙 端口管理
案例1:打开22端口
案例2:关闭22端口
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload #设置完端口要重新载入reload才能生效,下同
firewall-cmd --permanent --remove-port=22/tcp #reload生效
firewall-cmd --query-port=22/tcp #查询22端口是否开放
top 动态监控进程
先输入top -d 1 #一秒刷新一次进程
再按P(大写p)CPU占用排序/按M(大写m)内存占用排序/按N(大写n)pid排序/
按u/U输入用户名称查看用户占用进程/按k再输入pid号再按9强制终止进程
输入q(小写)退出top进程
rpm 包的管理
rpm -ivh
rpm -qa | grep xx #查询已安装rpm的列表, -e(erase擦除的意思)为删除rpm包
rpm -e --nodeps firefox #强制删除Firefoxrpm包,删除后依赖该软件包的程序可能无法运行
Windows通过mstsc(3389端口)远程Debian
CentOS7安装xrdp(windows远程桌面连接linux)
apt-get install xrdp #安装xrdp
systemctl enable xrdp #使xrdp服务自启
systemctl start xrdp # 启用xrdp服务
ufw allow 3389 #防火墙开放3389端口
ufw allow 3350 #防火墙开放3350端口
netstat -anp | grep 3350 #查看3350端口是否监听
192.168.11.100:3389 #windwos用mstsc,输入Linux的IP地址后面加端口号
Windows通过mstsc(3389端口)远程CentOS7
*****************************起始分割线******************************
# [Linux包管理工具(rpm/dpkg,yum/apt,alien)](https://www.cnblogs.com/sonice-cinsy/p/6612887.html)
概括:
rpm/yum redhat
dpkg/apt debian
alien 转换
在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。
RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很多 Linux 系统 (RHEL) 的既定软件标准。与 RPM 进行竞争的是基于 Debian 操作系统 (UBUNTU) 的 DEB 软件包管理工具- DPKG,全称为 Debian Package,功能方面与 RPM 相似。二者之具体比较不在本文范围之内。
**RPM 包的安装 / 升级 / 查询 / 卸载**
一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .rpm 扩展名结尾的文件,例如 package.rpm 。对其操作,需要使用 rpm 命令。下面介绍 rpm 工具的参数和使用方法,并以 IBM Lotus Notes 在 RHEL 5.2 安装为例做具体说明。
RPM 命令常用参数
RPM 的常规使用方法为 rpm -? package.rpm,其中 -? 为操作参数 ( 更多信息,请查阅帮助 $man rpm):
-q 在系统中查询软件或查询指定 rpm 包的内容信息
-i 在系统中安装软件
-U 在系统中升级软件
-e 在系统中卸载软件
-h 用 #(hash) 符显示 rpm 安装过程
-v 详述安装过程
-p 表明对 RPM 包进行查询,通常和其它参数同时使用,如:
-qlp 查询某个 RPM 包中的所有文件列表
-qip 查询某个 RPM 包的内容信息
RPM 命令参数使用方法
以上参数有些需要组合使用,比如说 rpm -h package.rpm 是没有意义的,但 rpm -ih package.rpm 即表示安装 package 并用 # 符显示安装进度。
安装 RPM 包
# rpm -ivh package.rpm
升级 RPM 包命令
# rpm -Uvh package.rpm
卸载 RPM 包命令
# rpm -ev package
查询 RPM 包中包含的文件列表命令
# rpm -qlp package
查询 RPM 包中包含的文件列表命令
# rpm -qlp package
查询 RPM 包中包含的内容信息命令
# rpm -qip package
查询系统中所有已安装 RPM 包
# rpm -qa
RPM 包管理示例
以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 RPM 包名为 ibm_lotus_notes-8.5.i586.rpm 。
首先查询是否该软件是否已经在系统中存在
# rpm -qa | grep ibm_lotus_notes
如果返回信息为空那么说明该软件还未被安装。
查询 Notes 软件包内容:
# rpm -qip ibm_lotus_notes-8.5.i586.rpm
Name : ibm_lotus_notes Relocations: /opt/ibm/lotus/notes
Version : 8.5 Vendor: IBM
Release : 20081211.1925 Build Date: Sat 13 Dec 2008 09:38:55 AM CST
Install Date: (not installed) Build Host: dithers.notesdev.ibm.com
Group : Applications/Office
Source RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm
Size : 603779427 License: Commercial
Signature : DSA/SHA1, Sat 13 Dec 2008 09:43:02 AM CST, Key ID 314c8c6534f9ae75
Summary : IBM Lotus Notes
Description :
IBM Lotus Notes software provides a robust ...
安装 Notes:
# rpm -ivh ibm_lotus_notes-8.5.i586.rpm
返回信息 :
Preparing... ########################################### [100%]
1:ibm_lotus_notes ########################################### [100%]
升级 Notes:
若今后需要基于该版本升级至更高版本的 Notes( 缝 .0 - ibm_lotus_notes-9.0.i586.rpm),则使用 -U 参数:
# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
在该步骤中如果使用 -i 则系统通常会报文件冲突错误,无法正常安装。
卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
# rpm -ev ibm_lotus_notes
**DEB 包的安装 / 升级 / 查询 / 卸载**
一个 DEB 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .deb 扩展名结尾的文件,例如 package.deb 。对其操作,需要使用 dpkg 命令。下面介绍 dpkg 工具的参数和使用方法,并以 IBM Lotus Notes 在 UBUNTU 904 安装为例做具体说明。
DPKG 命令常用参数
DPKG 的常规使用方法为 dpkg -? Package(.rpm), 其中 -? 为安装参数 ( 更多信息,请查阅帮助 $man rpm):
-l 在系统中查询软件内容信息
--info 在系统中查询软件或查询指定 rpm 包的内容信息
-i 在系统中安装 / 升级软件
-r 在系统中卸载软件 , 不删除配置文件
-P 在系统中卸载软件以及其配置文件
DPKG 命令参数使用方法
安装 DEB 包命令
$ sudo dpkg -i package.deb
升级 DEB 包命令
$ sudo dpkg -i package.deb ( 和安装命令相同)
卸载 DEB 包命令
$ sudo dpkg -r package.deb # 不卸载配置文件
或
$ sudo dpkg -P package.deb # 卸载配置文件
查询 DEB 包中包含的文件列表命令
$ sudo dpkg-deb -c package.deb
查询 DEB 包中包含的内容信息命令
$ dpkg --info package.deb
查询系统中所有已安装 DEB 包
$ dpkg -l package
DEB 包管理示例
以下步骤描述了一个普通用户安装 IBM Lotus Notes V85 ( 以下简称 Notes) 的典型操作过程。 Notes 的 DEB 包名为 ibm_lotus_notes-8.5.i586.deb.
首先查询是否该软件是否已经在系统中存在
$ dpkg -l ibm-lotus-*
如果系统中从未安装过 Lotus 产品,那么返回信息为 :
No pakcages found matching ibm-lotus-*
如果系统安装过 Lotus 产品,但已被删除,那么返回信息为 :
pn ibm-lotus-notes none (no description available)
查询 Notes 软件包内容:
$ dpkg --info ibm_lotus_notes-8.5-i586.deb
返回信息 :
new debian package, version 2.0.
size 335012296 bytes: control archive= 231821 bytes.
...
Package: ibm-lotus-notes
Version: 8.5-20081211.1925
Section: IBM
Priority: extra
Architecture: i386
Installed-Size: 619444
Maintainer: IBM Lotus Product
Description: IBM Lotus Notes
IBM Lotus Notes software provides a robust ... ...
安装 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
升级 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
卸载 Notes
注意卸载软件使用软件名称,而不是包文件名:
$ sudo dpkg -P ibm-lotus-notes
**软件包依赖性关系**
由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直令用户感到头疼。如果 package_a 依赖于 package_b,那么在一个没有安装 package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。基于以上 package_a 和 package_b 的关系,在一个干净的系统中 ( 未安装 package_a 或 package_b),欲安装 package_a,错误通常会表现为:
RHEL 5.2
# rpm -ivh package_a.rpm
error: Failed dependencies:
pacakge_b = version info is needed by package_a
Ubuntu 904
$ sudo dpkg -i package_a.deb
dpkg: regarding package_a.deb containing package, pre-dependency problm:
package_a pre-depends on package_b (version info)
dpkg: error processing package_a.deb (--install):
pre-dependency problem - not installing package_a
Errors were encountered while processing:
package_a.deb
查询软件包依赖关系
查询 RPM 包的依赖关系,使用 rpm -qRp:
# rpm -qRp package_a.rpm
package_b = version_info
或
package_b >= version_info
或
package_b <= version_info
表明 package_a.rpm 依赖于 version_info 版的 package_b,或者任何高于并包括 version_info 版的 package_b,亦或低于或包括 version_info 版的 package_b 。所以 package_b.rpm 必须在 package_a 之前安装于系统中。
查询 DEB 包的依赖关系,可解读 dpkg --info 结果中的 Pre-Depends 字段:
$ dpkg --info package_a.deb
Pre-depends: package_b (= version_info)
Depends: package_b (= version_info)
或
Pre-depends: package_b (>= version_info)
Depends: package_b (>= version_info)
或
Pre-depends: package_b (<= version_info)
Depends: package_b (<= version_info)
表明 package_a.deb 依赖于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的 package_b. 所以 package_b.deb 必须在 package_a 之前安装于系统中。
所以正确的安装方法如下节所示。
安装方法
对于 package_a,正确的安装方法应该是:
##RPM
# rpm -ivh package_b.rpm
# rpm -ivh package_a.rpm
##DEB
$ sudo dpkg -i package_b.deb
$ sudo dpkg -i package_a.deb
嵌套的依赖关系
如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以针对此类问题,使用了更高级的包管理策略去解决 - Yum/APT 。
**更友好的包管理软件 - YUM**
**YUM**
YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:
rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux 5Client - i386 - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
YUM 的系统配置文件位于 /etc/yum.conf,内容如:
[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
pkgpolicy=newest
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude= firefox gftp
配置文件用来定义用户期望的 yum 行为,比如,gpgcheck 表明安装时不进行 gpg 验证,exclued=firefox gftp 表明进行系统全软件升级时不升级 firefox 和 gftp 。
YUM 常用命令
安装指定软件 :
# yum -y install package-name
列出系统中已安装软件
# yum list
列出系统中可升级的所有软件
# yum check-update
升级系统中可升级的所有软件
# yum update
升级指定软件
# yum update package-name
在升级过程中接受所有互动问答
# yum -y update
卸载指定软件
# yum remove package-name
更多有关 YUM 的信息,请查阅 http://fedoraproject.org/wiki/Tools/yum 。
**更友好的包管理软件 - APT**
**APT**
APT 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。
APT 的软件源定义来自 /etc/apt/sources.list 文件:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
注意每次手动修改上述文件后,需要使用 sudo apt-get update 来更新系统的源使新的源数据被当前系统识别。
UBUNTU 中 APT 的配置文件位于 /etc/apt/apt.conf.d,其中的多个配置文件依功能分类。
APT 常用命令
更新源索引
$ sudo apt-get update
安装指定软件
$ sudo apt-get install package-name
下载指定软件的源文件
$ sudo apt-get source package-name
将系统中所有软件升级到最新版本
$ sudo apt-get upgrade
将操作系统连同所有软件升级到最新版本
$ sudo apt-get dist-upgrade
卸载指定软件
$ sudo apt-get remove package-name
更多有关 APT 的信息,请查阅 http://www.debian.org/doc/manuals/apt-howto/index.en.html 。
回页首
RPM 与 DEB 的兼容 - Alien
Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。
在 UBUNTU 中使用 alien 将 rpm 转换为 deb 并安装 :
$ sudo alien -d package.rpm
$ sudo dpkg -i package.deb
在 RHEL 中使用 alien 将 deb 转换为 rpm 并安装 :
# alien -r package.deb
# rpm -ivh package.rpm
更多 alien 相关信息请查阅 http://linux.die.net/man/1/alien
**总结**
本文以 RHEL 5.2 和 Ubuntu 904 为例,基于命令行操作,介绍了 Linux 系统中两大常用软件包管理工具- RPM 与 DPKG 。首先从最底端的 rpm/dpkg 命令操作开始列举了它们的基本使用方法,随后指出了软件的依赖关系以及由此带来的问题,并对此问题的解决方案,也是最流行的 YUM 与 APT 前端软件管理系统进行了操作介绍。最后本文简要说明了当前 RPM/DEB 的兼容性问题的常规解决方法。
**常见问题列表**
可以手动强制不进行 RPM/DEB 的依赖性关系检查吗?
RPM
可以。使用 --nodeps 辅助参数,则安装过程将不理会依赖性关系限制,强制安装目标包,如:
# rpm -i --nodeps package_a.rpm
DEB
可以。使用— force-depends 辅助参数,如:
$ sudo dpkg -i --force-depends package_a.deb
RPM 中的 --force 是干什么用的?
RPM 中的默认安装规则是不允许同一个包多次安装的,也不允许降级安装。使用 --force 辅助参数将不考虑以上因素,强制安装 RPM 包。但是,--force 无法强制安装一个不满足系统依赖性关系的包 ( 此时需要用到 --nodeps 参数 ) 。使用方法如:
# rpm -i --force package_a.rpm
RPM/DPKG 支持远程安装吗?
RPM
是。 RPM 支持 HTTP 和 FTP 协议,如:
# rpm -Uvh ftp://user:pass@ftpserver/package.rpm
DPKG
最新的基于 DEB 包的系统中,远程安装通常被更先进的 APT 代替。
可以从 RPM/DPKG 中抽取个别文件吗?
RPM
是。可以使用 rpm2cpio 工具来提取文件:http://www.rpm.org/max-rpm/s1-rpm-miscellania-rpm2cpio.html
DPKG
是。可以使用 dpkg-deb 工具来提取文件:
$ dpkg-deb --extract ibm_lotus_notes-8.5.i586.deb $dir( 目标目录 )
RPM/DPKG 提供包安装成功的验证机制吗?
RPM
是。可以使用 -V 参数进行验证。
DPKG
Debian 系统通常使用 debsums 工具参数进行验证。
RPM/DPKG 提供包安全签名吗?
RPM
是。可以使用 --import 导入与软件同时发布的 GPG KEY, 接着使用 -K 命令来验证包的安全性,如:
# rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 返回信息 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK
DPKG
DPKG 不提供原生的 Key 验证机制。可以使用 debsigs 和 debsigs-verify,详情请见:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html
如果 RPM 的底层数据库损坏,RPM 还能使用吗?
RPM
如果底层数据库损坏,RPM 将无法正常使用。此时最常用的解决方法是重构数据库:
# rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb
RPM
DPKG 本身不提供底层数据库恢复机制。它的数据库以文件形式保存在 /var/lib/dpkg 目录中。及时地备份这个目录是最好的预防数据库损坏措施。
可以查询系统中已经安装的某个文件属于哪个 RPM 包吗?
RPM
可以。使用 -qf 参数 , 如在安装了 Notes8.5 的系统中:
# rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920
DPKG
可以。使用— search 参数 , 如在安装了 Notes8.5 的系统中:
$ dpkg --search /opt/ibm/lotus/notes/notes 返回信息 : ibm-lotus-notes: /opt/ibm/lotus/notes/notes
可以查询 RPM 包的安装时间吗?
RPM
可以。可使用 --last 查询。如:
rpm -qa --last 返回信息 : 系统中所有软件的安装时间。
DPKG
DPKG 不提供直接的查询参数,但是可以用过查询 dpkg 的日志文件实现这个功能。如:
cat /var/log/dpkg.log | grep "\ install\ "
***************************结束分割线******************************
seq命令详解
seq: squeue 是一个序列的缩写,主要用来输出序列化的东西
seq常见命令参数
用法:seq [选项]... 尾数
或:seq [选项]... 首数 尾数
或:seq [选项]... 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。增量可以是-1
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同【自动补位】
--help 显示此帮助信息并退出
--version 显示版本信息并退出
常用的命令展示
1.倒数五秒显示
#!/bin/bash
echo "准备倒数5秒:"
for i in $(seq 5 -1 1)
do
echo -en "$i";sleep 1
done
echo -e "开始"
快速删除目录的几种方法
快速删除目录的几种方法