«
树莓派实战笔记

时间:2022-7-11    作者:Deri    分类: 树莓派


系统IMG下载地址

https://www.raspberrypi.org/downloads/raspbian/
下载推荐的镜像烧录软件安装。
手动MAC烧录镜像
注意以下操作在 mac命令行

1)sd卡插入读卡器并查看磁盘序号

diskutil list

我得到的是 /dev/disk2

2)解除占用磁盘

diskutil unmountDisk /dev/disk2

3)写入镜像

rdisk2是之前查看到的序号所以我用的是
sudo dd bs=4m if=XXXXX.img of=/dev/disk2

4)拓展TF卡空间

例如,使用128G的TF卡烧录后,空间只有16G或32G,通过如下操作,拓展成完整空间

raspi-config进入配置
按上下键选中Advanced Options,再按Enter键进入子菜单
选Expand Filesystem回车
等一会儿出现确认,按回车,然后按ESC返回
重启后,空间就拓展成正常的TF卡空间了

无键盘屏幕配置WiFi

在boot目录下创建文件wpa_supplicant.conf,内容:

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="你的Wifi名称注意大小写"
    psk="你的Wifi密码"
}

修改WiFi连接配置

修改配置文件

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

增加或修改wifi配置,如下

network={
    ssid="link_010"
    psk="12345679"
    priority=2
}

名词解释
ssid:网络的SSID
psk:密码
priority:连接优先级,必须是正数,数字越大优先级越高
scan_ssid:设置为1可以连接隐藏wifi
key_mgmt:加密模式

保存后重启

查看网络连接信息

查看当前的连接的wifi网络

sudo iwconfig wlan0

查看当前可用的wifi网络

sudo iwlist wlan 0 scan

查看当前的IP

sudo ifconfig

查看当前路由表

sudo route

无键盘屏幕开启SSH

在boot下创建文件ssh,无后缀扩展名

修改基本配置
连接:ssh pi@IP地址
默认密码是raspiberry
系统设置:
sudo raspi-config
修改用户密码
修改设备网络名hostname,改完后重启一下,否则有些设置会出错

修改Timezone到Asia下的shanghai

设置字体支持中文:Chang Locale
按空格去掉 en_GB.UTF-8 UTF-8
按空格勾上“en_US.UTF-8 UTF-8”“zh_CN.UTF-8 UTF-8”“zh_CN.GBK GBK”
下一屏幕默认语言选zh_CN.UTF-8
安装中文库

sudo apt-get install ttf-wqy-zenhei

更新国内软件源

A、主要是编辑/etc/apt/sources.list文件,和/etc/apt/sources.list.d/目标下的所有文件(非必须,最好全删除)

推荐使用腾讯源如下,注意[ trusted=yes ],可以解决update时报错NO_PUBKEY:

deb [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye main non-free contrib
deb-src [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye main non-free contrib
deb [ trusted=yes ] https://mirrors.tencent.com/debian-security/ bullseye-security main
deb-src [ trusted=yes ] https://mirrors.tencent.com/debian-security/ bullseye-security main
deb [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye-updates main non-free contrib
deb-src [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye-updates main non-free contrib
deb [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye-backports main non-free contrib
deb-src [ trusted=yes ] https://mirrors.tencent.com/debian/ bullseye-backports main non-free contrib

如果仍有报错,复制NO_PUBKEY后面的key,执行如下。若有多条则分别执行一下

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0E98404D386FA1D9

有异常则参考:https://blog.csdn.net/qq_35586327/article/details/94597760

B、更新一次软件源

sudo apt-get update
sudo apt-get upgrade

更新pythony库的国内源

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

一些源URL:
  阿里云 http://mirrors.aliyun.com/pypi/simple/
  中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  豆瓣(douban) http://pypi.douban.com/simple/
  清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
  中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
临时使用:
可以在使用pip的时候在后面加上-i参数,指定pip源

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

安装软件时报错E: Sub-process /usr/bin/dpkg returned an error code (1)

cd /var/lib/dpkg/
sudo mv info/ info_bak          # 现将info文件夹更名
sudo mkdir info                 # 再新建一个新的info文件夹
sudo apt-get update             # 更新
sudo apt-get -f install         # 修复
sudo mv info/* info_bak/        # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info                # 把自己新建的info文件夹删掉
sudo mv info_bak info           # 把以前的info文件夹重新改回名

查看文件列表

ls /home/pi

显示详情:

ls /home/pi -l

文件大小用M或G显示:

ls /home/pi -lh

查询可以安装的软件如php curl

sudo apt-cache search curl | grep php

设置桌面分辨率为1024x600

sudo nano /boot/config.txt

在文件底部添加:

max_usb_current=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_drive=1
hdmi_cvt 1024 600 60 6 0 0 0

修改开机画面

参考:https://shumeipai.nxez.com/2018/12/16/customize-the-boot-startup-screen-of-the-raspberry-pi.html

支持exfat和ntfs格式卡或硬盘

sudo apt-get install exfat-fuse

sudo mount.exfat-fuse /dev/sdb1 /mnt/usb
sudo apt install ntfs-3g

挂载U盘

A.插入U盘后,先查看盘符(一般为/dev/sda1):

sudo fdisk -l

B.建立一个目录,用来关联挂载U盘,并修改权限:

sudo mkdir /home/pi/Udisk
sudo chmod -R 777 /home/pi/Udisk

C.将U盘挂载到指定目录:

sudo mount -rw /dev/sda1 /home/pi/Udisk

(-rw表示可读可写,以后就可以直接用/home/pi/Udisk来访问和写入U盘)

如果是NTFS格式的硬盘,用户如下命令挂载,否则用mount挂载后权限不足

sudo ntfs-3g /dev/sda1 /home/pi/Udisk

卸载U盘:

sudo umount  /dev/sda1

将U盘格式为ext4

sudo mkfs.ext4 /dev/sda

格式化为NTFS用:

mkfs.ntfs -Q -L 盘符 /dev/sda1

开机自动挂载

(危险操作!可能导致开不了机,按照具体要求来进行编辑,切记编辑完要执行一次mount -a )

sudo nano /etc/fstab

末尾加上一行,注意挂载盘的格式,编辑完要执行一次mount -a:

/dev/sda1 /home/pi/Udisk vfat rw,defaults 0 0

启用root

设置root密码

sudo passwd root

启用root用户

sudo passwd --unlock root

切换到root

su root

校正系统时间

sudo apt-get install ntpdate
sudo ntpdate cn.pool.ntp.org

安装宝塔面板

关于宝塔面板:https://www.bt.cn/download/linux.html

sudo wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && bash install.sh

安装git支持从GitHub下载项目

sudo apt-get install git

要下载项目时,先定位到指定目录,如下

cd /var/www/html
sudo git clone https://github.com/spoonysonny/pi-dashboard.git

安装Samba

A、安装

sudo apt-get install samba samba-common

B、配置
修改配置文件smb.conf,先备份一个

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo nano /etc/samba/smb.conf
[Pi4]
    # 说明信息
    comment = NAS Storage
    # 可以访问的用户
    valid users = pi,root
    # 共享文件的路径,raspberry pi 会自动将连接到其上的外接存储设备挂载到/media/pi/目录下。
    path = /home/pi/
    # 可被其他人看到资源名称(非内容)
    browseable = yes
    # 可写
    writable = yes
    # 新建文件的权限为 664
    create mask = 0777
    # 新建目录的权限为 775
    directory mask = 0777
    read only = no
    guest ok = yes

测试配置

testparm

添加登陆账户并创建密码,必须是 linux 已存在的用户

sudo smbpasswd -a pi

尾部新增共享目录
https://www.cnblogs.com/shellstudio/p/10756419.html

C、设置共享目录读写权限

sudo chmod -R 777 /home/pi

D、重启服务

sudo samba restart

配置文件为误或有中文,可能会报错:set_variable_helper(no # 不只读): value is not boolean!
如果重启报错“Unit samba.service is masked.”就用:

sudo systemctl restart smbd.service

安装MiniDLNA

参考:https://shumeipai.nxez.com/2015/07/12/raspberry-pi-install-dlna-streaming-media-server.html

翻墙安装brew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

关于brew:https://brew.sh/

定位某个服务的路径

which 服务名

安装火狐FireFox浏览器

自带的chrome经常打不开,可以安装火狐,安装后进桌面或VNC,点左上角树莓图标,在互联网目录中可以找到;

sudo apt-get install firefox-esr

如果报错,尝试先更新软件源;

sudo apt update

如果非要用chrome,可用命令打开:

chromium-browser -no-sandbox

安装FTP

A、安装

sudo apt-get install vsftpd

B、启动FTP服务

sudo service vsftpd start

C、配置文件,先备份一个

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
sudo nano /etc/vsftpd.conf
修改以下内容,去掉前面的#
anonymous_enable=NO  
表示:不允许匿名访问
local_enable=YES   
设定本地用户可以访问。
write_enable=YES
设定可以进行写操作
local_umask=022
设定上传后文件的权限掩码
尾部增加如下
pasv_enable=NO
port_enable=YES

D、重启服务

sudo service vsftpd restart

以pi账号连接

安装VNC远程桌面

A、安装VNC服务

sudo apt-get install tightvncserver

启动服务

sudo vncserver

依次设置密码,确认密码,不需要只view密码(写n),每次会创建一个任务ID,从1开始;

修改vnc密码:

vncpasswd

直接杀掉所有vnc:

sudo killall -9 Xtightvnc

结束指定vnc(注意,冒号前有空格):

sudo vncserver -kill :1

如果结束失败,需要删除一些临时文件,不然新创建的桌面ID会一直累加,而不是从1开始:

sudo rm /tmp/.X11-unix/X1
sudo rm /tmp/.X1-lock

注意:直接在raspi-config里开启VNC后,也能启动和连接,但是登录需要用户名+密码,所以还是请安装tightvncserver

可选,支持windows远程桌面直接连接树莓派

sudo apt-get install xrdp

通过树莓派登录windows的远程桌面

A、安装rdesktop

sudo apt-get install rdesktop

B、启动连接

rdesktop -g 1440x900 -P -z -x l -r sound:off -u UU 192.168.8.9:3389

(注意命令中的桌面用户名windowsuser,windows主机192.168.31.100)

完整参数释义如下:
参数 意义
-g 后面代表要使用的分辨率
-P 启用位图缓存
-z 启用RDP数据流压缩
-x l 使用局域网级别的图像质量
-r sound:off 关闭声音
-u windowuser 指定要使用的用户
IP地址 要连接的计算机的IP地址和端口号

安装Alist网盘

参考:https://alist.nn.ci/zh/
AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。
PS:Alist中添加或编辑迅雷云盘时,登录账号先填写正常手机号如18677775555,以及密码,保存后会报错,显示出一个登录的https的网址,此时可以按教程抓包后,填写验证码,然后切记将手机号改成+86的,如“+8618677775555”,然后再保存。

安装Nginx

sudo apt-get install nginx

重启nginx

sudo service nginx restart

让Nginx支持显示目录文件
修改Nginx配置文件:

sudo nano /etc/nginx/nginx.conf

在server或location 段里添加上下面四行:

autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;

四行分别表示:
启用目录浏览;
显示出文件的大概大小,单位是kB或者MB或者GB;
显示的文件时间为文件的服务器时间;
设置编码支持中文,否则会乱码;
保存后重启服务:

sudo service nginx restart

更改Nginx日志格式
编辑/etc/nginx/nginx.conf
在http段中加入日志格式

log_format main
'$remote_addr - $remote_user [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer" '  
'"$http_user_agent" "$http_x_forwarded_for"';

然后指定access_log使用这个自定义的main格式

access_log /var/log/nginx/access.log main;

注意,如果使用了内网穿透,反向代理等,IP可能不准,需要更改
remote_addr

自定义Nginx的404页
找到server配置,一般在/etc/nging/sites-enabled/my.conf或default
在server内增加如下配置

server { 
    fastcgi_intercept_errors on;
    error_page 404 /page/404.html;
    location = /page/404.html {
        root E:/rep/front;
    }
}

安踏网络实时监控nethogs

参考:https://blog.csdn.net/omaidb/article/details/120691692

sudo apt-get install nethogs
sudo nethogs

安装PHP

sudo apt-get install php7.4 php7.4-fpm php7.4-mysql php7.4-common php7.4-gd php7.4-xml php7.4-mbstring php7.4-curl php7.4-zip php7.4-intl php7.4-redis

重启php

sudo service php7.4-fpm restart

下载Kod文件管理器:https://kodcloud.com/download/

配置Nginx连接PHP
配置php-fpm连接Nginx
A、找到参数,这一步可忽略
备份:

sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www.conf.bak
sudo nano /etc/php/7.4/fpm/pool.d/www.conf 

找到这行并记下:listen = /run/php/php7.4-fpm.sock

B、修改Nginx.conf配置
备份一下:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo nano /etc/nginx/nginx.conf

在http{内,
将最后一行:

include /etc/nginx/sites-enabled/*;

修改为:

include /etc/nginx/sites-enabled/*.conf;

C、创建站点配置文件

cd  /etc/nginx/sites-enabled
sudo cp default my.conf
sudo nano my.conf

编辑内容如下:
[注释掉原location / {区域内所有内容,并在相同位置粘贴以下代码(注意不能在文件末尾,因为这些代码需要在server{内,站点根目录为/home/pi/www如下]

location / {
        root /home/pi/www;
        index index.php index.html;
        try_files $uri $uri/ =404;
}
location ~ \.php$ {
        root /home/pi/www;
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

创建文件夹和文件并编辑:

sudo mkdir /home/pi/www
sudo nano /home/pi/www/index.php

内容<?php phpinfo();?>即可测试
给网站目录设权限

sudo chmod -R 777 /home/pi/www

安装PHP5.6版本

由于Debian默认PHP版本已经是7.0,某些情况下,需要安装5.6版本PHP环境。依次操作如下:

sudo apt-get update
sudo apt-get install -y apt-transport-https curl
curl https://packages.sury.org/php/apt.gpg | sudo apt-key add -
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php5.list

sudo apt-get update

sudo apt-get install -y php5.6

执行结束后,查看PHP版本:

php -v

切换PHP版本,执行如下命令,然后输入对应版本编号:

sudo update-alternatives --config php

在Nginx中切换PHP版本:

cd /etc/nginx/sites-enabled/

修改default文件中的php7.0为php5.6

安装Mysql

sudo apt-get install  mariadb-client-10.5 mariadb-server-10.5

设置root用户密码

sudo mysqladmin -u root password "你设的密码";

取消绑定IP,允许其他IP访问

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
在“bind-address”一行前加#注释掉

使用root登录

sudo mysql -uroot -p

设置允许root用户远程连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;

退出数据库

quit

启动、停止、重启mysql

sudo service mysql start
sudo service mysql stop
sudo service mysql restart

测试一下PHP能不能连接上MYSQL了

网站根目录创建mysql.php,注意确认网站路径

sudo nano /home/pi/www/mysql.php

输入以下代码保存后,浏览器打开测试,注意确认代码中的账号和密码

<?php
$link = mysqli_connect('localhost', 'root', 'NewPassWd');
if (!$link) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully';
mysqli_close($link);
?>

将MYSQL数据库备份并压缩

sudo mysqldump --single-transaction --all-databases -uUUUU -pPPPP |gzip >/home/....../MysqlBak.db.tar.gz

替换上面的:
UUUU=数据库用户名;
PPPP=数据库用户密码;
...../=保存备份文件的路径;
--all-databases=表示备份所有库,如果指定数据库,则--databases 数据库名1 数据库名2 数据库名3;

[还原数据]

mysql > use db_name
mysql > source /backup/mysqldump/db_name.db

安装redis

安装redis

sudo apt-get install redis-server

执行以下命令打开redis的配置文件:

sudo nano /etc/redis/redis.conf

1、设置允许远程连接:

找到“bind 127.0.0.1 ::1”这一行:
redis默认是只能本地进行访问的,在前面加上“#”号
把这一行注释掉,表示允许任意ip进行连接。
进行了这一步后,使用redis就不需要先输入命令“redis-server”打开服务了

2、设置连接密码:

在进行上一步操作后即可远程连接了,但是为了安全性考虑,推荐给redis设置一个密码。
在配置文件中加入:requirepass 你要设置的密码
例如,把密码设为abc:
2)No password is configuration

requirepass abc

加上上面这句即可设置密码

3、设置完成,保存后重启redis服务:

/etc/init.d/redis-server restart

如果树莓派本地要访问

redis-cli

即可进入本地redis
如果有设置密码

auth abc

即可

清理系统空间缓存

一段时间后报警空间不足,
使用下面命令面列超100M的文件并排序

sudo find / -xdev -type f -size +100M -print | xargs ls -lh | sort -k 5 -rh

发现/var/mail/mail文件居然达5个G,
经查,该功能为Linux操作系统核对系统资源状态并汇总,默认发送到root用户的/var/spool/mail/目录(/var/mail目录是其软连接目录),并在标准输出中提示您反馈的这些信息。
一般可以时常对这个文件删除,以释放磁盘空间

但是没有找到停用该功能的方式,只能写个脚本,定时清理,注意,清理前需要修改该文件权限;

sudo chmod -R 777 /var/spool/mail/
cat /dev/null>mail或sudo rm/var/mail/mail

服务器攻击防御与蜜罐

https://hfish.net/#/

服务器防火墙UFW

https://blog.csdn.net/qq_45928255/article/details/122644336

搭建aria2下载服务

https://zhuanlan.zhihu.com/p/533007737
jsonRPC的NGINX配置:https://kenvix.com/post/nginx-proxy-aria2/
使用命令操作:http://t.zoukankan.com/languang9801-p-10940779.html
非常详细的说明:http://ivo-wang.github.io/2019/04/18/%E5%85%B3%E4%BA%8Earia2%E6%9C%80%E5%AE%8C%E6%95%B4%E7%9A%84%E4%B8%80%E7%AF%87/
常见问题:http://blog.cloudwai.com/archives/227/

创建成系统服务:https://zhuanlan.zhihu.com/p/360865716
(注意,要用命令行编辑文件,否则启动可能报错)

全量备份系统镜像rpi-clone

参考:https://shumeipai.nxez.com/2014/06/01/do-system-backup-image-of-raspberry-pi-for-linux-or-mac.html

手动方式,将TF卡取出插入Mac,然后备份成一个img文件到电脑本地
A. 查看TF卡设备号,如/dev/disk2

diskutil list 

B. 备份成img文件

sudo dd if=/dev/disk2 of=raspberrypi_0917.img

安装goaccess解析日志log

官网:https://www.goaccess.cc/?mod=download
教程:https://www.cnblogs.com/longren/p/10945623.html

A.安装最新到最新版access
官方 GoAccess Debian/Ubuntu 仓库

echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
sudo apt-get update

B.安装

apt-get install goaccess

C.命令方式运行
解析Nginx日志,日志目录默认/var/log/nginx

goaccess -f /var/log/nginx/access.log

按空格选择第一个格式,回车确认可以查看日志,按q退出

D.创建一个配置文件/usr/local/etc/goaccess.conf,若无该目录先手动创建好

nano /usr/local/etc/goaccess.conf

粘贴以下内容后保存:

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

E. 将日志分析结果保存为HTML文件/code/log/index.html:

goaccess /var/log/nginx/access.log -o /code/log/index.html -p /usr/local/etc/goaccess.conf

F.写一个脚本,以中文方式保存HTML结果,脚本sh文件路径名称可自定义:

nano /home/pi/goaccess.sh

内容:

#!/bin/bash
LANG="zh_CN.UTF-8"
/usr/local/bin/goaccess /var/log/nginx/access.log -o /code/log/index.html -p /usr/local/etc/goaccess.conf

注意:系统需要先安装中文语言包zh_CN.UTF-8(参考:https://blog.csdn.net/bluebird_shao/article/details/66971627,安装新语言包后可能要重启才生效

G.添加一个定时任务,每10分钟更新一次日志HTML

crontab -e

添加如下命令,注意sh的脚本与实际一致:

*/10 * * * * /bin/bash /home/pi/goaccess.sh

定时任务

crontab -e

第一次会选择编辑器,选1--nano
切记!!运行“crontab -e”和“sudo crontab -e”很可能是不同的两个用户配置,不要混淆和重复!

编辑任务格式如下:

m h dom mon dow command

每隔3分钟执行

*/3   *     *    *       *       /usr/share/nginx/www/pi-pull.sh

设定每次重启时运行一次,用@reboot代表日期时间,如下:

@reboot python /home/pi/myscript.py

[!!注意,如果是重启就运行python并且需要联网动作(如http请求),需要time.sleep(5)等待几秒,可能是网络还没准备好就不会执行任务]
[!!注意,脚本和里面代码相关路径要写绝对路径]

如果你希望命令仅仅在后台运行,则可以加一个 & 符号如下:

@reboot python /home/pi/myscript.py &

查看定时任务设置

crontab -l

设置后立即生效-即重启crontab服务:

sudo service cron reload
sudo service cron restart

制作系统服务并开机启动

A.创建一个服务文件:

sudo nano /etc/init.d/服务名无后缀

内容如下,替换相关服务指令:

#!/bin/sh

#/etc/init.d/testboot

###BEGIN INIT INFO

#Provides:testboot

#Required-Start:$remote_fs $syslog

#Required-Stop:$remote_fs $syslog

#Default-Start:2 3 4 5

#Default-Stop:0 1 6

#Short-Description: testboot

#Description: This service is used to start my applaction

###END INIT INFO

case "$1" in
     start)
     echo "start your app here."
     su pi -c "exec ~/testboot.sh"
     ;;
     stop)
     echo "stop your app here."
     ;;
     *)
     echo "Usage: service testboot start|stop"
     exit 1
     ;;
esac
exit 0

B.设置权限:

sudo chmod 777 /etc/init.d/服务名

C.设置开机启动:

sudo update-rc.d 服务名 defaults

查看定时任务执行日志

tail -f /var/log/syslog

当定时任务在指定时间执行时,会同步输出类似下面这样的log:

Jan 29 15:35:01 XXXXXX CRON[xxx] (root) CMD (. /etc/profile; /bin/sh /mnt/test1.sh)

建立软链接(类似快捷方式)

例:将/home/pi/www建立到/var/www/html

sudo ln -s /home/pi/www /var/www/html

删除软链接:

rm -rf /var/www/html

修改软链接:

ln -snf /home/pi/site /var/www/html

访问挂载局域网其他机器smb

先安装:

sudo apt-get install cifs-utils

挂载命令:

sudo mount -t cifs -o username=PCUSER,password=PCPASSWD,file_mode=0777,dir_mode=0777 //192.168.1.111/f /home/pi/PC/f

注意,替换命令中目标机器的IP/共享目录(//192.168.1.111/f),本机挂载目标需要先创建好(/home/pi/PC/f),目标机用户名(PCUSER),目标机密码(PCPASSWD)。
然后进入挂载目录访问:cd /home/pi/PC/f

sudo mount -t cifs -o username=UU,password=deri,file_mode=0777,dir_mode=0777 //192.168.8.9/d /home/pi/UUi7/d

卸载命令:

sudo umount /home/pi/PC/f

查找、杀掉进程

查找进程:

sudo ps aux | grep 关键词

按进程ID杀掉进程:

sudo kill -9 进程ID

按名称杀掉进程:

sudo killall -9 关键词

远程拷贝服务器文件(或整个目录)

scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

1、从本地文件拷贝到远程服务器:scp 文件名 用户名@计算机IP:远程路径
2、从远程服务器将文件拷回本地:scp 用户名@计算机IP:文件名本地路径
3、将本地目录拷贝到远程服务器:scp -r 目录名   用户名@计算机IP:远程路径
4、从远程服务器将目录拷回本地:scp -r 用户名@计算机IP或者:目录名本地路径
5、如果要指定端口(注意-P是大写):sudo scp -P 6666 pi@dengrui.me:/home/pi/xx/* /home/pi/Cloud/ xx/

用sheel脚本执行python,执行.sh文件

!/bin/bash/python
echo 'run program start'
python test.py

压缩与解压

如果没有,请先安装ZIP:

sudo apt-get install zip

zip解压:

unzip filename.zip

zip压缩:

zip filename.zip dirname

tar解包:

tar zxvf filename.tar

tar打包:

tar czvf filename.tar dirname

全网下载音乐

A、安装库:

sudo pip install pymusic-dl

如果失败,试试:

sudo pip3 install pymusic-dl

B、安装成功后,搜索歌曲,选择序后直接下载;

sudo music-dl -k "歌曲名称"

拓展扩展SWAP空间大小

分四步:
1.安装dphys-swapfile
2.修改SWAP空间大小,将 CONF_SWAPSIZE 和 CONF_MAXSWAP 的值修改成你想要的大小,如2048
3.重启服务
4.查看SWAP空间大小

sudo apt-get install dphys-swapfile
sudo nano /etc/dphys-swapfile
sudo /etc/init.d/dphys-swapfile restart
free -h

关机重启

A、重启

sudo reboot
shutdown -r now
shutdown -r 18:23:52 #定时重启

B、关机
任选一个

sudo shutdown -h now
sudo halt
sudo poweroff
sudo init 0

读取DHT11温湿度

https://shumeipai.nxez.com/2018/05/16/dht11-temperature-and-humidity-sensor-raspberry-pi.html

如果报错:UserWarning: /home/pi/.cache/Python-Eggs is writable
可以执行下面命令解决,注意替换/home/pi....这个路径,跟报错中的一致

sudo  chmod g-wx,o-wx /home/pi/.cache/Python-Eggs

如果使用树莓派或python3环境,可能报错,解决方案参考如下:
https://blog.csdn.net/elleryer/article/details/108482087

通过RC522模块读取NFC卡

http://blog.csdn.net/qq_40259641/article/details/108749501

树莓派连接蓝牙耳机音箱播放音乐

https://zhuanlan.zhihu.com/p/512252663

内网穿透SSH反向代理,通过远程主机访问本地SSH

示例:本地局域网机器本地IP=127.0.0.1,远程主机IP或域名=Y.Y.Y.Y,绑定一个端口=5022,本地用户名Buser,远程主机用户名Yuser
A、本地设置反向代理:

ssh -CqTfnN -R 0.0.0.0:5022:127.0.0.1:22 Yuser@Y.Y.Y.Y

B、远程主机设置:

nano /etc/ssh/sshd_config

末尾添加一行

GatewayPorts yes

重启远程ssh 服务

service sshd reload

(注意,远程主机的5022端口是否允许访问,云服务器请在安全组添加TCP规则)

C、试一试,登录

ssh -p 5022 Buser@Y.Y.Y.Y

(注意:使用指定的端口,使用本地局域网的用户名,远程主机IP或域名)

内网穿透
需要一台公网主机
A.公网主机配置
a)下载解压:

sudo wget https://github.com/fatedier/frp/releases/download/v0.11.0/frp_0.11.0_linux_amd64.tar.gz

sudo tar xvf frp_0.11.0_linux_amd64.tar.gz

b)配置:
编辑frps.ini,全删除修改如下:

bind_addr = xxx.xxx.xxx.xxx公网域名或IP,如果出错就不要配这个用#注释掉
bind_port = 7000
vhost_http_port = 88  #穿透后公网用于web的端口
vhost_https_port = 443 #穿透后公网用于httpsweb的端口
dashboard_port = 7500
dashboard_user =设一个用户名用于登录web面板
dashboard_pwd = 设一个密码用于登录web面板
auth_token = frp
#以下是日志配置的路径,天数等
log_file = /home/pi/frp/log/frps.log
log_level = info
log_max_days = 10

c)启动公网服务:

./frps -c ./frps.ini

d)查看服务状态:
http://x.x.x.x:7500,即公网地址+dashboard_port,用frps.ini里配置的面板登录账号密码

B.客户端配置
a)下载解压:

wget https://github.com/fatedier/frp/releases/download/v0.11.0/frp_0.11.0_linux_arm.tar.gz
tar -zxvf frp_0.11.0_linux_arm.tar.gz

b)编辑frpc.ini:

[common]
server_addr = xxx.xxx.xxx.xxx //服务器地址
server_port = 7000
local_ip = 127.0.0.1

[ssh]
type = tcp
local_port = 22
remote_port = 6000
auth_token = frp

[www]
type = http
local_port = 80 #内网web的本地端口
custom_domains = www.hibai.cn #穿透到公网的域名,访问时加公网的vhost_http_port
auth_token = frp

[wwws]
type = https
local_port = 443
custom_domains = www.hibai.cn
auth_token = frp

[VNC]
type = tcp
local_ip = 127.0.0.127
local_port = 5901
remote_port = 5910
注意,VNC的端口默认5900,但是每创建一个vnc进程会有一个默认端口+1,所以这里本地端口应写5901

c)启动服务:

./frpc -c ./frpc.ini

d)设置为服务,注意,开机自动启动时要延迟一会儿。
在路径 /usr/lib/systemd/system 下添加文件 frpc.service ,内容如下,注意替换相关路径:

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/soft/frp/frpc -c /home/pi/soft/frp/frpc.ini
ExecReload=/home/pi/soft/frp/frpc -reload -c /home/pi/soft/frp/frpc.ini

[Install]
WantedBy=multi-user.target

启动服务:
systemctl enable frpc
systemctl start frpc
重启服务:
sudo systemctl restart frpc

抓取网页需要登录授权时的方法;

curl --insecure --anyauth -u 账号:密码 -X GET https://xxxx.com:端口

PHP方法,返回数据:code和代码

$username='账号';
$password='密码';
$URL='http://localhost:xxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$result=curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
curl_close ($ch);
return array($status_code,$result);

PHP执行python或shell命令

$cmd="sudo /usr/bin/python2.7 /home/pi/python/opendoor.py";
$syscmd = system($cmd,$ret);
echo("$cmd<br>CmdResult:$ret");

返回的$ret值为1表示失败,0表示成功

注意,要配好权限

sudo nano /etc/sudoers

--添加web服务器用户(nginx中是www-data)权限如下,注意,修改后文件权限要改回0440,否则会报错:

#User privilege specification
root    ALL=(ALL:ALL) ALL
www-data        ALL=(root)      ALL
#Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%www-data ALL=(ALL:ALL) NOPASSWD:ALL

linux使用iptables和ipset做IP防火墙阻挡恶意访问

*创建ipset集,名称为blackip

ipset creat blackip hash:ip

*向ipset集中增加要限制的IP

ipset add blackip 120.204.76.181

*从txt文件中批量导入(一行一个,规格为:add blackip 185.191.171.38):

ipset restore -f 文档路径

*从ipset集中删除某IP

ipset del blackip 120.204.76.181

*从ipset集中查询某IP

ipset test blackip 120.204.76.181

*全部删除:

ipset flush blackip

*列出ipset集列表

ipset list

E.创建iptables规则,将符合ipset集blackip的INPUT纪录到/var/log/messages,并增加前缀标识“BLACKIP

iptables -A INPUT -m set --match-set blackip src -j LOG --log-prefix "**BLACKIP**"

F.创建iptables规则,将符合ipset集blackip的INPUT请求丢弃掉(注意,先创建LOG规则,再创建DROP规则)

iptables -A INPUT -m set --match-set blackip src -j DROP

G.查看iptables规则列表

iptables -L

H.清空所有自定义iptables规则

iptables -F

I.查看日志

cat /var/log/messages

树莓派桌面中,打开文件管理器出现闪退的修复方法:

sudo apt-get install --reinstall pcmanfm

从百度网盘下载文件

下载baidupcs
下载地址:https://github.com/Linux-Doc/baidupcs-web/tree/master/BaiduPCS-Go-v3.7.1
下载armv7版本的,这个版本能够在树莓派上运行
下载完成之后直接运行

./BaiduPCS-Go

在浏览器里面输入http://树莓派的ip地址:5299就可以看到百度网盘的登录界面了

服务器测速

安装:

sudo apt-get install speedtest-cli

使用:

sudo sppedtest

安装denyhosts屏蔽恶意ip

https://www.lonery.com/article-view-132.html

修改树莓派SWAP空间

下面开始正式修改树莓派的 swap 的大小:

sudo nano /etc/dphys-swapfile

将 CONF_SWAPSIZE 的值修改成你想要的大小(单位是M,如2048就是2G)。 一般在内存小于2G的情况下,交换分区应为内存的2倍!

然后,重新启动 dphys-swapfile 文件服务:

sudo /etc/init.d/dphys-swapfile restart

最后查看大小:

$ free -h
total used free shared buff/cache available
Mem: 976M 66M 801M 12M 108M 849M
Swap: 2.0G 0B 2.0G

HDMI输出声音

默认HDMI输出没有声音,

修改 /boot/config.txt
增加一行:
hdmi_drive=2

重启

USB摄像头

https://blog.csdn.net/GO_D_OG/article/details/90036913

【合集】打造各种服务器

https://blog.csdn.net/xzknet/article/details/38989471

树莓派红外遥控 (lirc、gpio-ir)

https://blog.csdn.net/Destinyabc/article/details/107907251

https://segmentfault.com/a/1190000014135418

引脚图

标签: PHP python nginx 树莓派