作者: admin

  • rsync用法

    拉取远程文件到本地

    rsync -av -e "ssh -p your_port" pi@ip:/mnt/myharddrive/audio/ audio

    推送本地文件到服务器

    rsync -av -e "ssh -p your_port" audio/ pi@ip:/mnt/myharddrive/audio
  • git知识点

    git diff

    git diff是查看工作区修改的文件和暂存区的区别,经本人观察未追踪的文件(也就是新建还未提交过的文件)不会展示比较。

    暂存前后的变化

    书中是这样写的

    git diff

    “此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。
    也就是修改之后还没有暂存起来的变化内容。”

    git diff --staged

    git diff –staged 是查看暂存区和最新一次提交的区别

  • Docker部署nginx 搭建简单web页面

    前言

    如果你的服务器没有安装docker,可以使用get.docker.com一件脚本来安装docker,代码如下

    $curl -fsSL https://get.docker.com -o install-docker.sh
    $sudo sh install-docker.sh

    人非圣贤,上面这段代码肯定记不住的,到用的时候又不太好找,这里教一个小窍门,直接在浏览器打开get.docker.com,打开是一段脚本代码,可以在注释里找到我们想要的代码如下

    # 1. download the script
    #
    #   $ curl -fsSL https://get.docker.com -o install-docker.sh
    #
    # 2. verify the script's content
    #
    #   $ cat install-docker.sh
    #
    # 3. run the script with --dry-run to verify the steps it executes
    #
    #   $ sh install-docker.sh --dry-run
    #
    # 4. run the script either as root, or using sudo to perform the installation.
    #
    #   $ sudo sh install-docker.sh

    一 准备html

    新建一个html文件夹,在文件夹中新建index.html写上hello world

    mkdir html && cd html
    vim index.html

    二 准备Dockerfile文件

    在html的同级目录,新建Dockerfile

    FROM nginx
    COPY ./html /usr/share/nginx/html

    三 构建docker 镜像

    在Dockerfile的同级目录 运行下面命令

    docker build -t some-content-nginx .

    四 运行docker容器

    docker run --name some-nginx -d -p 8080:80 some-content-nginx

    在浏览器输入服务器ip:8080 就能打开网页了

  • 转自虎扑,去女友家拜访须知

    1、去女友家拜访,到她家附近时不可以再挽着她的手,因为她的邻居会品头论足一番。2、进家后,不要对她太随便、太亲热,她的家人在观察着你的一举一动,以免给人留下不好的印象。3、不可不时看手表,否则她的家人会认为你不愿意呆在她家。4、离去时不可一踏出门就露出松懈姿态,因为背后她的家人们还在观察你。5、还应注意一点,去女友家做正式拜访的前一天,一定要洗澡,更衣,要做到干净、整洁,切不可邋里邋遢,既不尊重对方,又给人留下不好的第一印象。最重要的是全身都散发出干净的清洁感,如肩膀上有头屑最让人恶心。男人通常都是以外表取胜,因为父母的眼睛很容易往细处看:干净、整齐的头发、胡子,衬衣领口和袖口洁净,指甲修理整齐、干净,长裤笔挺,干净的袜子的鞋。初登恋人家门,就像参加一场考试,既要注意服饰仪表,又要为应答交谈作好必要的准备。这可从四个方面进行:一是稳定情绪,自信真诚恳切,落落大方,肯定受欢迎;虚伪做作,扭扭捏捏,必然被嫌弃。有了自信心,紧张的心情便会慢慢平静。二是了解情况。询问恋爱对象,了解其家庭成员,父母的职业,文化,兴趣,经历,性格等,知道越详细越好。情况熟悉,才能先有准备,交谈时也能有的放矢。三是初拟内容。想想对方会提出些什么问题。在这种场合下,未来的岳父母常会问问你的家庭,工作,爱好等,自己可做些准备。四是适当准备礼物,初次去对方家里做客,适当送些礼物给对方的父母,很有必要,这不仅表明你对长辈的尊敬,更表明你的诚意,一般来说,对方父母是会接受的,但应注意,送的礼品不宜太贵重,否则起点太高,以后恐怕你难以为继。初次见面,双方难免感到拘束。寒暄之后,常会冷场。这时就要引出话题。一种方法是就地取材。仔细观察墙壁,窗台,桌子等,墙上的名人字画,窗台上的菊花,桌上的各种小摆设,都可借来入话。因为它们往往体现了主人的情趣爱好,能使主人讲出许多愉快的话来。另一种方法是避生就熟。引出话题要避开对方感到陌生的事,从对方最熟悉的入手,可以谈谈新闻,聊聊天气。对方父母提问时,要会叙述说明,态度要恭敬,声音略低一些,柔和些。把话一句句,一层层说清楚,谈话时一定彬彬有礼。长辈夸奖年轻人时,总爱说:“这孩子很懂事!”一般长辈衡量青年好坏的标准,除了天生的外貌和本人的才能外,就看他是否“懂事”,也就是是否能通晓情理。在与对方父母交谈时,你一定要注意礼貌问题,要做到谦虚恭敬,善解人意。初登恋人家门,应忌讳四个方面:一忌油嘴猾舌。说话要朴实,说心里话,如一池清水,清澈见底;不做作,不油滑。二忌自我吹嘘。要懂得:不表示自己聪明,就是聪明;不夸张自己的美德,就是美德。三忌胆小怯羞。要明白:越怕讲错,就越会讲错话;不怕讲错,反倒会使言谈顺畅。胆小,拘谨,害羞,是初登恋人家门交谈时的大忌。四忌粗言劣语。语言必须文明,不礼貌的口头禅,习惯语等,一定要戒除。对方父母请你家宴,说明他们对你有了初步好感,你切不可得意忘形,露出“野性”。由于来做客赴宴是“醉翁之意不在酒”,切末贪杯,喝个酩酊大醉,美好姻缘可能会因你一醉方休而毁于一旦。拜见家长怎么穿不适宜:不要在未来的岳父岳母面前表现你的小个性了,艺术家那样的披肩长发啦,络腮胡子啦,各种放荡不羁啦,请收敛起来吧,这只能给你减分。夏天的凉拖短裤,冬天挂满泥的球鞋和满是褶皱的裤子,还是早点换了吧。有汗脚的男孩,也要前期做好准备,不要穿不透气的鞋子,换双新袜子,不要让破洞在换鞋后暴露出来。拜见家长怎么送礼物适宜:送礼物是个大学问,现在已经不再是水果点心的年代了。在挑选礼物的时候,要跟女友商量着来,有没有对方父母一直想买但没有机会去买的东西。送这样的礼物,会让长辈觉得这孩子很贴心。像是茶叶、羊毛披肩这样既实用又有面子的礼物,再好不过了。礼物很重要,价格也很关键。我恰恰不赞同送过于贵重的礼物,毕竟是第一次见面,太贵重的礼物会让对方父母觉得你是不是故意在显示有钱呢,又或者不懂得节俭,这样怎么能过日子呢。拜见家长怎么称呼适宜:得体的礼貌,在初次见面中很重要。可以事先问问对方父母的出生年份,决定称呼叔叔阿姨还是伯父伯母,这样比统称叔叔阿姨更得体一些。跟女方父母交流时要带“您”。拜见家长怎么聊适宜:谈话时,语速要适中。长辈问什么就答什么,如果稍微有点冷场,男孩子可以主动引起一些话题,可以从对方父母的爱好展开话题,但态度要谦虚谨慎,大方得体,不要滔滔不绝。拜见家长怎么不适宜:在具体聊天的过程中,请新人注意一些禁忌。1、如果对方父母有身体不好的,请不要聊健康。2、不要涉及对方家里的私事,比如退休工资啦,以前的单位啦。3、不要滔滔不绝,那样会让人觉得特别不稳重,爱显示自己。遇上本身低调的父母,会觉得这个小伙子有点夸夸其谈。4、不要谈及财产之类比较敏感的话题,即使你家里物质条件好,也要低调。男方第一次去女方家相关事项:1、时间——最好是一天之中的上午,千万别晚上去(当然这得看你未来的岳父母的意识)这是一般的礼节,以示尊重,并暗示你是一个勤奋之人。2、送礼——男方第一次去女方家总不能空手而去,总会想买点礼物,这是很多男孩子好面子才这样想,但是究竟要买什么也拿不定主意。这个礼物不要太多,但是一定要买。要买好看的,拿得出手的,不一定要很实用(因为在他们心理,你毕竟还是“外人”,所以一定要体面)。3、礼貌——上一辈的人对这个看得是比较重的,第一次去女方家之前,男方可以先问问你女朋友她们那里有没有什么特殊的礼节,如没有特别的,则和长辈的交往中保持谦虚的态度可谓是最大的礼节吧,进女方家门时,男方嘴口一定要甜,比如微笑的问叔叔阿姨你好,这是初次登门给人的第一印象(很关键的)。4、言谈——在女方家人面前,男孩子要面带微笑,多听少说,认真聆听老人的言谈、并及时应和,说话时大方自然,但不可以得意忘形,保持诚恳、实诚的本色,也许你有些事情还没想好,如大人们问起也许不知怎么回答,那就照实回答,比胡谄强多了,老人往往要的是感觉,也给你的女友一种姿态,你接纳她并会善待她的父母。”多谢””不客气””你们别忙乎.我来”要常挂在嘴边,多说关心的话。5、话题——避开一些双方敏感的话题,多询问一些女友小时候的事,这是每个父母百说不厌的经典话题,尤其是值得夸耀的事,可问一些细节。当他们的思维跟你转的时候,就减轻了对你的注意力,同时他们会认为你关心他们的女儿。6、衣着——男方第一见女方家长,衣服不必刻意讲究有多华丽,只要整洁、干净,就行,但不要太随便,还有就是头发一定要干净。7、神态举止——自然、轻松、愉快。最好用几句简短的话,表明你对将来的打算,并征求他们的意见。对他们的回答哪怕有异议,也点头,微笑,以后再说,不要破坏此次的气氛。做些力所能及的小事吧,也许他们不会让你做,但态度是另外一回事。8、吃饭——注意用餐礼仪。对方父母请你家宴,说明他们对你有了初步好感,你切不可得意忘形,这很有可能是一次非常近距离的接触。因为从饭局能看出一个人的许多品性和性格,孰优孰劣一目了然。切记,当你在席间满口塞满饭菜,还滔滔不绝讲话的时候,你的形象分已经被减去好多。男生,你无论多饿,还是一口口慢慢吃。不要给自己堆好一大碗饭菜,然后埋头猛往嘴巴里面填。这样的行为,会显得你很粗俗。 吃饭过程还要给家长多端茶倒水,男生要给女友夹菜,这些细节,家长都会看在眼里的。小贴士:由于来赴宴是“醉翁之意不在酒”,切莫贪杯,喝个酩酊大醉,美好姻缘可能会因你一醉方休而毁于一旦。小冰有一个老家的表哥就是因为贪杯,经不住女方家人的轮番劝酒,自己的酒量又有限,知道自己酒量有限还充面子海喝,结果喝得自己都不知道怎么回家的。没过两天,女方那边带话过来就把这门亲事给吹了。9、其他——第一次会面的时间最好不要太长,最好不要住在女方家里,有的家庭很忌讳这个,速战速决,见好就撤,以便为下次会面留下良好的期待。多注意观察,比如看见家里长了花草,就装作很感兴趣可以询问饲养花草的方法,要是看见有什么古董之类的陈设,可以赞美一番。总之就是要抓住岳父母的爱好,他会很有兴趣,觉得你是同道中人。

  • 阿里云服务器git pull/push无法使用

    原因:

    国内服务器厂商墙了github.com

    如何解决:

    一,获取github.com的服务器ip

    我搜索了好久,终于在网上找到了可以查询多地区ping的网站 ping.sx,我们打开网站ping.sx,查询github.com的ping值

    二,我们随便找复制一个ip在本地机器查看能否ping通,比如我们复制一个日本地区ping出的ip 20.27.177.113

    ping 20.27.177.113

    如果不能ping通,我们就换一个ip,总有能ping通的

    三,修改服务器的hosts文件,hosts的目录在/etc/hosts,这里我们就需要刚才能ping通的ip地址

    vim /ect/hosts
    20.27.177.113  github.com 
    20.27.177.113  www.github.com 

    这样我们就设置好了。

  • html5中 img标签的srcset属性有什么作用以及如何使用

    srcset属性在img标签中的作用主要是为了实现响应式图片,使得在不同的设备或者不同的分辨率下,都能够展示适应的图片效果。

    srcset属性允许你为一张图片定义多个源,这样浏览器就可以根据当前设备的特性(例如视口宽度、设备像素比等)来选择最合适的图片进行渲染。

    srcset属性的使用方法如下:

    <img srcset="img-320w.jpg 320w,
                 img-480w.jpg 480w,
                 img-800w.jpg 800w"
         sizes="(max-width: 320px) 280px,
                (max-width: 480px) 440px,
                800px"
         src="img-800w.jpg" alt="responsive image">
    

    在上面的例子中,srcset定义了三个不同的图片源,320w, 480w, 800w分别代表这三张图片的宽度。sizes属性定义了在不同的视口宽度下,图片所应占据的展示空间的宽度。

    如果浏览器不支持srcset属性,那么就会回退到src属性指定的图片源。

    在使用srcset时,需要确保你提供的每一个图片源,都要有相应的尺寸描述符(例如上面例子中的320w),这样浏览器才能正确的选择最合适的图片源。

  • 阿里云函数计算快速部署静态网页

    一、安装 s工具

    必须条件:node.js(>=12.0.0)

    官网是https://serverless-devs.com/

    npm install @serverless-devs/s -g

    判断是否安装成功

    s -v

    二、初始化项目

    通过在他们官网搜索,我找到了这个名叫start-nginx的应用

    通过如下命令,初始化一下

    s init start-nginx -d start-nginx
    官方搜索应用的网址http://www.devsapp.cn/application.html

    三、修改nginx配置文件

    修改code/nginx.conf代码如下

    
    #user  nobody;
    #Defines which Linux system user will own and run the Nginx server
    
    worker_processes  auto;
    #Referes to single threaded process. Generally set to be equal to the number of CPUs or cores.
    
    #error_log  logs/error.log; #error_log  logs/error.log  notice;
    #Specifies the file where server logs. 
    
    #pid        logs/nginx.pid;
    #nginx will write its master process ID(PID).
    
    events {
        worker_connections  1024;
        # worker_processes and worker_connections allows you to calculate maxclients value: 
        # max_clients = worker_processes * worker_connections
    }
    
    
    http {
        # anything written in /opt/nginx/conf/mime.types is interpreted as if written inside the http { } block
        #
    
        #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  logs/access.log  main;
        # If serving locally stored static files, sendfile is essential to speed up the server,
        # But if using as reverse proxy one can deactivate it
        
        #tcp_nopush     on;
        # works opposite to tcp_nodelay. Instead of optimizing delays, it optimizes the amount of data sent at once.
    
        #keepalive_timeout  0;
        keepalive_timeout  900;
        # timeout during which a keep-alive client connection will stay open.
    
        #gzip  on;
        # tells the server to use on-the-fly gzip compression.
    
        server {
            # You would want to make a separate file with its own server block for each virtual domain
            # on your server and then include them.
            listen       9000;
            #tells Nginx the hostname and the TCP port where it should listen for HTTP connections.
            # listen 9000; is equivalent to listen *:9000;
            
            server_name  localhost;
            # lets you doname-based virtual hosting
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
    
            location / {
                include       /etc/nginx/mime.types;
                root   /code;
                index  index.html index.htm;
           }
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }

    其中关键的一步是,在初始化的配置文件中添加了这段代码

            location / {
                include       /etc/nginx/mime.types;
                root   /code;
                index  index.html index.htm;
            }

    四、静态代码

    把静态代码复制到code目录下

    五、部署代码

    s deploy
    
  • mac如何使用brew安装php7.4版本

    一、前言

    现在是2023年8月,我本想使用如下命令安装php7,

    brew install php@7.4

    但发现brew官方已经不支持

    二、我是这样安装的

    如果你本地没有安装过其他版本的php,命令如下

    brew tap shivammathur/php
    brew install shivammathur/php/php@7.4
    brew link php@7.4

    如果你之前安装过其他版本的php,需要先unlink一下,比如我的本地安装了php@8.1

    brew unlink php@8.1
    brew link php@7.4

    三、安装brew-php-switcher

    brew install brew-php-switcher

    安装玩第二步以后基本可以实现了,也可安装这个brew-php-switcher包来切换php的版本

    具体用法如下

    切换的前提是你已经安装了多个版本的php

    brew-php-switcher 7.4 -s
    brew-php-switcher 8.1 -s
  • docker本地开发thinkphp

    本地开发thinkphp可以使用docker-compose来配置一个本地的开发环境,要是使用到的镜像有php,nginx,mysql,phpmyadmin,主要用的是前两个,后面两个可以根据项目来判断是否需要。

    文件目录如下

    1. docker文件夹放dockerfile和其他配置文件
    2. html文件夹放thinkphp源码
    3. log是nginx的日志文件
    4. mysql是mysql的数据文件夹
    5. docker-compose.yml

    首先我们新建文件夹mythinkphp,并在文件夹中创建docker-compose.yml文件。

    你需要将下面配置中的mysql环境变量定义成自己的,有了这些你就可以使用phpmyadmin的后台管理数据库了。

    version: '3.9'
    services: 
      db:
        image: mysql:5.7
        volumes:
          - ./mysql:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: yourpassword//1设置root的密码
          MYSQL_DATABASE: thinkphp//2设置数据库名
          MYSQL_USER: thinphp//3设置数据库用户名
          MYSQL_PASSWORD: &fhf%$#pa//4设置数据库密码
        depends_on:
          - php
      nginx:
        build: ./docker/nginx/
        container_name: nginx-container
        ports: 
          - 1234:80
        volumes:
          - ./html:/var/www/html
          - ./log:/var/log/nginx/
        links:
          - php
      php:
        # image: php:7.4-fpm
        build: ./docker/php/
        container_name: php-container
        expose:
          - 9000
        volumes: 
          - ./html:/var/www/html
          # - ./phpconfig:/usr/local/etc/php/
      phpmyadmin:
        image: phpmyadmin
        restart: always
        ports:
          - 8080:80
        depends_on:
          - db

    如何再创建一个docker的文件夹,主要放镜像的dockerfile文件和其他配置文件

    /docker/nginx/Dockerfile

    FROM nginx:latest   
    COPY ./default.conf /etc/nginx/conf.d/default.conf

    nginx的配置文件/docker/nginx/default.conf

    server {  
    
         listen 80 default_server;  
         root /var/www/html/tp5/public;  
         index index.html index.php;  
    
         charset utf-8;  
    
    
    
         location / {
             if (!-e $request_filename) {
       		rewrite  ^(.*)$  /index.php?s=/$1  last;
              }
         }  
    
         location = /favicon.ico { access_log off; log_not_found off; }  
         location = /robots.txt { access_log off; log_not_found off; }  
    
         access_log off;  
         error_log /var/log/nginx/error.log error;  
    
         sendfile off;  
    
         client_max_body_size 100m;  
    
         location ~ .php$ {  
          fastcgi_split_path_info ^(.+.php)(/.+)$;  
          fastcgi_pass php:9000;  
          fastcgi_index index.php;  
          include fastcgi_params;  
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
          fastcgi_intercept_errors off;  
          fastcgi_buffer_size 16k;  
          fastcgi_buffers 4 16k;  
        }
    
         location ~ /.ht {  
          deny all;  
         }  
        } 

    php的容器生成文件/docker/php/Dockerfile

    FROM php:7.4-fpm
    RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
    RUN docker-php-ext-install mysqli pdo_mysql

    接下来我们将thinkphp的文件放入tp5的文件夹,并放到html文件夹中

    设置完成后,我们就可以启动本地环境了

    docker-compose up -d
    • 加-d参数意思在后台启动服务

    关闭本地环境

    docker-compose down

    这就是thinkphp用docker的方式配置的的本地开发环境。