WSL+VSC 搭建C C++开发环境

1. 安装WSL

2. 配置WSL 软件, 安装所需工具

sudo apt-get install build-essential gcc g++  gdb

3. Windows 下安装VSC

4. VSC 配置

4.1.安装C/C++ 扩展插件

必须:C/C++:又名 cpptools,提供Debug和Format功能

可选:

  • Code Runner:右键即可编译运行单文件,很方便;但无法Debug

  • Bracket Pair Colorizer 2:彩虹花括号

  • One Dark Pro:大概是VS Code安装量最高的主题

  • C/C++ Snippets:Snippets即重用代码块,效果自己百度;这个扩展安装量虽高,不过个人感觉用处实在不大,cpptools和clangd也自带一些;你也可以选择其他的Snippets扩展甚至自定义

4.2. 安装远程开发包 Remote Development 扩展插件

可以在VSC 扩展中找到 Remote Development,也可以从如下地址中找到,名字: Visual Studio Code Remote Development Extension Pack

地址:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

4.3. 安装 Visual Studio IntelliCode

4.4. 安装Code Spell Checker

5. WSL 启动VSC

在需要启动的目录下运行

code .

首次从WSL 打开VSC 自动安装一些插件,等待安装完成。之后就可以正常使用了

Linux 系统下自动挂载硬盘的方法

1. 查看系统有哪些硬盘

user@armbian:~$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda            8:0    0   1.8T  0 disk
└─sda1         8:1    0   1.8T  0 part
mmcblk1      179:0    0  58.2G  0 disk
├─mmcblk1p1  179:1    0   255M  0 part /boot
└─mmcblk1p2  179:2    0    58G  0 part /var/log.hdd
                                       /
mmcblk2      179:32   0   7.3G  0 disk
mmcblk2boot0 179:64   0     4M  1 disk
mmcblk2boot1 179:96   0     4M  1 disk
zram0        253:0    0 461.7M  0 disk [SWAP]
zram1        253:1    0    50M  0 disk /var/log
zram2        253:2    0     0B  0 disk

此时需要自动挂载 sda1 硬盘

2. 建立挂载点

user@armbian:~$ mkdir shareDir

3. 获取硬盘相关的UUID

user@armbian:~$ sudo blkid
/dev/mmcblk1p1: LABEL_FATBOOT="BOOT" LABEL="BOOT" UUID="E28B-A8F3" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="d703580f-01"
/dev/mmcblk1p2: LABEL="ROOTFS" UUID="b6059d74-1488-4962-af0e-54ebd9f19329" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="d703580f-02"
/dev/zram1: LABEL="log2ram" UUID="64553e8b-c13c-440c-911c-30da239e4c86" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda1: LABEL="Data" BLOCK_SIZE="512" UUID="341A8F6F1A8F2CC4" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="2ef46bd9-566b-4a20-bddd-79740762be7f"
/dev/zram0: UUID="152b7133-c6ec-4f95-9414-e5e0909ac197" TYPE="swap"

得到 sda1 的 PARTUUID PARTUUID="2ef46bd9-566b-4a20-bddd-79740762be7f"

4. 编辑fstab

sudo vim /etc/fstab

文件后面,添加如下内容:

PARTUUID="2ef46bd9-566b-4a20-bddd-79740762be7f" /home/user/shareDir ntfs defaults 0 0

然后重启测试,开机后可以自动挂载硬盘了。

Firefly 3288 开发板配置wordpress

1 安装mysql

查看数据库是mysql 还是mariadb

sudo apt-cache search mysql
sudo apt-get install mysql-server          //服务端
sudo apt-get install mysql-client          //客户端
sudo apt-get install libmysqlclient-dev    //程序编译时链接的库

开启root 账户 sudo passwd root

输入root 密码

sudo mysql

mysql> flush privileges;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_passwd';   //azard_firefly

mysql> flush privileges;
mysql> \q

登陆验证密码

firefly@firefly:~$ mysql -u root -p

mysql 安装完毕

2. 安装Nginx

sudo apt-get install nginx

默认的nginx网站配置文件为 /etc/nginx/sites-available/default

3 安装php

sudo apt install php-fpm sudo apt install php7.2-fpm sudo apt install php7.2-mbstring sudo apt install php7.2-xml sudo apt install php7.2-mysql sudo apt install php7.2-common sudo apt install php7.2-gd sudo apt install php7.2-json sudo apt install php7.2-cli sudo apt install php7.2-curl

安装完成后,FPM服务将自动启动,要检查服务状态,请运行:

sudo systemctl status php7.2-fpm

编辑Nginx服务器配置文件sudo vim /etc/nginx/sites-available/default(大约56行),以便Nginx可以处理PHP文件:

server {
 # . . . other code
 location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php/php7.4-fpm.sock;
 }
}

重启Nginx服务,以使新配置生效:

sudo systemctl restart nginx

4. 安装Wordpress

下载wprdpress,上传到 home 目录

sudo mv wordpress-5.5.1.tar.gz /var/www/html/
cd /var/www/html/
sudo tar -zxvf wordpress-5.5.1.tar.gz

删除/var/www/html 目录下原有的index.php(如果有)文件等; 建立wordpress 文件夹下的 index.php 软连接到 html 文件夹

sudo ln -s /var/www/html/wordpress/index.php  /var/www/html/index.php

5. 配置wordpress

sudo cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
sudo vim /var/www/html/wordpress/wp-config.php

找到文件中 MySQL 的部分,修改配置为mysql 中wordpress 数据库的配置内容

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');  /** 更改为自己新建立的数据名称 */

/** MySQL database username */
define('DB_USER', '用户');  /** 更改为自己的用户名 */

/** MySQL database password */
define('DB_PASSWORD', '密码'); /** 更改为自己的用户密码 */

/** MySQL hostname */
define('DB_HOST', 'localhost');

6. 验证wordpress 安装

在浏览器地址栏输入http://域名或IP/wordpress ,转至 WordPress 安装页,开始配置 WordPress。

Linux frp 配置及后台自动启动方法

frps 服务器端

1.配置frps.ini

[common]
#bind_addr 是服务器本地IP,可以设置为0.0.0.0
bind_addr = 0.0.0.0

#web 的 http 转发配置端口,如果需要再配置
#vhost_http_port = 80
#vhost_https_port = 443

#bind_port 是frp监听端口
bind_port = 50000

#frp的客户端连接服务器端的密码,按照自己需求设置
token = your_token_password

#如下dashboard 是frp 网页端口管理工具的端口,用户名,密码
dashboard_port = 55000
dashboard_user = you_user_name
dashboard_pwd = your_password

2. 创建FRPS.SERVICE服务

登录服务器,输入 sudo vim /lib/systemd/system/frps.service 其实就是在 /lib/systemd/system 下面新建一个文件frps.service

我们需要获取frps所在的目录,可以输入pwd来看当前所在目录

在文件里面写入以下内容

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/var/frp/frps -c /var/frp/frps.ini

[Install]
WantedBy=multi-user.target
3. 使用

启动 frps sudo systemctl start frps

自启动 sudo systemctl enable frps

重启应用 sudo systemctl restart frps

停止应用 sudo systemctl stop frps

查看日志 sudo systemctl status frps

frpc 客户端

1.配置frpc.ini

frpc 放置于/var/frp/目录下

2.增加 frpc.service

新建fprc.service服务文件

sudo vim  /usr/lib/systemd/system/frpc.service

增加如下内容

[Unit]
Description=frpc service
Wants=network.target
After=network.target multi-user.target

[Service]
TimeoutStartSec=10
RestartSec=30  #此处关键
Restart=always #此处关键
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/var/frp/frpc -c /var/frp/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target
3.使用

更新服务文件(可以省略)

sudo systemctl deamon-reload

设置开机启动

sudo systemctl enable frpc 

其它服务控制:

sudo systemctl start frpc
sudo systemctl stop frpc
sudo systemctl restart frpc
sudo systemctl status frpc
sudo systemctl disable frpc  #设置开机不启动

树莓派配置LNMP 环境

1. 安装数据库MariaDB /MySQL

pi@raspberrypi:~ $ sudo apt install mariadb-server
pi@raspberrypi:~ $ sudo apt install mariadb-client

pi@raspberrypi:~ $ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.3.25-MariaDB-0+deb10u1 Raspbian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

出现以上信息说明MariaDB 安装成功, 然后输入

MariaDB [(none)]> use mysql
MariaDB [mysql]> UPDATE user SET password=password('<your_password>') WHERE user='root';
MariaDB [mysql]> UPDATE user SET plugin='mysql_native_password' WHERE user = 'root';
MariaDB [mysql]> flush ppiileges;

退出MariaDB,重启服务

sudo systemctl restart mariadb 

然后用可以用root 用户和密码登陆

mysql -u root -p 

2. 安装Nginx

sudo apt-get install nginx

默认的nginx网站配置文件为 /etc/nginx/sites-available/default

3. 安装php

sudo apt install php-fpm
sudo apt install php7.3-fpm
sudo apt install php7.3-mbstring 
sudo apt install php7.3-xml
sudo apt install php7.3-mysql
sudo apt install php7.3-common 
sudo apt install php7.3-gd 
sudo apt install php7.3-json 
sudo apt install php7.3-cli
sudo apt install php7.3-curl

安装完成后,FPM服务将自动启动,要检查服务状态,请运行:

sudo systemctl status php7.3-fpm

编辑Nginx服务器配置文件sudo vim /etc/nginx/sites-available/default(大约56行),以便Nginx可以处理PHP文件:

server {
 # . . . other code
 location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php/php7.4-fpm.sock;
 }
}

重启Nginx服务,以使新配置生效:

sudo systemctl restart nginx

NFS 解决目标主机showmount -e信息泄露(CVE-1999-0554)

原文链接:https://www.cnblogs.com/yunxuanedu/p/14262757.html

企业中,一般都会使用NFS网络文件系统。最近笔者在项目上做等保测评的工作中,发现了一个“目标主机showmount -e信息泄露(CVE-1999-0554)“的问题。最终采取的解决措施如下:

1. 问题描述

目前,我有三台主机,分别为主机a,主机b和主机c,其中主机a为服务器,部署了nfs,只允许主机b使用,然而主机c可以通过showmount -e命令来浏览主机a的目录清单。

#主机a的nfs服务配置文件,其中10.28.7.210是主机b的IP地址
[root@a ~]# cat /etc/exports
/data  10.28.7.210/32(rw,sync)
#主机b使用showmount -e命令可以查看到的信息
[root@b ~]# showmount -e 10.28.7.253
Export list for 10.28.7.253:
/data 10.28.7.210/32
[root@b ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.28.7.210  netmask 255.255.255.0  broadcast 10.28.7.255
#主机c也可以使用showmount -e命令查看nfs服务器上共享出来的目录信息
[root@c ~]# showmount -e 10.28.7.253 
Export list for 10.28.7.253:
/data 10.28.7.210/32
[root@c ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:62:18:E8  
          inet addr:10.28.7.252  Bcast:10.28.7.255  Mask:255.255.255.0

2. 解决方法

在NFS服务器上的/etc/hosts.allow和/etc/hosts.deny文件添加以下内容即可解决该问题。

编辑/etc/hosts.allow文件

[root@a ~]# cat /etc/hosts.allow
#
# hosts.allow    This file contains access rules which are used to
#        allow or deny connections to network services that
#        either use the tcp_wrappers library or that have been
#        started through a tcp_wrappers-enabled xinetd.
#
#        See 'man 5 hosts_options' and 'man 5 hosts_access'
#        for information on rule syntax.
#        See 'man tcpd' for information on tcp_wrappers
#
#
mountd:10.28.7.210    #<==添加客户端IP地址,相当于白名单

编辑/etc/hosts.deny文件

[root@a ~]# cat /etc/hosts.deny 
#
# hosts.deny    This file contains access rules which are used to
#        deny connections to network services that either use
#        the tcp_wrappers library or that have been
#        started through a tcp_wrappers-enabled xinetd.
#
#        The rules in this file can also be set up in
#        /etc/hosts.allow with a 'deny' option instead.
#
#        See 'man 5 hosts_options' and 'man 5 hosts_access'
#        for information on rule syntax.
#        See 'man tcpd' for information on tcp_wrappers
#
#
mountd:all    #<==添加该行,相当于黑名单

在以上两个文件中添加对应内容之后,不需要重启nfs服务,即可生效

3. 结果测试

#主机c使用showmount -e命令,无法查看相关信息[root@c ~]# showmount -e 10.28.7.253 
rpc mount export: RPC: Authentication error; why = Failed (unspecified error)
[root@c ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:62:18:E8  
          inet addr:10.28.7.252  Bcast:10.28.7.255  Mask:255.255.255.0
#主机b使用正常[root@b ~]# showmount -e 10.28.7.253
Export list for 10.28.7.253:
/data 10.28.7.210/32
[root@b ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.28.7.210  netmask 255.255.255.0  broadcast 10.28.7.255

VirtualBox Linux 虚拟机下共享文件夹权限不够

VirtualBox 虚拟机下Linux 共享文件在/media/目录下。如果设置的共享目录是 ShareDoc, 共享文件夹的地址是
"`/media/sf_ShareDoc". 访问时提示权限不够.

在虚拟机下查看共享文件夹的属性,发现该目录的所有者是root,所属组是vboxsf。而一般登录的用户和所属组都是(你的用户名),所以确实没有权限。

ls -l drwxrwx---  1 root vboxsf    0 84 10:32 sf_ShareDoc

而共享文件夹的所有者和所属组是不能修改的。那么解决权限不足问题的方法就是将自己登录的用户,添加到vboxsf组中。

sudo usermod -aG vboxsf $(whoami)
# 或者
sudo usermod -aG vboxsf your_name
重启虚拟机,共享文件夹可以使用了。

Linux 命令行中比较两个目录的5个方法

在 Linux 中比较两个目录是一项常见的工作,特别是当需要确保两个目录之间的文件完全相同时。

1. 使用 diff 命令比较两个目录

diff 命令可以比较两个文件或目录之间的差异。要比较两个目录,只需将两个目录作为参数传递给 diff 命令即可。例如,假设我们有两个目录“dir1”和“dir2”,我们可以使用以下命令比较它们之间的差异:

$ diff -r dir1/ dir2/

在这个命令中,“-r”选项告诉 diff 命令递归比较目录及其子目录中的所有文件。diff 命令将列出两个目录之间的差异,包括文件名和行号。行前面的符号可以告诉你哪些行存在于第一个目录中,哪些行存在于第二个目录中。

2. 使用 rsync 命令比较两个目录

rsync 命令是一个强大的文件同步工具,它可以比较两个目录之间的差异。使用 rsync 命令比较两个目录,只需将两个目录作为参数传递给 rsync 命令即可。

例如,要比较目录“dir1”和“dir2”,可以使用以下命令:

$ rsync -av --dry-run dir1/ dir2/

在这个命令中,“-av”选项表示以递归模式同步目录,“--dry-run”选项表示不要实际执行同步操作,而只是显示哪些文件将被同步。

$ rsync -avz --delete /path/to/dir1/ /path/to/dir2/

其中,-a 表示归档模式,-v 表示输出详细信息,-z 表示启用压缩传输,并使用 --delete 选项删除目标目录中不再存在于源目录中的文件。
rsync 命令将列出两个目录之间的差异,包括文件名和文件属性。行前面的符号可以告诉你哪些文件存在于第一个目录中,哪些文件存在于第二个目录中。

3. 使用 find 命令比较两个目录

find 命令可以递归遍历目录树,并执行指定的命令。要比较两个目录之间的差异,可以使用 find 命令找到两个目录中的所有文件,并将它们发送到 diff 命令进行比较。例如,要比较目录“dir1”和“dir2”,可以使用以下命令:

$ diff <(cd dir1; find . -type f | sort) <(cd dir2; find . -type f | sort)

在这个命令中,“<( )”符号表示将命令的输出作为文件输入传递给 diff 命令。

4. Meld 工具

Meld 是一款免费的图形化比较工具,可以用来比较文件和目录之间的差异。它不仅可以显示文件和目录之间的差异,还可以让用户轻松地合并它们。以下是在 Linux 中安装和使用 Meld 的示例命令:

$ sudo apt-get install meld   # Ubuntu/Debian 安装命令
$ meld /path/to/dir1 /path/to/dir2

在打开的 Meld 窗口中,你可以看到两个目录之间的所有不同之处,并且可以使用 Meld 提供的工具合并它们。

5. Kompare 工具

Kompare 是另一个免费的图形化比较工具,可以用来比较文件和目录之间的差异。它提供了类似于 Meld 的界面,让用户可以轻松地找到不同之处并合并它们。以下是在 Linux 中安装和使用 Kompare 的示例命令:

$ sudo apt-get install kompare   # Ubuntu/Debian 安装命令
$ kompare /path/to/dir1 /path/to/dir2