tcpdump在Ubuntu和CentOS下的安装和使用

tcpdump安装

在ubuntu下安装

sudo apt-get install tcpdump

在CentOS下安装

yum install tcpdump

tcpdump使用

安装好以后,运行tcpdump -help查看帮助如下所示:

未分类

1、监视指定网络接口的数据包(本机网卡名为ens33)

tcpdump -i ens33

2、监视指定主机的数据包,例如:抓取所有192.168.1.11主机发送和接收的数据包

tcpdump -i ens33 host 192.168.1.11

3、抓取192.168.1.11主机发送的数据包

tcpdump -i ens33 src host 192.168.1.11

4、抓取192.168.1.11主机接收到的数据包

tcpdump -i ens33 dst 192.168.1.11

5、抓取指定端口的数据包:

tcpdump -i ens33 udp port 12345

6、抓取回环网口的包:

tcpdump -i ens33 -i lo

Ubuntu中apt命令自动补全设置

在Ubuntu中安装软件和包,apt命令是必不可少的,虽然类似于Python的pip一样十分方便,但安装的包名却是一个比较烦人的问题。 需要安装的报名太长、单词记不住、版本号不对(对于有些依赖库而言,要求是版本号是完全对应的,低的高的都不行,不适用向下兼容原则)等等问题,所以如果可以有包名的自动补全功能就好了。 而事实上也是有的,但似乎默认并没有开启。因为在新安装的系统上试了一下,是不会自动补全的。 所以下面记录一下设置步骤。

1. 安装bash-completion

在终端输入命令

apt-get install bash-completion

一般情况下这个包应该系统都自动装好了,如果没有就装一下。

2.修改配置文件

在终端中输入以下命令

gedit /etc/bash.bashrc

这样就能用Gedit打开配置文件,找到被注释掉的蓝色的一段代码,如下所示。

未分类

把这段代码取消注释,并保存,如下所示,即可使自动补全功能生效了。

未分类

3.测试

之前一直需要安装一个libcholmod的库,但是按照书上给的libcholmod-dev提示找不到包,在网上找了找,说是版本不对。 有说装libcholmod2.1.2成功的,有说装libcholmod3.0.14成功的,可惜的是在我电脑上两个都不行。 而且之前没有设置apt的自动补全,所以完全不知道我的电脑应该装哪个版本。但在设置了自动补全后终于可以了,原来我的电脑对应的版本是3.0.6,如下所示。

未分类

这样配置apt自动补全就大功告成了,成功解决了一个我的问题。

4. 题外话

关于apt自动补全,我看网上也有博客说修改~/.bashrc文件的,如这篇和这篇博客,但经过我的测试,在我的电脑上无效,而且设置完后还报了.:command not found的错误。 而且我看了~/.bashrc的文件内容如下。

未分类

上面博客中说的添加的内容其实就是这里被注释掉的蓝色部分。而稍微阅读一下注释就会发现,人家说,你不需要在这里开启这段代码,如果它已经在/etc/bash.bashrc中开启了的话。 而我们上面其实是按照系统的提示,修改了/etc/bash.bashrc,所以就不需要再改这里了。 当然如果你按照我上面的方法修改不起作用,那你可以按照刚提到的这两篇博客的内容试试,应该也是可以的。

Ubuntu apt 本地源 离线安装

今天一台主机(Ubuntu 14.04)不知道为什么连不上外网了。只能和局域网内的其他主机相互ping通。但是上面一个正在跑的程序出了问题,需要安装两个额外的包,而且这两个包依赖还挺多的样子。这可急死我了。但是我另一台笔记本可以上外网。碰巧也安装的是Ubuntu14.04。我就想能不能把要安装的包先在笔记本上下载好,然后通过U盘转移到前面那台主机上,再在那台主机上通过本地包安装呢?通过网上一番搜索后,终于搞定了。现在总结一下步骤。

在能上网的笔记本上下载好需要的包

$ sudo rm -rf /var/cache/apt/archives/*  # 清空缓存目录,这一步也可以不做
$ sudo apt-get -d install <包名>

运行完该命令后,需要的包及依赖都会下载到 /var/cache/apt/archives。

复制到U盘中

将下载好的包( /var/cache/apt/archives目录下的所有文件)复制到U盘中,准备转移。如果你不想拷贝多余的包文件,你可以提前将 /var/cache/apt/archives 目录清空后再下载需要的包。

# 先在U盘中创建好一个目录debs
$ sudo cp -r /var/cache/apt/archives/* /U盘/路径/debs/

下面转到不能上网的主机上操作

在主机上创建包缓存目录

$ sudo mkdir /var/debs

将U盘中下载好的包文件全部复制到/var/debs目录下

$ sudo cp -r /U盘/路径/debs/* /var/debs/

生成包索引文件

$ sudo touch /var/debs/Packages.gz
$ sudo chmod -R 777 /var/debs/  # 这一步是为了获得文件的可写可读可执行权限,要不然后面会失败
$ sudo dpkg-scanpackages debs  /dev/null  | gzip > debs/Packages.gz  # 创建索引

在 /etc/apt/sources.list 中添加本地目录

$ sudo gedit /etc/apt/sources.list

将sources.list 原来的内容都注释掉。在最后添加

$ deb file:/var debs/

注意上面的 /var 和 debs/ 之间的空格,以及 “/”。不要写错/var/debs/路径了。

更新索引

$ sudo apt-get update

结束

现在可以安装包了。运行sudo apt-get install <包名> 就会像以前一样安装好了指定的包了。

Ubuntu 防火墙 ufw

UbuntuHelp:UFW :http://wiki.ubuntu.org.cn/UbuntuHelp:UFW

Ufw使用指南:http://wiki.ubuntu.org.cn/Ufw使用指南

ubuntu ufw防火墙:

http://wap.dongnanshan.com/fn.php?s=ubuntu%20ufw%E9%98%B2%E7%81%AB%E5%A2%99

UFW要领:通用防火墙规则和命令:https://www.howtoing.com/ufw-essentials-common-firewall-rules-and-commands/

Linux 防火墙:https://blog.csdn.net/freeking101/article/details/70239637

自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具。这个工具可以对出入服务的网络数据进行分割、过滤、转发等等细微的控制,进而实现诸如防火墙、NAT等功能。

一般来说, 我们会使用名气比较的大iptables等程序对这个防火墙的规则进行管理。iptables可以灵活的定义防火墙规则, 功能非常强大。但是由此产生的副作用便是配置过于复杂。一向以简单易用著称Ubuntu在它的发行版中,附带了一个相对iptables简单很多的防火墙配置工具:ufw。

ufw防火墙 即uncomplicated firewall(不复杂的防火墙)是iptables的接口,旨在简化配置防火墙的过程。 繁琐部分的设置还是需要去到iptables。虽然iptables是一个坚实和灵活的工具,但是初学者可能很难学会如何使用它来正确配置防火墙。如果您希望开始保护网络安全,并且不确定使用哪种工具,UFW可能是您的最佳选择。

Ubuntu下使用UFW配置防火墙(简化iptables的操作)

UFW全称为Uncomplicated Firewall,是Ubuntu系统上配置iptables防火墙的工具,即ufw是一个iptables的前端应用程序。UFW提供一个非常友好的命令用于创建基于IPV4,IPV6的防火墙规则。但是,UFW是没有界面的,就是用命令的那一种,所以,操作起来就不是那么的方便,有人帮它写了个界面,名字就叫做“Gufw”。
由于Ubuntu下的iptables操作起来比较复杂,依赖关系比较多,所以使用UFW时可以简化很多操作。当然Debian同样适用。
无论是桌面版还是服务器版, UFW的命令行用法是一样的。

1. 安装

Ubuntu的防火墙默认已安装,若无意中卸载,执行以下命令安装

sudo apt-get install ufw

查看防火墙状态

sudo ufw status
sudo ufw status numbered  # 按编号显示

防火墙版本

sudo ufw version

2. 启动、禁用、重置UFW

sudo ufw enable    # 设置开机启动
sudo ufw deny       # 关闭所有外部对本机的访问,但本机访问外部正常。    
sudo ufw reset       # 重置防火墙

3.开启/禁用

用法:sudo ufw allow|deny [service]

高级规则:

除了基于端口的允许或阻止,UFW 还允许您按照 IP 地址、子网和 IP 地址/子网/端口的组合来允许/阻止。

ufw deny from {ip-address-here} to any port {port-number-here}
sudo ufw deny from 202.54.1.5 to any port 80    # 阻断或拒绝IP地址202.54.1.5访问80端口的请求

拦截特定IP、端口以及协议

sudo ufw deny proto {tcp|udp} from {ip-address-here} to any port {port-number-here}


例如,阻断IP地址202.54.1.1访问tcp 22端口(FTP协议),可以输入:

sudo ufw deny proto tcp from 202.54.1.1 to any port 22
sudo ufw status numbered



UFW拦截子网 语法是类似的:

sudo ufw deny proto tcp from sub/net to any port 22
sudo ufw deny proto tcp from 202.54.1.0/24 to any port 22


使用示例: 一般用户,只需如下设置:

sudo apt-get install ufw
sudo ufw enable
sudo default deny


以上三条命令已经足够安全了,如果你需要开放某些服务,再使用sudo ufw allow开启。

sudo ufw deny from 192.168.1.5 to any # 拦截或拒绝来自192.168.1.5的所有数据包
sudo ufw allow from 123.45.67.89 # 允许从一个 IP 地址连接:
sudo ufw allow from 123.45.67.89/24 # 允许特定子网的连接:


允许特定 IP/端口的组合:

sudo ufw allow from 123.45.67.89 to any port 22 proto tcp


proto tcp 可以删除或者根据你的需求改成 proto udp,所有例子的 allow 都可以根据需要变成 deny。 sudo ufw allow www 或 sudo ufw allow 80/tcp sudo ufw allow ftp 或 sudo ufw allow 21/tcp sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口 sudo ufw allow 53 # 允许外部访问53端口(tcp/udp) sudo ufw allow 80 # 允许外部访问80端口 等价 sudo ufw allow http sudo ufw delete allow 80 # 禁止外部访问80 端口 sudo ufw allow from 192.168.1.1 # 允许此IP访问所有的本机端口 sudo ufw allow from 111.111.111.111 to any port 22 # 允许特定IP特定端口的连接 sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 sudo ufw deny smtp # 禁止外部访问smtp服务 sudo ufw allow smtp  允许所有的外部IP访问本机的25/tcp (smtp)端口 sudo ufw delete allow smtp # 删除上面建立的某条规则 sudo ufw deny http # 拒绝http连接 sudo ufw deny from 111.111.111.111 # 拒绝特定IP连接

允许特定端口范围连接

sudo ufw allow 1000:2000/tcp
sudo ufw allow 2001:3000/udp

# 拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22

# 可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16

这样设置已经很安全,如果有特殊需要,可以使用sudo ufw allow开启相应服务

设置默认策略(默认策略即为拒绝所有传入连接,允许所有传出链接)

sudo ufw default deny incoming
sudo ufw default allow outgoing

允许SSH连接(重要!)否则你将无法连接云服务器…

# 以下两条命令效果是一样的
sudo ufw allow ssh
sudo ufw allow 22

4. 删除规则

有两种删除防火墙规则的方法,最直接的方法是:

sudo ufw delete allow ssh

如上,我们在 delete 指令后面输入要删除的规则即可。还可以这样:

sudo ufw delete allow 80/tcp

sudo ufw delete allow 1000:2000/tcp

如果规则又长又复杂,问题就比较棘手了。这里有一个更简单的方法,需要分成两个步骤:

sudo ufw status numbered    # 按规则来编号防火墙规则。命令会将所有防火墙规则以数字列表形式列出来
# 请将 [number] 替换成规则列表对应的数字序号。
sudo ufw delete 1           # 按规则编号删除防火墙规则 sudo ufw delete [number]
sudo ufw delete 4           # 删除编号为4的规则

5. 开启/关闭防火墙 (默认设置是’disable’)

sudo ufw enable|disable 

6. 编辑 UFW 的配置文件

虽然可以通过命令行添加简单的规则,但仍有可能需要添加或删除更高级或特定的规则。 在运行通过终端输入的规则之前,UFW 将运行一个文件 before.rules,它允许回环接口、ping 和 DHCP 等服务。要添加或改变这些规则,编辑 /etc/ufw/before.rules 这个文件。 同一目录中的 before6.rules 文件用于 IPv6 。

还存在一个 after.rule 和 after6.rule 文件,用于添加在 UFW 运行你通过命令行输入的规则之后需要添加的任何规则。
还有一个配置文件位于 /etc/default/ufw。 从此处可以禁用或启用 IPv6,可以设置默认规则,并可以设置 UFW 以管理内置防火墙链。

启用 IPv6 支持

如果你的云服务器启用了 IPv6,则需要配置 UFW 以启用支持,编辑 UFW 配置文件:

sudo nano /etc/default/ufw

在配置文件中将 IPV6 设置为 yes :

IPV6=yes

保存并退出编辑器,重启 UFW:

sudo ufw disable
sudo ufw enable

这样,UFW 就同时支持 IPv4 和 IPv6 两种协议了。

更详细的说明

[]是代表可选内容。可能需要root权限,如无法运行,请使用 sudo ufw……的命令结构。“”中的内容不能照抄,要按需要更改。
ufw [--dry-run] enable|disable|reload
命令[–试运行]激活|关闭|重新载入
ufw [--dry-run] default allow|deny|reject [incoming|outgoing]
命令[–试运行]默认 允许|阻止|拒绝 [访问本机的规则|向外访问的规则]
注:reject让访问者知道数据被拒绝(回馈拒绝信息)。deny则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。
ufw [--dry-run] logging on|off|LEVEL
命令[–试运行]日志 开启|关闭|“级别”
ufw [--dry-run] reset
命令[–试运行]复位
ufw [--dry-run] status [verbose|numbered]
命令[–试运行]状态 [详细|被编号的规则]
ufw [--dry-run] show REPORT
命令[–试运行]显示 “报告类型”
ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit  [in|out][log|log-all] PORT[/protocol]
命令[–试运行][删除] [插到“x号规则”之前] 允许|阻止|拒绝|限制 [进|出] [记录新连接|记录所有数据包] “端口” [/“协议”]
ufw  [--dry-run]  [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
命令 [–试运行][删除][插到x号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]]
ufw [--dry-run] delete NUM
命令[–试运行] 删除 “第X号规则”
ufw [--dry-run] app list|info|default|update
命令 [–试运行] 程序 清单|信息|默认|更新

参数
–version
显示程序版本号
-h , –help
显示帮助信息
–dry-run
不实际运行,只是把涉及的更改显示出来。
enable
激活防火墙,开机时自动启动
disable
关闭防火墙,开机时不启动
reload
重新载入防火墙
default allow|deny|reject 方向
方向是指:向内(incoming)|向外(outgoing)。如果更改了默认策略,一些已经存在的规则可能需要手动修改。更多内容看“规则示例”一节。
logging on|off|“级别”
切换日志状态。日志记录包使用的是系统日志。“级别”有好几个,默认是低级(low)。详细内容看“日志”一节。
reset [--force]
关闭防火墙,并复位至初始安装状态。如果使用–force选项,则忽略确认提示。
status
显示防火墙的状态和已经设定的规则。使用status verbose显示更详细的信息。‘anywhere’与‘any’、‘0.0.0.0/0’一个意思。
show “报告类型”
显示防火墙运行信息。详细内容看“报告类型”
limit “规则”
此命令目前只能用于IPv4。还不支持IPv6.

规则示例
    * 规则可以简写也可以完整表达。简写的规则只能指定端口和(或)协议被允许或阻止。默认是访问本机的规则(incoming)。例如:
ufw allow 53
允许其它机子访问本机53端口,协议包含tcp和udp。
    * 如果要控制协议,只要加入“/协议”在端口后面就行了。例如:
ufw allow 25/tcp
允许其它机子使用tcp协议访问25端口。
    * UFW也可以检查 /etc/services文件,明白服务的名字及对应的端口和协议。我们使用服务的名称即可。
ufw allow smtp
    * UFW同时支持出入口过滤。用户可以使用in或out来指定向内还是向外。如果未指定,默认是in。例如:
ufw allow in http
ufw reject out smtp
ufw deny out to 192.168.1.1
阻止向192.168.1.1发送信息
    * 用户也可使用完整的规则来指定来源与目的地,还有端口。书写规则基于OpenBSD PF。举例:
ufw deny proto tcp to any port 80
阻止本机用tcp协议在80端口发数据
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25
This will deny all traffic from the RFC1918 Class A network to tcp port 25 with the address 192.168.0.1.(这条命令目前无法翻译 from 和 to的关系,希望后来者更改)
    * ufw也可以使用IPv6协议。但要事先在/etc/default/ufw 中设定IPv6为启动状态。举例:
ufw deny proto tcp from 2001:db8::/32 to any port 25
阻止IPv6为2001:db8::/32类型的地址,连接本机25端口
    * ufw可以连续例举端口号。端口号间必须使用逗号或分号,不能使用空格。“输入端口号”字符数最多不能超过15过(8080:8090算两个字符)。比如允许80,443,8080~8090这几个端口接受tcp传入连接。
ufw allow proto tcp from any to any port 80,443,8080:8090
此例,“输入端口号”字符数为4个。
    * ufw可以对连接数率进行限制,以防范暴力登录攻击。如果同一个IP地址在30秒之内进行了6次及6次以上的连接,ufw将阻止(deny)该连接。可以查看更多信息。
ufw limit ssh/tcp
    * 当然有些时候我们想让访问者知道他的访问被拒绝了,而不是保持沉默让他不知道哪出了问题。就使用reject代替deny
ufw reject auth
    * 默认情况下ufw的所有规则针对所有网络设备(比如网卡1,网卡2,无线网卡1,虚拟网卡1……)。但是我们可以特别指定,某规则在什么网络设备上生效。注意只能使用设备号,不能用别名。比如有线网卡:eth0(你可以使用ifconfig命令查看你现有的网络设备)
ufw allow in on eth0 to any port 80 proto tcp
    * 要删除规则,只要在命令中加入delete就行了。比如:
ufw deny 80/tcp
要删除条命令建立的规则,使用:
ufw delete deny 80/tcp
当然,也可以使用规则号来进行删除。比如要第3号规则
ufw delete 3
注意,如果你开启IPv6功能。要同时删除IPv4和IPv6的规则(比如:ufw allow 22/tcp),如果用规则号的方式删除可能只删除了一个。
    * 显示第几号规则,可以使用这样的命令
ufw status numbered(也就是规则号)
    * 日志功能。如果使用log将记录所有符合规则的新连接,如果使用log-all将记录所有符合规则的数据包。例如,要允许并记录shh(22/tcp)上的新连接:
ufw allow log 22/tcp
更多内容看“日志”一节
特殊例子: 允许RFC1918网络结构访问本机:
ufw allow from 10.0.0.0/8
ufw allow from 172.16.0.0/12
ufw allow from 192.168.0.0/16
最后一条经过测试,范围大约是192.168.0.0~192.168.225.225。当然,涉及很多专业知识,希望有人补充。
远程管理
此章节还未被编辑
应用程序集成管理
* ufw能从 /etc/ufw/applications.d. 中读取应用程序清单。你可以使用命令查看:
ufw app list
 * 大家可以使用应用程序名字来增加规则。比如
ufw allow <程序名字>
ufw allow CUPS
ufw allow from 192.168.0.0/16 to any app <程序名字>
注意,端口号已经被程序名所对应的策略所包括,不要再重新列举端口号。
* 查看程序名所对应的策略内容,命令:
ufw app into <程序名字>
注意:程序名字是清单上有的才行。程序名字改用用all,可以看全部策略。
* 如果你编辑或者增加了程序清单,你可使用此命令更新防火墙:
ufw app update <程序名字>
程序名字改用用all,则更新整个清单。
* 更新清单同时增加规则可以使用如下命令:
ufw app update –add-new <程序名字>
注意:update –add-new参数的行为由此命令配置:
ufw app default skip|allow|deny
默认是skip,也就是没有设定。
警告:如果程序规则设定为default allow ,将会引起很大的风险。请三思而后行!
日志
ufw支持许多日志级别。默认是低级(low),用户也可以自己指定:
ufw logging on|off|low|medium|high|full
    * off 就是关闭日志
    * low 记录与默认策略冲突的封装数据包(记录速度被限制)。记录与规则符合的数据包(没有要求关闭记录的)
    * medium 记录与默认策略冲突的数据包(包括被规则允许的)、无效数据包、所有新连接。记录速度被限制。
    * high 同medium,只是没有记录速度限制。附加记录所有数据包(有记录速度限制)。
    * full 与high等同,只是取消记录限制。
medium级别及更上级会记录许多内容,有可能短时间内撑爆你的硬盘。特别是用在服务器一类的机器上。

ubuntu Docker 环境下设置crontab

设置crontab 第一个问题就是时区不对的问题,默认系统时区为UTC,时间不同步,设置定时任务时会有偏差。因此,先更改时区

解决办法:在Dockerfile中加入即可

RUN echo”Asia/Shanghai” > /etc/timezone 
RUN dpkg-reconfigure -f noninteractive tzdata

容器启动之后,设置了crontab,结果一直不生效,后发现crontab 服务没有启动,于是网上各种搜索,发现了如下命令

ubuntu下定时执行工具cron开启关闭重启
配置文件一般为/etc/init.d/cron

启动:sudo /etc/init.d/cron start
关闭:sudo /etc/init.d/cron stop
重启:sudo /etc/init.d/cron restart
重新载入配置:sudo /etc/init.d/cron reload

运行遇到了问题

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service cron start

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start cron

尝试了提到的命令start cron /status cron,均报错。后搜索发现启动其实非常简单直接执行cron即可!

使用简单zzupdate命令轻松升级Ubuntu到较新版本

zzupdate是一个开源的命令行实用程序,通过将几个更新命令组合到一个命令中,使得将Ubuntu桌面版和服务器版升级到更新版本的任务变得容易一些。

将Ubuntu系统升级到更新的版本并不是一项艰巨的任务。 无论是使用GUI还是使用几个命令,都可以轻松地将系统升级到最新版本。

另一方面,由Gianluigi’Zane’Zanettini编写的zzupdate只需一个命令即可处理Ubuntu系统的清理,更新,自动删除,版本升级和作曲者自我更新。

它清理本地缓存,更新可用的软件包信息,然后执行分发升级。 在下一步中,它会更新Composer并删除未使用的软件包。

脚本必须以root用户身份运行。

未分类

安装zzupdate将Ubuntu升级到更新的版本

要安装zzupdate,请在终端中执行以下命令。

curl -s https://raw.githubusercontent.com/TurboLabIt/zzupdate/master/setup.sh | sudo sh

未分类

然后将提供的示例配置文件复制到zzupdate.conf并设置您的首选项。

sudo cp /usr/local/turbolab.it/zzupdate/zzupdate.default.conf /etc/turbolab.it/zzupdate.conf

未分类

一旦你拥有了所有的东西,只要使用下面的命令,它就会开始升级你的Ubuntu系统到一个更新的版本(如果有的话)。

sudo zzupdate

请注意,在正常版本的情况下,zzupdate会将系统升级到下一个可用版本。 但是,当您运行Ubuntu 16.04 LTS时,它将尝试仅搜索下一个长期支持版本,而不是可用的最新版本。

如果您想要移出LTS版本并升级到最新版本,您将需要更改一些选项。

对于Ubuntu桌面,打开“软件和更新”,在“更新”选项卡下,将新的Ubuntu版本的“有新版本时通知我”更改为“适用于任何新版本”。

未分类

对于Ubuntu服务器,编辑版本升级文件

vi /etc/update-manager/release-upgrades

Prompt=normal

未分类

配置zzupdate [可选]

zzupdate选项配置

REBOOT = 1
如果此值为1,升级后将执行系统重新启动。

REBOOT_TIMEOUT = 15
这会将重新启动超时设置为900秒,因为某些硬件比其他硬件重新启动需要更长的时间。

VERSION_UPGRADE = 1
如果升级可用,则执行版本升级。

VERSION_UPGRADE_SILENT = 0
版本进展自动发生。

COMPOSER_UPGRADE = 1
值“1”会自动升级作曲家。

SWITCH_PROMPT_TO_NORMAL = 0
此功能将Ubuntu版本更新为正常状态,即如果您运行了LTS发行版,zzupdate将不会将其升级到Ubuntu 17.10(如果其设置为0)。它将仅搜索LTS版本。相比之下,值1搜索最新版本是否运行LTS或正常版本。

一旦完成,你所要做的就是在控制台中运行一个完整的Ubuntu系统更新

sudo zzupdate

最后

尽管Ubuntu的升级过程本身就很简单,但是zzupdate将它简化为一个命令。没有必要的编码知识,这个过程是完整的配置文件驱动。我个人发现是一个很好的工具来更新几个Ubuntu系统,而不需要分别处理不同的事情。

Ubuntu 下搭建微信小程序开发环境

ubuntu 下首次搭建微信小程序开发环境

首先安装 wine,参考 https://wiki.winehq.org/Ubuntu

安装微信小程序开发工具

1.拉取小程序工具代码:git clone [email protected]:cytle/wechat_web_devtools.git
2.进入小程序工具目录:cd wechat_web_devtools
3.安装 wxdt:./bin/wxdt install
4.启动:./bin/wxdt

升级小程序开发工具

更新 github 仓库即可

git pull origin

但是更新过程异常缓慢,因为源码库太大了,属于滥用了。

已测试环境

Ubuntu 18.04
Ubuntu 16.10

解决Ubuntu 16.04更新系统内核出错后的问题

大伟哥的工作电脑使用Ubuntu 16.04系统,已经很久没有更新了,今天正好有空,就运行了sudo apt update, sudo apt upgrade让它在后台自已更新去了。

因为要更新的软件比较多,需要花费挺长时间,大伟哥也没怎么在意,只是在运行结束后看了一下报错,上面显示因为boot分区空间不够,升级linux内核的时候出错了:

在处理时有错误发生:

linux-image-extra-4.4.0-97-generic
linux-image-generic
linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

之前也发生了同样的问题,系统提示可以运行sudo apt-get autoremove清除不需要的依赖的,而多次升级后/boot分区里已经有了多个之前版本的Linux内核,因此大伟哥决定先运行一下这个命令,看能不能自动给/boot分区清理出一部分空间来,这样也省得我再查文档手动清除旧的内核文件了。实验证明这个命令真的有效果,/boot分区清理出了100多M的空间,应该也够安装新的内核了。

再次执行sudo apt update/sudo apt upgrade, 系统并没有接着安装上次没有完成安装的内核,而是报错如下:

davidbro@Workstation:~$ sudo apt upgrade

正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
正在计算更新... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 linux-image-extra-4.4.0-96-generic : 依赖: linux-image-4.4.0-96-generic 但是它将不会被安装
E: 破损的软件包

试一下sudo apt install命令看看不能能安装:

david@KingChef-Workstation:~$ sudo apt-get install

正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包将被【卸载】:
  linux-image-extra-4.4.0-96-generic
升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 0 个软件包未被升级。
有 5 个软件包没有被完全安装或卸载。
解压缩后将会空出 153 MB 的空间。
您希望继续执行吗? [Y/n] Y
(正在读取数据库 ... 系统当前共安装有 356556 个文件和目录。)
正在卸载 linux-image-extra-4.4.0-96-generic (4.4.0-96.119) ...
depmod: FATAL: could not load /boot/System.map-4.4.0-96-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
Error! Your kernel headers for kernel 4.4.0-96-generic cannot be found.
Please install the linux-headers-4.4.0-96-generic package,
or use the --kernelsourcedir option to tell DKMS where it's located
Error! Your kernel headers for kernel 4.4.0-96-generic cannot be found.
Please install the linux-headers-4.4.0-96-generic package,
or use the --kernelsourcedir option to tell DKMS where it's located
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-96-generic
WARNING: missing /lib/modules/4.4.0-96-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/4.4.0-96-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_pkdOqR/lib/modules/4.4.0-96-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_pkdOqR/lib/modules/4.4.0-96-generic/modules.builtin: No such file or directory
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.4.0-96-generic /boot/vmlinuz-4.4.0-96-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.0-130-generic
Found initrd image: /boot/initrd.img-4.4.0-130-generic
Found linux image: /boot/vmlinuz-4.4.0-98-generic
Found initrd image: /boot/initrd.img-4.4.0-98-generic
Found linux image: /boot/vmlinuz-3.5.0-54-generic
Found initrd image: /boot/initrd.img-3.5.0-54-generic
Found linux image: /boot/vmlinuz-3.5.0-23-generic
Found initrd image: /boot/initrd.img-3.5.0-23-generic
done
正在设置 initramfs-tools (0.122ubuntu8.11) ...
update-initramfs: deferring update (trigger activated)
正在设置 linux-image-extra-4.4.0-130-generic (4.4.0-130.156) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/i915-4.6.3-4.4.0-dkms.0.crash'
Error! Bad return status for module build on kernel: 4.4.0-130-generic (x86_64)
Consult /var/lib/dkms/i915-4.6.3-4.4.0/1/build/make.log for more information.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-130-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.4.0-130-generic /boot/vmlinuz-4.4.0-130-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.0-130-generic
Found initrd image: /boot/initrd.img-4.4.0-130-generic
Found linux image: /boot/vmlinuz-4.4.0-98-generic
Found initrd image: /boot/initrd.img-4.4.0-98-generic
Found linux image: /boot/vmlinuz-3.5.0-54-generic
Found initrd image: /boot/initrd.img-3.5.0-54-generic
Found linux image: /boot/vmlinuz-3.5.0-23-generic
Found initrd image: /boot/initrd.img-3.5.0-23-generic
done
正在设置 linux-image-generic (4.4.0.130.136) ...
正在设置 linux-generic (4.4.0.130.136) ...
正在处理用于 initramfs-tools (0.122ubuntu8.11) 的触发器 ...
update-initramfs: Generating /boot/initrd.img-4.4.0-130-generic

这样最新的内核版本4.4.0.130.136就安装好了。其实我觉得这样用autoremove腾出分区空间还是有点风险的,有可能会误删掉其他有用的软件。

Ubuntu apt 安装redis 修改redis配置

apt安装redis

sudo apt update
sudo apt install redis-server 

安装完成默认是启动了redis服务

  • 关闭
sudo service redis-server stop
  • 开启服务
sudo servcie redis-server start
  • 重启
sudo service redis-server restart

redis简单使用

redis-cli

修改redis配置 远程访问

sudo vim /etc/redis/redic.conf

注释掉本机ip

# bind 127.0.0.1 
 protected-mode no #将yes修改成no

重启一下服务: sudo service redis-server restart 就可以了。
就可以远程 RedisDesktop Manager 可视化客户端连接了。

在Ubuntu 18.04上使用apt安装Java

安装默认的JRE/JDK

安装Java的最简单方法是使用与Ubuntu一起打包的版本。默认情况下,Ubuntu 18.04包含Open JDK,它是JRE和JDK的开源版本。

该软件包将安装OpenJDK 10或11。

  • 在现在,这将安装OpenJDK 10。
  • 在2018年9月以后,这将安装OpenJDK 11。

要安装此版本,请先更新软件包索引:

sudo apt update

接下来,检查 Java 是否已经安装:

java -version

如果Java当前未安装,你将看到以下输出:

Command 'java' not found, but can be installed with:

apt install default-jre
apt install openjdk-11-jre-headless
apt install openjdk-8-jre-headless
apt install openjdk-9-jre-headless

执行以下命令来安装OpenJDK:

sudo apt install default-jre

该命令将安装Java运行时环境(JRE)。这将允许你运行几乎所有的Java软件。

验证安装:

java -version

你将看到以下输出:

openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

除了JRE之外,你可能还需要Java开发工具包(JDK)才能编译和运行一些特定的基于Java的软件。要安装JDK,请执行以下命令,该命令也将安装JRE:

sudo apt install default-jdk

通过检查javac Java编译器的版本来验证是否安装了JDK :

javac -version

你将看到以下输出:

javac 10.0.1

接下来,我们来看看指定我们要安装的OpenJDK版本。

安装OpenJDK的特定版本

虽然你可以安装默认的OpenJDK软件包,但你也可以安装不同版本的
OpenJDK。

OpenJDK 8

Java 8是目前的长期支持版本,虽然公共维护在2019年1月结束,但仍然得到广泛支持。要安装OpenJDK 8,请执行以下命令:

sudo apt install openjdk-8-jdk

验证安装:

java -version

你会看到这样的输出:

openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)

也可以只安装JRE,你可以通过执行sudo apt install openjdk-8-jre来安装它。

OpenJDK 10/11

Ubuntu的存储库包含一个安装Java 10或11的软件包。在2018年9月之前,该软件包将安装OpenJDK 10.一旦Java 11发布,该软件包将安装Java 11。

要安装OpenJDK 11,请执行以下命令:

sudo apt install openjdk-11-jdk

要仅安装JRE,请使用以下命令:

sudo apt install openjdk-11-jre

安装Oracle JDK

如果你想安装由Oracle发布的正式版本Oracle JDK,则需要为要使用的版本添加新的软件包存储库。

要安装作为最新LTS版本的Java 8,请首先添加其软件包存储库:

sudo add-apt-repository ppa:webupd8team/java

当你添加存储库时,你会看到如下消息:

 Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Jav
a files in this PPA.

Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracl
e-java-7-and-6-installers-no.html

Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/j
dk9-downloads-3848520.html

The PPA supports Ubuntu 18.04, 17.10, 16.04, 14.04 and 12.04.

More info (and Ubuntu installation instructions):
- for Oracle Java 8: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Debian installation instructions:
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html

For Oracle Java 10, see a different PPA: https://www.linuxuprising.com/2018/04/install-oracle-java-10-in-ubuntu-or.html

More info: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Press [ENTER] to continue or Ctrl-c to cancel adding it.

按ENTER继续。然后更新你的软件包列表

sudo apt update

包列表更新后,安装Oracle Java 8:

sudo apt install oracle-java8-installer

你的系统将从Oracle下载JDK并要求你接受许可协议。接受协议并安装JDK。

管理Java版本

你可以在一台服务器上安装多个Java。你可以使用update-alternatives命令配置哪个版本是命令行上使用的默认版本。

sudo update-alternatives --config java

如果你已经在本教程中安装了所有版本的Java,则输出结果如下所示:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  3            /usr/lib/jvm/java-8-oracle/jre/bin/java          1081      manual mode

选择与 Java 版本关联的数字以将其用作默认值,或按下ENTER以保留当前设置。

你可以为其他Java命令执行此操作,如compiler(javac):

sudo update-alternatives --config javac

可以运行该命令的其他命令包括但不限于:keytool,javadoc和jarsigner。

设置JAVA_HOME环境变量
许多使用Java编写的程序使用JAVA_HOME环境变量来确定Java的安装位置。

要设置此环境变量,请先确定Java的安装位置。使用update-alternatives命令:

sudo update-alternatives --config java

该命令显示Java的每个安装版本及其安装路径:

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  3            /usr/lib/jvm/java-8-oracle/jre/bin/java          1081      manual mode

Press <enter> to keep the current choice[*], or type selection number:

在这种情况下,安装路径如下所示:

OpenJDK 11位于 /usr/lib/jvm/java-11-openjdk-amd64/bin/java.
OpenJDK 8位于/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java。
Oracle Java 8位于/usr/lib/jvm/java-8-oracle/jre/bin/java。

复制首选安装的路径。然后打开/etc/environment使用nano或你最喜爱的文本编辑器:

sudo nano /etc/environment

在该文件的末尾,添加以下行,确保使用自己的复制路径替换突出显示的路径:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"

修改此文件将为JAVA_HOME系统上的所有用户设置路径。

保存文件并退出编辑器。

现在重新加载此文件以将更改应用于当前会话:

source /etc/environment

验证是否设置了环境变量:

echo $JAVA_HOME

你会看到你刚刚设置的路径:

/usr/lib/jvm/java-11-openjdk-amd64/bin/java

其他用户需要执行该命令source /etc/environment或注销并重新登录才能应用此设置。