分類
說說

17102421

本來今天是1024,大夥還沒來得及慶祝就被送了份504大禮。

豆瓣未登入狀態的頁腳:
© 2005-2017 douban.com, all rights reserved 北京豆网科技有限公司
京ICP证090015号 京ICP备11027288号 网络视听许可证0110418号
京网文[2015]2026-368号 京公网安备11010502000728 新出网证(京)字129号
违法和不良信息举报电话:4008353331 [email protected]
中国互联网举报中心 电话:12377 《食品流通许可证》许可证:SP1101051510347287
新出发京批字第直160029号

分類
方法 软件

在安卓手機上使用xprivacy保護隱私

使用xprivacy需要root權限和xposed框架。獲取root權限和安裝xposed框架請參考https://forum.xda-developers.com/

以下內容機翻自yannick.12的貼子,原文地址https://forum.xda-developers.com/showpost.php?p=68744809&postcount=7

讓我們舉一個簡單的例子, 比如位置。

首先, 讓我們假設第二列是未選中的。這是最容易理解的情況。然後會發生什麼取決於第一列。

第一列-如果它選中, 那麼xprivacy將始終拒絕訪問的位置, 並把xprivacy里設置的假冒資訊給應用程式。

然而, 如果第一列沒有被選中, 那麼應用程式將能夠獲取您的實際位置。

這就是你對一個應用程式權限做出的回答, 它的答案是 "可以使用這個許可權嗎?" 總是相同的 (無論是 "總是" 還是 "從不")。第二列未選中, 第一列選項告訴應用程式是或否。

第二列控制您在xprivacy中看到的彈窗。如果選中第二列, 您將得到一個彈窗, 詢問是否允許該應用程式獲得許可權 (是否選中了第一列)。

彈窗有四種情況-"允許", "拒絕", "不知道", "哎呀我超時"。

"哎呀, 我超時了" 將給app第一列的答案。

如果您在彈窗中按一下 "允許", 然後 xprivacy 取消勾選設置中的第二列, 再取消勾選第一列, 並讓應用程式訪問您的真實位置。除非重新勾選 xprivacy 設置中的第二列, 否則彈窗不會再次出現。

如果你點擊 "拒絕" 然後 xprivacy 取消勾選第二列, 勾選第一列並給應用程式假位置。然後, 你將不會看到彈出。

如果您按一下 "不知道", 那麼我認為 * xprivacy 拒絕訪問 (無論第一列是否未選中), 並將第二列保留為選中狀態, 因此下次將再次詢問。

我怎麼發現的?嗯, 我不是從常見問題解答中讀到的!我昨天剛剛下載 xprivacy , 我發現它令人難以置信的困難。最後, 我下載了一個應用程式, 它顯示出你的 gps 位置, 沒有別的, 我只是測試。以上是我的總結。我希望它能幫助別人, 因為我希望我昨天讀過這個帖子。

請注意, 其他許可權的工作方式可能稍有不同。例如, 它不可能完全虛擬一整套互聯網資訊。您可以通過查看 xprivacy 設置來快速瞭解哪些資料可以偽造。例如, 你可以偽造你的電話號碼和你的 MAC 位址。但正如我已經說過, 你不能假冒你的互聯網, 你也不能偽造你的存儲-這是一個很好的主意, 因為如果你假裝讓一個應用程式寫到您的 SD 卡, 然後假裝讓它讀它, 它不能找到它剛剛寫過的東西, 這勢必會導致麻煩, 可能會比你剛拒絕它的時候更麻煩。


2021年更新:由於維護一個安全的 root 過的安卓系統越來越困難,而我也隨著年齡的增加而喪失了一部分好奇心,所以我現在使用開源應用 Shelter 來將自己不信任的應用隔離到獨立的區域。Shelter 雖不如 xprivacy 功能強大,但對於基本的隱私防護(通訊錄、地理位置、手機內的文件資料、避免應用後台運行)是沒有問題的。安裝使用也非常簡單方便,推薦大家試用。

本文更新於 2021/02/05。

分類
程序

使用xtrabackup備份mysql數據庫

本文主要記錄下使用percona xtrabackup 2.4來備份mysql數據。最終效果是實現mysql所在主機定時進行全量備份和增量備份並自動刪除舊備份文件。另有一台數據存儲機,定時通過ssh抓取各個mysql主機上的備份文件,保存更長時間後刪除舊文件。

用到的軟件和技術有:xtrabackup(免費的mysql備份程序),qpress(xtrabackup壓縮需要的依賴,據說壓縮比很高),python3.5(ssh的遠程抓取,因為我不會bash)。

mkdir -p /root/42/script
cd /root/42/script
#安裝qpress
wget http://www.quicklz.com/qpress-11-linux-x64.tar
tar xf qpress-11-linux-x64.tar
mv qpress /usr/local/bin/
#centos6安裝xtrabackup
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install libev -y
yum install percona-xtrabackup-24 -y
#新建backup.sh(來源未知)內容如下:
#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
 
BACKUP_BASE_DIR="/data/backup/xtrabackup"
INC_BASE_LIST="${BACKUP_BASE_DIR}/inc_list.txt"
XTRABACKUP_PATH="/usr/bin/innobackupex"
 
MYSQL_CNF="/etc/my.cnf"
MYSQL_HOSTNAME=127.0.0.1
MYSQL_USERNAME=root
MYSQL_PASSWORD=""
 
LOCK_FILE="/tmp/innobackupex.lock"
THREAD=3
 
mkdir -p ${BACKUP_BASE_DIR}
CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M)"
[[ -d ${CURRENT_BACKUP_PATH} ]] && CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M-%S)"
 
print_help(){
    echo "--------------------------------------------------------------"
    echo "Usage: $0 full | inc | help               "
    echo "--------------------------------------------------------------"
    exit 1
}
 
[[ $# -lt 1 || "$1" == "help" ]] && print_help
 
[[ -f "$LOCK_FILE" ]] && echo -e "Usage: rm -f $LOCK_FILE\nUsage: chattr -i $LOCK_FILE && rm -f $LOCK_FILE" && exit 1
 
FullBackup(){
    touch $LOCK_FILE
    chattr +i $LOCK_FILE
    local rc=0
    ${XTRABACKUP_PATH} \
    --defaults-file=${MYSQL_CNF} \
    --user=${MYSQL_USERNAME} \
    --password=${MYSQL_PASSWORD} \
    --host=${MYSQL_HOSTNAME} \
    --compress \
    --compress-threads=${THREAD} \
    --parallel=${THREAD} \
    --no-timestamp ${CURRENT_BACKUP_PATH} > ${CURRENT_BACKUP_PATH}_full.log 2>&1
    grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_full.log > /dev/null 2>&1
    if [ $? -ne 0 ];then
        rc=1
        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH}
    else
        echo "NULL|${CURRENT_BACKUP_PATH}|full" >> ${INC_BASE_LIST}
        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1
    fi
    chattr -i ${LOCK_FILE}
    rm -f $LOCK_FILE
    chattr +a ${INC_BASE_LIST}
    return $rc
}
 
IncBackup(){
    touch $LOCK_FILE
    chattr +i $LOCK_FILE
    local rc=0
    PREV_BACKUP_DIR=$(sed '/^$/d' ${INC_BASE_LIST} | tail -1 | awk -F '|' '{print $2}')
    ${XTRABACKUP_PATH} \
    --defaults-file=${MYSQL_CNF} \
    --user=${MYSQL_USERNAME} \
    --password=${MYSQL_PASSWORD} \
    --host=${MYSQL_HOSTNAME} \
    --compress \
    --compress-threads=${THREAD} \
    --no-timestamp --incremental ${CURRENT_BACKUP_PATH} \
    --incremental-basedir=${PREV_BACKUP_DIR} > ${CURRENT_BACKUP_PATH}_inc.log 2>&1
    grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_inc.log > /dev/null 2>&1
    if [ $? -ne 0 ];then
        rc=1
        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH}
    else
        echo "${PREV_BACKUP_DIR}|${CURRENT_BACKUP_PATH}|inc" >> ${INC_BASE_LIST}
        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1
    fi
    chattr -i ${LOCK_FILE}
    rm -f $LOCK_FILE
    chattr +a ${INC_BASE_LIST}
    return $rc
}
 
## 全量備份
if [ "$1" == "full" ];then
    FullBackup
fi
 
## 增量備份
if [ "$1" == "inc" ];then
    ## 若全量備份不存在,則執行全量備份
    if [[ ! -f ${INC_BASE_LIST} || $(sed '/^$/d' ${INC_BASE_LIST} | wc -l) -eq 0 ]];then
        FullBackup
    else
        IncBackup
    fi
fi
 
## 刪除22天前的備份
if [[ -d ${BACKUP_BASE_DIR} && $(pwd) != "/" ]];then
    find ${BACKUP_BASE_DIR} -name "$(date -d '22 days ago' +'%F')_*" | xargs chattr -i
    find ${BACKUP_BASE_DIR} -name "$(date -d '22 days ago' +'%F')_*" | xargs rm -rf
fi

#可能需要修改backup.sh中的如下參數
BACKUP_BASE_DIR="/data/backup/xtrabackup"
XTRABACKUP_PATH="/usr/bin/innobackupex"
 
MYSQL_CNF="/etc/my.cnf"
MYSQL_HOSTNAME=127.0.0.1
MYSQL_USERNAME=root
MYSQL_PASSWORD=""
#給腳本添加執行權限
chmod 755 /root/42/script/backup.sh
#执行一次全量备份
/root/42/script/backup.sh full
#如果沒有錯誤信息,就可以看到BACKUP_BASE_DIR下生成了備份文件
#檢查下cron是否啟動
service crond status
#如果未啟動則將cron設置為開機啟動並手動啟動下
chkconfig crond on
service crond start
#添加定時任務
crontab -e
#在底部新增內容
## 每周六凌晨3:30一次全量备份
## 每周二、四、日的凌晨3:30点执行增量备份
30 3 * * 6 /root/42/script/backup.sh full
30 3 * * 2,4,7 /root/42/script/backup.sh inc

本文更新於 2017/09/25。

分類
說說

17081812

“一警一辅”即可传唤抓捕
The dream need to be protected more.

分類
說說

17081218

被『黑幫三部曲番外篇』刷屏。

分類
软件

我的Git命令記錄

把本地項目傳到 Gitea

首先在 Gitea 新建項目,輸入項目名 YOUR_PROJECT_NAME,其他都不用動。

然後根據 Gitea 的提示,在本地執行下列命令:

#創建說明文檔
touch README.md
#創建忽略文檔,下面有個示例
touch .gitignore
#初始化 git 並推送至服務器
git init
git checkout -b main
(或 github 的 git branch -M main)
git add *
git commit -m "first commit"
git remote add origin https://git.disroot.org/user/YOUR_PROJECT_NAME.git
git push -u origin main

.gitignore 示例

# Django #
*.log
*.pot
*.pyc
__pycache__
db.sqlite3
/app1/migrations
/app1/profile_dir/*
*.lock

#mysite/settings.py
*.env
*.env_1
media
/static

# Backup files # 
*.bak 
*.log
*.log.*

# Eclipse # 
.project
.pydevproject

在服務器部署和更新 Git 代碼倉庫中的代碼

#Clone 項目到服務器
git clone https://git.disroot.org/user/YOUR_PROJECT_NAME.git
cd YOUR_PROJECT_NAME
#拉取代碼倉庫的更新
git fetch
git checkout origin main
[code]

<h3>?</h3>
<p>在服務器上初始化項目</p>
[code language="bash"]
cd /temp
git clone --bare /home/fred/Documents/workspace/amazon/.git amazon.git
scp -P 2009 -r amazon.git [email protected]:/data/42/git

在本地添加遠程項目

git remote add origin ssh://[email protected]:2009/data/42/git/amazon.git
git remote -v
#推送
git push origin master
#下載更新
git clone ssh://[email protected]:2009/data/42/git/unlock.git

本文更新於 2023/11/25。

分類
說說

外賣

早上看到樓道里的廣告,外面狂風暴雨,用戶享受外賣員冒風雨送來的食物非常開心。我和Emanon從不點外賣,如果是外面那麼大風雨,自己不願意淋雨就付錢讓別人淋,我們心裡過不去;如果是好天氣為什麼不自己出去吃呢,還能活動一下。另一個方面是外面的食物不可能比去店裡吃好吃,想象一下任何菜,直接出鍋裝盤上桌吃,和出鍋進外賣盒密封10分鐘吃口味色澤肯定是不同的。但現在似乎很多人完全不在乎口味,吃飯只是補充能量而以,並無樂趣可言。對於又懶又沒有味覺的人,我們表示遺憾;對於讓人變得更懶更麻木的公司,我們表示抵制。