1. mtcnn读书笔记

    mtcnn读书笔记

    2018/12/13 技术

  2. shell 学习笔记

    shell学习笔记 1. 一个命令的结果填充到另一个命令中 ssh例子: # 获取远程服务器的 ip, 并 ssh连接到该服务器上 ssh foo@$(cat /data/ip.result) docker例子: # 删除所有仓库名为 redis 的镜像: docker image rm $(docker image ls -q redis) 需要注意的是, 单引号与双引号的效果不一样, 需要使用双引号 举例说明如下, py_cmd.py模拟一个简单的 echo 命令: import argparse def echo_name(argv=None): parser = argparse.ArgumentParser(description='demo') # name parser.add_argument('--name', type=str, help='name') args = parser.parse_args(args=argv) print("name_{}".format(args.name)) if __name__ == '__main__': echo_name() 示例命令: name="M 1 M" c1=$(python py_cmd.py --name='${name}' ) echo "case1 ${c1}" # 输出: case1 name_${name} c2=$(python py_cmd.py --name="${name}" ) echo "case2 ${c2}" # 输出: case2 name_M 1 M 2. sudo执行echo命令 sudo sh -c "echo '{ \"registry-mirrors\": [\"https://registry.docker-cn.com\"] }' >> /etc/docker/daemon.json" 3. 清空文件 echo -n > ~/xx.conf 4. 常用命令 # 查看磁盘使用 df -lh # 查看当前目录所占空间 du -sh ./ 5. ssh命令 # 上传文件 scp ./local.file ubuntu@host:/remote/remote.file # 下载文件 scp ubuntu@host:/remote/remote.file ./local.file 6. 获取本机ip 获取本机ip: ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p' 获取当前虚拟机ip: ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p' | grep 192.168 7. 设置屏幕亮度为0 [[ "$(cat /sys/class/backlight/intel_backlight/brightness)" -ne "0" ]] && (echo 0 | sudo tee /sys/class/backlight/intel_backlight/brightness) 8. 复杂命令示例 来源docker配置 ARG CHROME_VERSION="google-chrome-stable" ARG CHROME_DRIVER_VERSION RUN apt-get update -qqy \ # install chrome && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \ && apt-get update -qqy \ && apt-get -qqy install ${CHROME_VERSION:-google-chrome-stable} \ && rm /etc/apt/sources.list.d/google-chrome.list \ # install chrome drive && if [ -z "$CHROME_DRIVER_VERSION" ]; \ then CHROME_MAJOR_VERSION=$(google-chrome --version | sed -E "s/.* ([0-9]+)(\.[0-9]+){3}.*/\1/") \ && CHROME_DRIVER_VERSION=$(wget --no-verbose -O - "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION}"); \ fi \ && echo "Using chromedriver version: "$CHROME_DRIVER_VERSION \ && wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip \ && rm -rf /opt/selenium/chromedriver \ && unzip /tmp/chromedriver_linux64.zip -d /opt/selenium \ && rm /tmp/chromedriver_linux64.zip \ && mv /opt/selenium/chromedriver /opt/selenium/chromedriver-$CHROME_DRIVER_VERSION \ && chmod 755 /opt/selenium/chromedriver-$CHROME_DRIVER_VERSION \ && ln -fs /opt/selenium/chromedriver-$CHROME_DRIVER_VERSION /usr/bin/chromedriver \ # install fonts && apt-get -qqy install ttf-wqy-zenhei ttf-wqy-microhei fonts-droid-fallback fonts-arphic-ukai fonts-arphic-uming \ # install selenium && pip install --upgrade selenium \ && rm -rf /root/.cache/pip/* \ && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 9. 环境变量动态设置 示例 LDFLAGS=-L/usr/local/opt/openssl/lib https_proxy="" http_proxy="" pip install mysqlclient 10. 安装 BBR wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && sudo chmod +x bbr.sh && sudo ./bbr.sh 11. tar 分卷压缩及解压 dd if=/dev/zero of=test.log bs=1M count=1000 # 压缩 tar zcf - test.log |split -b 100m - test.tar.gz. # 解压 mkdir -p test_tmp mv test.tar.gz.* test_tmp/ cd test_tmp/ cat logs.test.tar.gz.* | tar zx 12. debian系 系统安装 tzdata 免输入时区 DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata 13. 复杂条件的文件复制操作 mkdir -p /opt/python_libs # copy folder cp -r ~/code/my_libs /opt/python_libs/ # copy folder if exists [ -d "/opt/code/new_libs" ] && cp -r /opt/code/new_libs /opt/python_libs/ 14. 文件下载 # curl curl -o out.file -sfL http:xxx.com # wget wget -qO out.file http:xxx.com 15. 关闭进程 for pid in `ps -ef | grep python3 | grep "server.py" | grep -v grep | awk '{print $2;}'` do kill -9 $pid done 16. grep + awk + xargs 在实践中, 需要批量处理数据文件。 处理完成后, 将结果写入命名方式为 原文件名 + .upload 的结果文件中。 操作日志记录在 simple.log 中, 其日志内容格式如下: 2020-03-21 10:00:00 output to file: /tmp/abc_1.log.upload 2020-03-21 10:00:00 xxxx 2020-03-21 10:10:00 output to file: /tmp/abc_2.log.upload 2020-03-21 10:10:00 xxx1xxx 2020-03-21 10:20:00 output to file: /tmp/abc_4.log.upload 2020-03-21 10:20:00 .... 现在需要删除已经处理的原文件。 可以使用 grep + awk + xargs 实现: for filename in $(cat simple.log | grep "output to file" | awk '{print $NF}' | awk -F "/" '{print $NF}' ); do tmp_file="/tmp/${filename%%.upload}" if [ -f "$tmp_file" ]; then echo "$tmp_file can remove" rm "$tmp_file" fi done 17. 删除修改日期为一天以前的日志文件 #!/bin/bash while IFS= read -r -d '' file do if [[ $file =~ "tmp_" ]]; then let count++ echo "rm file $file" rm "$file" fi done < <(find /tmp/ -maxdepth 1 -mtime +1 -print0) echo "remove $count files from /tmp/ " 18. 删除以日期命名的文件目录 临时日志目录, 存在以下子目录: /var/log/result_20200102 /var/log/result_20200103 /var/log/result_20200104 .... /var/log/result_20200324 现在需要删除昨天以前的子目录, 具体实现如下 #!/bin/bash # 删除临时文件 today_str=$(date +%Y%m%d) yesterday_str=$(date -d -1day +%Y%m%d) for filename in /var/log/result_2020*; do if [[ $filename =~ $today_str ]]; then echo "$filename today" else if [[ $filename =~ $yesterday_str ]]; then echo "$filename yesterday" else echo "$filename remove" rm -r "$filename" fi fi done 19. 文本替换 linux 版本: # 找到所有 py 文件, 将 # print("data is {}".format(data)) # 替换为 # print("数据 是 {}".format(data)) find . -name "*.py" -exec sed -i s/print\(\"data\ is\ \{/print\(\"数据\ 是\ \{/g {} + mac 略有不同: # 找到所有 py 文件, 将 # print("data is {}".format(data)) # 替换为 # print("数据 是 {}".format(data)) find . -name "*.py" -exec sed -i '' s/print\(\"data\ is\ \{/print\(\"数据\ 是\ \{/g {} + 20. pushd 和 popd cd ~ # cd /tmp and do something pushd /tmp/ echo "abc" > abc.txt tar -czvf abc.txt.tar.gz abc.txt popd # backup to ~ ls ./ 21. 获取文件 basename FILE="/home/vivek/lighttpd.tar.gz" basename "$FILE" # 输出: lighttpd.tar.gz f="$(basename -- $FILE)" echo "$f" # 输出: lighttpd.tar.gz 22. 多行文本 config_file="config" # 代码行 cat > ${config_file} <<EOF a=b b=c x=y EOF 23. linux挂载swap文件 # 挂载 swap sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 && \ sudo mkswap /swapfile && \ sudo chmod 600 /swapfile && \ sudo swapon /swapfile && \ sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab " && \ sudo sh -c "echo 10 >/proc/sys/vm/swappiness" # 停用 swap sudo swapoff /swapfile && \ sudo rm /swapfile 24. grep执行二进制文件过滤 日志文件 file_with_bin.log 包含二进制数据. 直接执行 grep 过滤 cat file_with_bin.log | grep "2020-07-18 01" 时, 报错 Binary file (standard input) matches. 解决方法是, 使用 -a 参数: cat file_with_bin.log | grep -a -20 "2020-07-18 01" 25. crontab/ssh 启动带gui 程序 参考: 使用crontab执行GUI程序. 例如, 脚本 ‘/start_selenium.sh’ 会以 headless=False 的方式, 启动 selenium, 在 ubuntu 桌面上启动 chrome 浏览器执行任务. 在自己主机中, 使用 ssh 远程到上述脚本所在的 ubuntu 主机, 可以使用命令启动脚本: export DISPLAY=:0 && ./start_selenium.sh 26. 默认输入 yes ```shell script wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_ubuntu18.04_amd64.deb && (yes sudo gdebi ossfs_1.80.6_ubuntu18.04_amd64.deb ) ## 26. crontab 查看错误日志 正常条件下, crontab 执行的脚本如果出错, 在 /var/log/syslog 中 看不到有用的信息. 这时, 需要借助 `postfix` 接收crontab 的执行日志. 具体原理, 可参考[迷之 crontab 异常:不运行、不报错、无日志](https://my.oschina.net/leejun2005/blog/1788342). 简要流程: step 1 安装 postfix, 并选择 local only sudo apt install -y postfix step 2 启动 postfix sudo service postfix start step 3 读取 crontab 的执行日志: tail -f /usr/mail/root ```

    2018/11/27 技术

  3. install ubuntu18.04

    install ubuntu18.04

    2018/10/17 技术

  4. 定时备份linux系统的history记录

    定时备份linux系统的history记录

    2018/10/17 技术

  5. asyncio异步请求示例

    asyncio异步请求示例

    2018/10/09 技术

  6. golang setting

    golang setting

    2018/10/07 技术

  7. git使用笔记

    git使用笔记 1.old mode 100755 new mode 100644 git config core.filemode false 2.换行符问题 参考 原因: git为了统一入库文件统一使用’\n’为换行符. 检出时根据配置转换换行符; 入库时自动转为’\n’. 但在中文环境中,该机制出问题. 解决: 配置参数,强制保持换行符统一. git 中有三个参数于换行符有关: eol: 设置工作目录中文件的换行符,有三个值 lf, crlf 和 native(默认,同操作系统) autocrlf: true 表示检出是转换CRLF, 提交时转换为 LF input 表示检出是不转换,提交时转换为 LF false 表示不做转换 safecrlf: true 表示不允许提交时包含不同换行符 warn 则只在有不同换行符时警告 false 则允许提交时有不同换行符存在 编辑 /.git/config 文件 [core] fileMode = false autocrlf = true safecrlf = true create .gitattributes file with content: # Set the default behavior, in case people don't have core.autocrlf set. * text eol=lf core.autocrlf=true core.fileMode=false fore change crlf if found error before git commit python -c "from pytools import git_crlf_helper as g;g()" -d . -t lf -i *.py -e *.pyc 3.删除历史记录 参考 删除历史记录中的 path-to-your-remove-file git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all 推送至服务器 git push origin master --force --all 4.子模块 添加子模块 git submodule add https://github.com/tensorflow/tensorflow sub/tensorflow 更新所有子模块 git submodule foreach git pull 5.merge commits merge all commits into one on a branch git merge --squash feature-branch && git commit -m "all commits" 6.github without password set ssh key cd ./pyxtools/ && git remote set-url origin git@github.com:frkhit/pyxtools.git 7.proxy set proxy git config --global https.proxy socks5://127.0.0.1:1080 git config --global http.proxy socks5://127.0.0.1:1080 clear proxy git config --global --unset http.proxy git config --global --unset https.proxy or, edit ~/.gitconfig 8.multi user 实现不同项目使用不同用户, 关键是设置gitconfig文件 全局配置: vim ~/.gitconfig 项目配置 vim .git/config 9.拉取所有分支 ref: https://stackoverflow.com/questions/10312521/how-to-fetch-all-git-branches author: Wookie88 (git --no-pager branch -r | grep -v "\->" | while read remote; do git --no-pager branch --track "${remote#origin/}" "$remote"; done) && git fetch --all && git pull --all 10.删除所有本地分支 参考:GIT本地删除除master以外所有分支 git checkout master && (git --no-pager branch | grep -v "\<master\>" | xargs git branch -D) Note: 要求无修改 本地分支仅保留 master 更新所有分支: git checkout master && (git --no-pager branch | grep -v "\<master\>" | xargs git branch -D) && (git --no-pager branch -r | grep -v "\->" | while read remote; do git --no-pager branch --track "${remote#origin/}" "$remote"; done) && git fetch --all && git pull --all 11.标签操作 新建标签: git tag <tag_name> 删除标签: git tag -d <tag_name> 查看所有标签: git tag --list 将标签推送到远程服务器: git push --tags 删除远程标签: git push origin --delete tag <tag-name> 12. ssh 代理 当使用类似 git clone git@github.com:frkhit/frkhit.github.io.git 的方式连接 git 服务器时,~/.gitconfig 中设置的代理便不能使用。 正确的方法是, 在 ~/.ssh/config 增加配置: Host github.com HostName github.com User git # http proxy # ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=9999 # socks5 ProxyCommand nc -v -x 127.0.0.1:1080 %h %p 执行 git 命令访问 github.com, 会有类似这样的提示: Connection to github.com port 22 [tcp/ssh] succeeded!

    2018/10/07 技术

  8. Ubuntu16.04下配置python3环境

    Ubuntu16.04下配置python3环境 1.默认使用python3.6 首先按照教程[]安装python3.6环境。 配置环境: # 默认python3 echo "alias python=python3" | sudo tee -a /etc/profile echo "alias python=python3" | tee -a ~/.bashrc # 默认pip3 echo "alias pip=pip3" | sudo tee -a /etc/profile echo "alias pip=pip3" | tee -a ~/.bashrc # 激活配置 source /etc/profile source ~/.bashrc 2.修改pypi源 新建pip.conf文件 mkdir ~/.pip vim ~/.pip/pip.conf pip.conf中添加内容: [global] index-url = http://pypi.mirrors.ustc.edu.cn/simple/ [install] trusted-host=pypi.mirrors.ustc.edu.cn

    2018/04/18 技术

  9. 将Ubuntu16.04升级为Ubuntu18.04(development branch)

    将Ubuntu16.04升级为Ubuntu18.04(development branch)

    2018/04/05 技术

  10. Ubuntu16.04下源码安装python3.6

    Ubuntu16.04下源码安装python3.6

    2018/03/29 技术