linux命令行使用,以及各种问题杂记

本文是对使用过的linux命令行的一些杂记,包括使用方法和遇到的一些问题,懒得分类了,因为参考文档很给力,所以这里主要记录一些使用过程中遇到的问题及解决方法,使用方法就不写了。

参考文档:
linux命令大全 : 这里收录了linux的命令行的说明及实例
ubuntu manuals : 这是ubuntu的官方wiki,对ubuntu的各个版本及各种工具做了最全面的介绍

shell的进制转换

** 其它进制转十进制
** 使用`((进制#数字))`运算符
$ echo $((16#0fff))
4095

** 十进制转其它进制
** 使用`bc`,用法:`echo "obase=进制; 十进制数" | bc`
** 如果没有,可通过apt源下载
$ sudo apt-get install bc
$ echo "obase=16; 4095" | bc
FFF 

pip3无法通过APT源进行下载

一般而言,采用apt源的方式下载pip3,但不一定能成功,这时可以用curl直接下载
$ sudo apt-get update
$ sudo apt-get -y install python3-pip

$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python3 get-pip.py --user	## 注意,此时它被放在<~/.local/bin>下

有趣的文本工具 figlet, toilet, fortune, cowsay

如下

## 下载都是如下所示
$ sudo apt-get install figlet
## 演示
$ figlet -c "I love Linux"
               ___   _                  _     _
              |_ _| | | _____   _____  | |   (_)_ __  _   ___  __
               | |  | |/ _ \ \ / / _ \ | |   | | '_ \| | | \ \/ /
               | |  | | (_) \ V /  __/ | |___| | | | | |_| |>  <
              |___| |_|\___/ \_/ \___| |_____|_|_| |_|\__,_/_/\_\

$ toilet -f pagga "sky"
░█▀▀░█░█░█░█
░▀▀█░█▀▄░░█░
░▀▀▀░▀░▀░░▀░   

## fortune是格言生成工具
$ fortune | cowsay
 ________________________________________
/ Let me put it this way: today is going \
\ to be a learning experience.           /
 ----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
## oneko是能在屏幕上跟随鼠标运动的动画
$ oneko

find 正则表达式

$ find {path} -regextype {option} -regex {regex}
$ find . -regextype "posix-egrep" -regex "*.log$"	##正则匹配所有log文件

shell loop | while read item

有时为了方便会使用"while read item"来处理循环,如下所示

$ ls *.deb | while read package
> do
> echo "--> $package"
> done

pip的升级遇到的一些问题

当pip升级时经常会出现一些异常,即入口文件有误,比如从pip19.1.xxx --> pip19.2.xxx. 这时出错的原因多半是更新的pip被安装到了新的地方(由pip指定的位置),而旧的pip版本依然存在,其入口程序文件没有被覆盖掉,导致失败。

  • /usr/lib/python2.7/dist-packages/pip
  • /usr/local/lib/python2.7/dist-packages/pip

上面两个路径是比较典型的情况,解决方法是将入口程序改正即可,当然还可以把旧的pip删除。

## step 1: 确定新pip模块的位置
$ python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> help(pip)
Help on package pip:

NAME
    pip

FILE
    /usr/local/lib/python2.7/dist-packages/pip/__init__.py

PACKAGE CONTENTS
    __main__
    _internal (package)
    _vendor (package)

DATA
    __version__ = '19.2.3'

VERSION
    19.2.3
## 可以看到最新的pip模块已经被加载了,其结构与上一版有部分改动

## step 2: 查看pip模块的入口方式
$ ls /usr/local/lib/python2.7/dist-packages/pip/
__init__.py  __init__.pyc  _internal  __main__.py  __main__.pyc  _vendor
$ cat __main__.py
...
from pip._internal import main as _main  # isort:skip # noqa
if __name__ == '__main__':
    sys.exit(_main())
...
## 可以很容易看出程序的入口方式

## step 3: 根据上述方式修改入口程序
$ vim $(which pip)
...
from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())
...

Pip Error : ‘module’ object has no attribute ‘Cryptography_HAS_SSL_ST’

这个问题出现过一次,比较详细的资料可以参考stackflow中的讨论,就结果而言,可以使用以下方法解决:

$ sudo apt-get --auto-remove remove python-openssl
$ sudo pip install pyOpenSSL

版权声明:本文为imgrass原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。