Linux命令笔记[九]

查看一个文本里面,最后四位字符相同的有哪些,命令:cat test.csv | rev | cut -c -4 | rev | sort | uniq -c | sort -nnrk1 | head -20

编译软件 ./configure 时报错:No package ‘glproto’ found
然后下载 glproto 编译安装成功后,这个报错还是在,发现 glproto 安装时的日志: /usr/bin/install -c -m 644 glproto.pc ‘/usr/local/lib/pkgconfig’
于是添加参数
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
再 ./configure 就可以解决这个报错

ubuntu查看所有network interfaces:
ls /sys/class/net
# or
ip addr
参考 https://help.ubuntu.com/community/NetworkConfigurationCommandLine/Automatic

ubuntu server 启动时显示 :a start job is running for raise network interfaces
配置timeout参数:/etc/systemd/system/networking.service.d/reduce-timeout.conf
http://unix.stackexchange.com/questions/186162/how-to-change-timeout-in-systemctl

supervisor配置不用sudo操作,配置下 unix_http_server 节点下面 chown 值,配置成当成用户。
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
chown=deploy:deploy

给用户修改默认shell: chsh -s /bin/bash deploy
给用户创建家目录:mkhomedir_helper deploy

Linux禁用一个帐号:usermod –lock –expiredate 1970-01-01 <username>,删除一个帐号:userdel <username>,加上 -r 参数将删除其所有相关文件,home目录等。

获取自己的外网ip信息:curl ipinfo.io

设置每次开机启动时运行一个脚本,可以在 crontab 中写规则 :
#crontab -e
@reboot /home/user/test.sh

树莓派将wifi电源管理关闭掉,否则当没有流量时,wifi会自动关闭:sudo iwconfig wlan0 power off ,查看power management 状态: iwconfig

列出可用的wifi列表:
nmcli dev wifi
连接wifi:
nmcli dev wifi connect [SSID] password [YourPassword]

列出所有linux用户: compgen -u ,列出所有 group:compgen -g

用brew安装的vim默认没有lua的支持,所以neocomplete自动补全插件无法正常使用。可以先 brew uninstall vim,再 brew install lua luajit,然后安装vim:brew install vim –with-lua

iptables中,使用-j DROP 与 -j REJECT区别是,REJECT会立刻返回一个connection refused,而DROP什么也不会返回,请求者会一直hang住等待请求,一直到超时。

Nginx报错『The plain HTTP request was sent to HTTPS port』,是因为同时配置了 80 与 443 端口,如:
listen 80;
listen 443;
ssl on;
修改为:
listen 80;
listen 443 ssl;
删掉 ssl on。

查看磁盘的UUID: ll /dev/disk/by-uuid/ , 或者:sudo blkid

设置开机自动挂载磁盘,修改 /etc/fstab ,参考 http://www.linuxstall.com/fstab/ , https://wiki.archlinux.org/index.php/Fstab

在jenkins上面配置新用户jenkins去build docker image,报错:Cannot connect to the Docker daemon. Is the docker daemon running on this host?,原因为jenkins用户默认无daemon的访问权限 /var/run/docker.sock ,把jenkins用户添加到docker组就可以了:sudo gpasswd -a jenkins docker ,需要重新登陆用户

ai文件转换为svg工具地址:https://convertio.co/zh/ai-svg/

让某一个linux用户,在执行sudo命令时不需要输入密码,只在运行某个特定程序时:
sudo visudo
Then edit that file to add to the very end:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
eg
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

mount NFS系统命令报错:mount: wrong fs type, bad option, bad superblock on ,解决: sudo apt-get install nfs-common

pip查看包的所有可用版本, pip install tzwhere==999999 will print a list of all availabe versions because this ridiculously high version can’t be satisfied.

查看ip对应的域名,用host命令:
host 66.249.65.88
88.65.249.66.in-addr.arpa domain name pointer crawl-66-249-65-88.googlebot.com.

通过ssh的log查找是谁的帐号登陆的:
grep 117.136.45.152 /var/log/auth.log
Jun 26 17:42:55 iZ94uqve4b4Z sshd[22502]: Accepted publickey for git from 117.136.45.152 port 42075 ssh2: RSA 2b:fa:76:eb:4a:f9:8e:1f:9c:7b:6a:43:1e:a7:91:62
其中最后的 RSA值为 ssh fingerprints,查看当前授权过的ssh登录用户所有fingerprints命令:ssh-keygen -lf /home/git/.ssh/authorized_keys,然后再和上面auth.log里面的对比。
如果auth.log没有输出RSA的fingerprints,则修改 /etc/ssh/sshd_config,设置 LogLevel VERBOSE

shell中无限sleep的命令:sleep infinity, sleep 2 就是休息2秒。

supervisor中启动的程序,需要设置系统的环境变量时,可以在supervisor的配置文件中添加节点:
environment = LD_LIBRARY_PATH=~/facelib/

nginx location 规则测试工具:http://nginx.viraptor.info/

mac中查看磁盘加密进度:diskutil cs list ,其中显示的 Conversion Progress: 16% ,注意电脑必须插上电源,否则状态一直是 Conversion Progress: Paused

ssh出现连接错误: ssh_exchange_identification: read: Connection reset by peer
可以再开一个ssh,运行调试模式:/path/to/sshd -ddd -p 1022,然后 ssh -p 1022 user@host ,在服务端查看日志。

查看被 fial2ban ban掉的ip历史,sudo zgrep ‘Ban’ /var/log/fail2ban.log* zgrep是grep压缩日志文件

dstat -tcmdsn -N eth0 –top-cpu-adv –top-mem 快速实时查看内存,cpu,磁盘等占用信息。

用dig命令查看域名是否被污染:dig -t ns @192.5.6.30 twitter.com

利用ssh转发端口,连接远程只绑定了127.0.0.1地址的mysql服务: ssh -L 127.0.0.1:3306:127.0.0.1:3306 -L 127.0.0.1:9200:127.0.0.1:9200 root@kyle.ai -N ,然后 mysql 连接本地的3306端口就行了。

在 Linux 虚拟机中手动安装 Parallels Tools http://kb.parallels.com/cn/121370

在macos中使用 matplotlib 时报错:
from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework.
解决办法是 在配置文件 ~/.matplotlib/matplotlibrc 中写入: backend: TkAgg
或者,在你的Python代码中, import matplotlib as mpl then mpl.use(‘TkAgg’)
参考 https://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

pip install scipy 时,由于虚拟机内存太小,报错:MemoryError ,解决办法是不用cache :pip –no-cache-dir install scipy

在windows中通过virtualbox安装的linux虚拟机,共享windows目录到linux中去,结果在共享的文件夹下面无法创建软链接,如下解决,在virtualbox安装目录中执行如下命令:
VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1
其中,YOURVMNAME为虚拟机中linux系统的名称,YOURSHAREFOLDERNAME 为共享的目录名称。

没有root权限时安装supervisor
export PYTHONPATH=$PYTHONPATH:/home/yoursiteuser/bin
easy_install –install-dir=/home/yoursiteuser/bin supervisor

用vagrant启动一个box时,出现警告:“No guest additions were detected on the base box for this VM!”,原因是VirtualBox Guest Additions版本不匹配,安装 vagrant-vbguest 插件即可:vagrant plugin install vagrant-vbguest

git status 显示出的中文文件名乱码,解决 git config –global core.quotepath false

pip安装python包的时候报错:Cannot uninstall ‘urllib3’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall,旧版本依赖多,不能清晰的删除,此时应该忽略旧版本升级,sudo pip install elasticsearch –ignore-installed elasticsearch

nginx报错:stat() failed (13: Permission denied) ,原因是用户权限导致不能cd到目录,可以先测试下:sudo -u nginx stat /var/www/project/public/index.html ,如果 Permission denied 就有问题。需要添加nginx运行的用户相应权限:gpasswd -a www-data username ,chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static,或者修改nginx.conf配置文件,让nginx以指定用户账号运行:user vagrant;

在shell中使用代理,在 .bashrc 或 .zshrc 中设置如下内容
alias setproxy=”export ALL_PROXY=socks5://127.0.0.1:1080″
alias unsetproxy=”unset ALL_PROXY”
alias ip=”curl -i http://ip.cn”
在使用是手动调用这些命令进行设置。或者使终端总是使用代理:
export http_proxy=”socks5://127.0.0.1:1080″
export https_proxy=”socks5://127.0.0.1:1080″

如果用的是fish shell,则 vim ~/.config/fish/config.fish
alias setproxy=”export ALL_PROXY=socks5://127.0.0.1:1080 ;and export http_proxy=socks5://127.0.0.1:1080; and export https_proxy=socks5://127.0.0.1:1080″
alias unsetproxy=”set -e ALL_PROXY ;and set -e http_proxy; and set -e https_proxy”
alias ip=”curl -i http://ip.cn”

Linux的ext4文件系统下面,如何查看文件的创建时间:ls -i rsync.log 得到文件的 inode id,再 debugfs -R ‘stat <4981112>’ /dev/vdb, /dev/vdb是该文件所在的磁盘分区 ,如:
$ ls -i rsync.log
4981112 rsync.log
$ debugfs -R ‘stat <4981112>’ /dev/vdb