APUE系列·Mac下环境配置

心中的执念太多、乘着年轻,我想去一一实现。也许不为目的,就是为了实现当初给自己吹的牛逼。优秀的人那么多,为什么我不是其中一个?付出完全匹配不上野心,可否知道该如何去做?自律是一件可怕的事,因为那意味着战胜了自己的惰性。看见一个榜样、我觉得你将是我追逐的目标。—–开篇

前言

开始学习《UNIX环境高级编程》。按照之前对这本书的理解,这本书是一个介绍UNIX内核API的书,在介绍UNIX API的同时,还会讲解与之相关的知识。这本书是一本算得上比较底层的书。之前学习过,但是止步于第四章,原因已经忘记了。不过之前是在Ubuntu下,现在是在Mac下,可能这也是我执着于Mac的一个原因,因为Mac的内核是UNIX系的,可以用来运行APUE中的代码。想想这真的算是一种执念,所以不能没有下文。

配置运行环境

网址:http://www.apuebook.com/apue3e.html 或者直接下载:http://www.apuebook.com/src.3e.tar.gz
下载好了之后,解压,进入解压后的目录,并将error.capue.h拷贝到系统的相应路径,如下:

1
2
cp include/apue.h /usr/local/include
cp lib/error.c /usr/local/include/

然后将拷贝过去的apue.h中的最后一个#endif前,将error.c使用#include进去,如下:
在这里插入图片描述

测试

在这里插入图片描述
编译并运行,结果如下:
在这里插入图片描述
或者直接在命令行中通过gcc命令来编译源代码,不报错基本上就是没问题,再运行试试即可。

CentOS7中Redis的安装与基本配置

安装

1
2
3
sudo yum install redis # 看yum源中是否有redis,我试的没有。不过应该是没有的,要从源码编译安装
sudo yum install epel-release # 下载fedora的epel库
sudo yum install redis # 再次安装

启动、关闭、连接

1
2
3
4
5
6
7
8
9
10
11
12
# 启动redis
service redis start
# 停止redis
service redis stop
# 查看redis运行状态
service redis status
# 查看redis进程
ps -ef | grep redis
# 进入本机redis
redis-cli
# 列出所有key
keys *

配置开机启动

1
2
# 设置redis为开机自动启动
chkconfig redis on

从防火墙开放端口

1
2
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent # 开放6379端口
sudo firewall-cmd --reload # 重新加载配置

开启远程访问

默认是只能在本机访问、所以通过网络访问需要额外的配置。配置文件的目录在:/etc/redis.conf。然后分别修改下面两处配置:

这里写图片描述

这里写图片描述

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
import redis.clients.jedis.Jedis;

public class TestRedis {
public static void main(String[] args) {
Jedis redis = new Jedis("192.168.102.6");
System.out.println(redis.ping());
}
}
/* 输出:
* PONG
*
* Process finished with exit code 0
* /

参考:
https://www.cnblogs.com/rslai/p/8249812.html
https://blog.csdn.net/xujian_2001/article/details/78927706

CentOS7中安装MySQL的详细过程以及配置

首先使用yum安装mariadb,它是MySQL的一个分支。

1
2
sudo yum install -y mariadb-server # 安装mariadb
rpm -qa | grep mariadb # 查看mariadb已安装的相关包

要连上数据库,就得先启动它。所以先尝试下面的启动命令。

1
2
3
4
systemctl start mariadb.service #启动服务
systemctl enable mariadb.service #设置开机启动
systemctl restart mariadb.service #重新启动
systemctl stop mariadb.service #停止MariaDB

启动后,在命令行中输入mysql -u root -proot密码默认为空,直接按回车即可。此时的密码为空,先设置一个密码,方法有多种,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.用root 进入mysql后
mysql>set password =password('你的密码');
# 或者
mysql>set password for root@localhost = password('hellomysql');
mysql>flush privileges;

2.使用GRANT语句
mysql>grant all on *.* to 'root'@'localhost' IDENTIFIED BY '你的密码'with grant option ;
mysql>flush privileges;

3.进入mysql库修改user表
mysql>use mysql;
mysql>update user set password=password('你的密码') where user='root';
mysql>flush privileges;

如果要从局域网中访问数据库,那么需要紧接着进行下面的配置:

1
2
3
4
5
6
# 选择mysql这个数据库
use mysql;
# 这一句执行完可能会报错,不用管它。
update user set host = '%' where user = 'root';
# 刷新配置
FLUSH PRIVILEGES;

接下来配置防火墙,将3306端口开放:

1
2
sudo firewall-cmd --add-port=3306/tcp --permanent # 开放3306端口
sudo firewall-cmd --reload # 重新读入配置

这个时候应该就可以通过局域网访问了。

如果忘记了root密码怎么办?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 首先,先关闭mysql原来的服务:
systemctl stop mariadb.service

# 开启mysql的安全模式
sudo mysqld_safe --skip-grant-tables&
# 进入mysql,直接修改表中root的密码
mysql>update user set password=password("hellomysql") where user='root';
mysql>flush privileges; # 刷新权限
mysql>exit;
# 然后关闭mysql的安全模式。这里只需要将之前开启的mysql进程关闭掉即可。
ps aux | grep mysqld # 列出mysql的进程信息
sudo kill -s 9 xxxx # 强制关闭进程

# 重新打开mysql服务
systemctl start mariadb.service

关于MySQL中的用户与host
这里写图片描述
仔细观察这个表,我们可以发现同一个root,可能对于不同的host。换个角度,也就是说,同一个用户的不同host,我们可以设置不同的权限以及密码。这是一个在解决了局域网中不能访问数据库这个问题后,本地访问数据库出现了不能访问的情况。不能用密码访问,但是可以无密码访问,无密码访问后,没有任何修改的权限。仔细看上表中的第5行,之前不是这样,上图是被我修改过之后,正常运行的截图。未修改之前,User那一栏是空的,Password也是空的,其它三项权限都是N,所以也不难理解为什么会出现上述的情况。后面手动修改成上面的数据后,变可以以“root+密码”进行访问,并且有相应的权限。

解决宿主机Mac不能访问虚拟机中CentOS的Tomcat服务器

情况描述

虚拟机中的系统为CentOS,充当服务器,但是开启Tomcat后,在宿主机Mac中无法访问,显示请求被拒接,如下:
这里写图片描述
除此之外,但是可以使用ssh,也可以ping通

分析

初步认为就是防火墙的问题,但是参考iptables的一些停用方法,直接显示没有iptables这个服务;后面想验证到底是宿主机还是虚拟机的问题,在5000端口,跑了一个简单的Flask服务器(在虚拟机中可通过本机ip地址+端口号进行访问),在宿主机中仍然无法访问,同时也通过其他的一些设备来访问相应的服务器,都无法访问,从这里看来,问题还是出在了虚拟机中;后面又在宿主机mac中开启了一个服务器,在虚拟机和其它局域网设备中都可以访问,因此断定还是虚拟机的问题。那么,没有安装iptables的CentOS,究竟是出了什么问题呢?

解决办法

因为我使用的是CentOS 7,使用iptables的版本是7以前的,CentOS 7使用firewall作为防火墙。

查看已经开放的端口:firewall-cmd --list-ports
开启端口:firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

1
2
3
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

重启、停止、禁用、查看防火墙

1
2
3
4
firewall-cmd --reload #重启firewall
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

因此结合上述命令来看,需要将8080端口添加到防火墙的开放端口中,然后重新载入防火墙的配置即可。如下:

1
2
3
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

最后面来一张成功访问的截图:
这里写图片描述

参考:https://www.cnblogs.com/oskyhg/p/7293915.html

CentOS服务器的简单配置

修改软件源

这里使用阿里云的源,阿里云的镜像地址为:https://opsx.alibaba.com/mirror
1、备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载新的CentOS-Base.repo/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、之后运行yum makecache生成缓存

安装以及配置JDK

1、卸载预装的OpenJDK

1
2
rpm -qa | grep jdk
sudo yum remove ****(软件包名,上条命令的输出结果)

2、从Oracle官网下载JDK

下载地址

3、下载完成后,进行安装

1
2
3
4
# 安装
sudo rpm -ivh jdk-8u181-linux-x64.rpm
# 验证安装是否成功
java -version

安装&配置Tomcat

安装操作如下

1
2
3
4
5
6
7
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.33/bin/apache-tomcat-8.5.33.tar.gz
tar -xzvf apache-tomcat-8.5.33.tar.gz
sudo vim /etc/profile
# 添加CATALINA_HOME到最后一行
# export CATALINA_HOME=/home/asahi/devtools/apache-tomcat-8.5.33
# 保存-退出
source /etc/profile

配置UTF-8字符集

因为默认不使用UTF-8,所以我们在web中使用中文时,会出现乱码。
所要修改文件的位置:conf/server.xml
文件需要修改的地方:
这里写图片描述

对颜色空间YUV、RGB的理解

接触到了一些yuv相关的信息。从Camera中拿到的每一帧,它的默认格式是NV21,它是一种yuv格式,然后转成OpenCV所需的BGR。Camera的每一帧的数据格式还可以指定成别的格式。因此开始关注了yuv这个名词,后面还有yuv的各种衍生,因此仔细地梳理一下自己的理解,以及与RGB对比。什么是
阅读更多

【工具使用】Linux实用命令之文件搜索

在工作中,经常遇到只知道一些模糊、大致的名字的一些类名或字段,从已知的一个目录下去搜索。然而有些命令实在是太好用了,好用到赞不绝口,也有一些命令,老是忘记。。。

find

最常用的场景是在framework目录下,有一些类,只知道类名,但是不知道它的具体的路径,总不可能去一个一个搜吧,还有一个可行的是去百度,但是这也不是很适合,因为还有更快的。

这个命令的功能实在是太强大了,所以按需而罗列吧。

  • 按文件名查找
    find dirname -name "filename"
    find dirname -name "*filename*" (使用正则表达式)
    find dirname -iname "filename" (忽略大小写)
    find dirname -name "filename 2> /dev/null" (忽略错误信息)

grep

这个也是一个强大的命令,配合正则表达式也是一个逆天的存在,但是一般情况下会我用到它的场景也就是两种:

  • 查找某个目录下所有的某列包含某字符串的文件
    grep -Rn "PatternSequence" . (找到并显示行号,不要太好用!)
  • 查找某文本中所有的含有某字符串的列
    这个不解释

MTK和Qualcomm刷机备忘录

这两个处理器厂商的刷机方式有一些不一样,然而很久不刷的我还是有些迷。还是总结一下,不要再用错误的方式,来刷机了~

MTK刷机

从服务器上面下载target_files-package.zip的编译包,然后解压;也可以选择使用自己编译源代码出来得到的rom。
这里写图片描述
烧录的时候:
1、Download agent选择路径(默认一般已经选好):
MTK_driver_and_flashtool\SP_Flash_Tool_exe_Windows_v5.1612.00.000 \MTK_AllInOne_DA.bin
2、Scatter-loading选择编译出来的android目录中的scatter文件,路径如下:
\out\target\product\*****\*****_Android_scatter.txt
选择完成,之后按download开始,这个时候,将手机关机,插入USB即可开始烧录,等待烧录完成,然后重启(扣电池也行)手机,即可。

Qualcomm刷机

高通用QFILE,不论在edl模式还是在开机状态都可以。
第一栏选择好相应的.mbn文件后,第二栏的配置文件一般做如下选择:

  • 第一次选择:
  1. rawprogram_unsparse.xml || rawprogram_unsparse_without_QCN.xml
  2. rawprogram2.xml
  • 第二次选择:
    两个都选上。

无U盘安装Linux openSUSE(通过硬盘安装Linux)

无U盘安装Linux openSUSE(通过硬盘安装Linux)一、说明为什么会想着用硬盘安装Linux?只是因为我陆陆续续买了两个U盘,然后它们都丢了,就没再买了。然而现在又想装个openSUSE,没有U盘,只能想办法通过硬盘安装。记录自己走过的弯路,同时也为大家提供一个无U盘或硬盘安装Linux
阅读更多