广告
本站里的文章大部分经过自行整理与测试
2017年12月27日星期三
OnionShare 匿名共享文件
1) 首先下载 OnionShare 和 Tor浏览器。下载后安装它们
https://onionshare.org/
https://www.torproject.org/projects/torbrowser.html.en
2) 从开始菜单打开 OnionShare, Add 一个文件, Start Sharing
它会产生一个 .onion 网址如
http://abc123def.onion/replace-basic
用 TOR 浏览器打开这个网址, 即可点选下载
其他网站或程序可以访问你的文件:
发件人使用 OnionShare 共享的文件不存储在任何服务器上
它直接托管在发件人的系统上
没有人可以窥探共享文件:
由于用户之间的连接是由洋葱服务和 Tor 浏览器加密的。
这使得连接安全,很难窃取文件
用户双方都是匿名的:
OnionShare 和 Tor 浏览器使发件人和收件人匿名
2017年12月22日星期五
GIT: 从 SSH 转 HTTPS (免输入密码)
1) 检查 repository 所用的连接 REMOTE URL
$ git remote -v
origin git@github.com:user/repo.git (fetch)
origin git@github.com:user/repo.git (push)
# 重新配置 REMOTE URL (从 SSH 改为 HTTPS)
$ git remote set-url origin https://github.com/user/repo
2) 配置
------ Linux ------
$ git config credential.helper store
------ Mac ------
$ git config --global credential.helper osxkeychain
------ Windows ------
$ git config --global credential.helper manager
3) 测试: 修改文件后, push 上载
$ git add <filename> / git rm <filename>
$ git commit -m "<title>"
# 第一次输入要 email 户口 和密码, 以后即便重启也不需再输入密码了
$ git push https://github.com/user/repo
4) 检查
会生成 2 个文件
$ cat ~/.gitconfig
[user]
email = uid@email.com
name = Jason Mun
[credential]
helper = store
$ cat ~/.git-credentials
https://<uid>%40<email.com>:<password>%23@github.com
%40: @
%23: #
$ git remote -v
origin git@github.com:user/repo.git (fetch)
origin git@github.com:user/repo.git (push)
# 重新配置 REMOTE URL (从 SSH 改为 HTTPS)
$ git remote set-url origin https://github.com/user/repo
2) 配置
------ Linux ------
$ git config credential.helper store
------ Mac ------
$ git config --global credential.helper osxkeychain
------ Windows ------
$ git config --global credential.helper manager
3) 测试: 修改文件后, push 上载
$ git add <filename> / git rm <filename>
$ git commit -m "<title>"
# 第一次输入要 email 户口 和密码, 以后即便重启也不需再输入密码了
$ git push https://github.com/user/repo
4) 检查
会生成 2 个文件
$ cat ~/.gitconfig
[user]
email = uid@email.com
name = Jason Mun
[credential]
helper = store
$ cat ~/.git-credentials
https://<uid>%40<email.com>:<password>%23@github.com
%40: @
%23: #
2017年12月20日星期三
2017年11月5日星期日
bcloud 安装包 - 编译/安装/卸载
https://github.com/yomun/bcloud-build
bcloud 是 Linux 版的 百度云网盘
现由 Yufeikang 接手 https://github.com/Yufeikang/bcloud
但不提供新的 bcloud 安装软件包下载,
所以本人自己制作新的安装包 DEB / RPM / TAR.XZ / TBZ2
不喜欢, 可以自己编译.. 需要的文件已准备好了.
bcloud 是 Linux 版的 百度云网盘
现由 Yufeikang 接手 https://github.com/Yufeikang/bcloud
但不提供新的 bcloud 安装软件包下载,
所以本人自己制作新的安装包 DEB / RPM / TAR.XZ / TBZ2
不喜欢, 可以自己编译.. 需要的文件已准备好了.
2017年10月30日星期一
Linux - 从源码编译 RPM
1) 在 Ubuntu 安装 rpmbuild 和 rpmlint
$ sudo apt install rpm rpmlint
* 在 Fedora, 可以用 rpmrebuild -p -e xxx.rpm 来得到 spec 文件
2) 准备源码 (tar.gz) 与 SPEC 文件
例子:
https://github.com/yomun/youdao-dict-rpm/blob/master/youdao-dict.temp.spec
3) 检查 SPEC 文件上编写是否有错误
$ rpmlint youdao-dict.spec
4)编译 RPM
将源码与 SPEC 分别放到 ~/rpmbuild/SOURCES 和 ~/rpmbuild/SPEC
$ fakeroot rpmbuild -ba youdao-dict.spec --target x86_64
5) 安装 rpm
$ sudo rpm -i youdao-dict-1.1.1-0.x86_64.rpm
例子:
https://github.com/yomun/youdao-dict-rpm/raw/master/build.sh
$ sudo apt install rpm rpmlint
* 在 Fedora, 可以用 rpmrebuild -p -e xxx.rpm 来得到 spec 文件
2) 准备源码 (tar.gz) 与 SPEC 文件
例子:
https://github.com/yomun/youdao-dict-rpm/blob/master/youdao-dict.temp.spec
3) 检查 SPEC 文件上编写是否有错误
$ rpmlint youdao-dict.spec
4)编译 RPM
将源码与 SPEC 分别放到 ~/rpmbuild/SOURCES 和 ~/rpmbuild/SPEC
$ fakeroot rpmbuild -ba youdao-dict.spec --target x86_64
5) 安装 rpm
$ sudo rpm -i youdao-dict-1.1.1-0.x86_64.rpm
例子:
https://github.com/yomun/youdao-dict-rpm/raw/master/build.sh
Linux - DEB 与 RPM 包间的转换
1) 安装 alien
$ su
$ apt install alien
2) 转换 deb -> rpm
$ alien -r squid_3.1.23-10_amd64.deb
3) 转换 rpm -> deb
$ alien squid-3.1.23-9.el6.x86_64.rpm
$ su
$ apt install alien
2) 转换 deb -> rpm
$ alien -r squid_3.1.23-10_amd64.deb
3) 转换 rpm -> deb
$ alien squid-3.1.23-9.el6.x86_64.rpm
2017年10月28日星期六
Python 打包 / 上传 / 安装 / 卸载
1) 制作
$ tree
$ eds
$ ├── edssdk
$ │ ├── help.py
$ │ └── __init__.py
$ └── setup.py
$ mkdir -p eds/edssdk
$ cd eds/edssdk
1.1) __init__.py
$ touch __init__.py
1.2) help.py 模块
$ cat help.py
#!/usr/bin/env python
def sum(*values):
s = 0
for v in values:
i = int(v)
s = s + i
print s
def output():
print 'http://jasonmun.blogspot.my'
1.3) setup.py
$ cat setup.py
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(
name = "edssdk",
version = "0.0.1",
keywords = ("pip", "datacanvas", "eds", "jason"),
description = "eds sdk",
long_description = "eds sdk for python",
license = "MIT Licence",
url = "http://jasonmun.blogspot.my",
author = "Jason Mun",
author_email = "jason@yahoo.com",
packages = find_packages(),
include_package_data = True,
platforms = "any",
install_requires = []
)
2) 打包
$ python setup.py bdist_egg # 生成类似 edssdk-0.0.1-py2.7.egg,支持 easy_install
$ python setup.py sdist # 生成类似 edssdk-0.0.1.tar.gz,支持 pip
3) 注册 PyPI 包 (注册户口, 以上传到 PyPI)
$ python setup.py register
$ python setup.py sdist upload
4) 测试
# easy_install 来自 setuptools (pip list | grep setuptools)
$ sudo easy_install edssdk-0.0.1-py2.7.egg
$ pip list | grep edssdk
$ python -c "from edssdk import help; help.sum(3,5);help.output();"
$ sudo easy_install -m edssdk
$ sudo pip install edssdk
$ pip list | grep edssdk
$ python -c "from edssdk import help; help.sum(3,5);help.output();"
$ sudo pip uninstall edssdk
$ tree
$ eds
$ ├── edssdk
$ │ ├── help.py
$ │ └── __init__.py
$ └── setup.py
$ mkdir -p eds/edssdk
$ cd eds/edssdk
1.1) __init__.py
$ touch __init__.py
1.2) help.py 模块
$ cat help.py
#!/usr/bin/env python
def sum(*values):
s = 0
for v in values:
i = int(v)
s = s + i
print s
def output():
print 'http://jasonmun.blogspot.my'
1.3) setup.py
$ cat setup.py
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(
name = "edssdk",
version = "0.0.1",
keywords = ("pip", "datacanvas", "eds", "jason"),
description = "eds sdk",
long_description = "eds sdk for python",
license = "MIT Licence",
url = "http://jasonmun.blogspot.my",
author = "Jason Mun",
author_email = "jason@yahoo.com",
packages = find_packages(),
include_package_data = True,
platforms = "any",
install_requires = []
)
2) 打包
$ python setup.py bdist_egg # 生成类似 edssdk-0.0.1-py2.7.egg,支持 easy_install
$ python setup.py sdist # 生成类似 edssdk-0.0.1.tar.gz,支持 pip
3) 注册 PyPI 包 (注册户口, 以上传到 PyPI)
$ python setup.py register
$ python setup.py sdist upload
4) 测试
# easy_install 来自 setuptools (pip list | grep setuptools)
$ sudo easy_install edssdk-0.0.1-py2.7.egg
$ pip list | grep edssdk
$ python -c "from edssdk import help; help.sum(3,5);help.output();"
$ sudo easy_install -m edssdk
$ sudo pip install edssdk
$ pip list | grep edssdk
$ python -c "from edssdk import help; help.sum(3,5);help.output();"
$ sudo pip uninstall edssdk
CentOS - CURL - HTTP1.1 改为 HTTP2
1) 准备
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install libev libev-devel zlib zlib-devel openssl openssl-devel git
$ sudo yum -y install jansson-devel libxml2-devel libevent-devel python-devel
$ wget https://c-ares.haxx.se/download/c-ares-1.12.0.tar.gz -O /tmp/c-ares.tar.gz
$ mkdir -p /tmp/c-ares
$ tar -zxvf /tmp/c-ares.tar.gz -C /tmp/c-ares --strip-components=1
$ cd /tmp/c-ares
$ ./configure --libdir=/usr/lib64
$ make
$ sudo make install
$ git clone https://github.com/jemalloc/jemalloc.git
$ cd jemalloc
$ ./autogen.sh
$ make
$ sudo make install
2) nghttp2
$ cd ~/Downloads
$ git clone https://github.com/tatsuhiro-t/nghttp2.git
$ cd nghttp2
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
$ sudo make install
3) CURL
$ cd ~/Downloads
$ git clone https://github.com/bagder/curl.git
$ cd curl
$ ./buildconf
$ ./configure --with-nghttp2=/usr/local --with-ssl
$ make
$ sudo make install
4) 将 /usr/local/lib 写入 /etc/ld.so.conf.d/custom-libs.conf
$ su root
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/custom-libs.conf
$ ldconfig
$ ldconfig -p| grep libnghttp2
5) 测试
$ su user
$ cd ~/Downloads/curl
$ ./src/curl -V
$ ./src/curl --http2 -I https://nghttp2.org/
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install libev libev-devel zlib zlib-devel openssl openssl-devel git
$ sudo yum -y install jansson-devel libxml2-devel libevent-devel python-devel
$ wget https://c-ares.haxx.se/download/c-ares-1.12.0.tar.gz -O /tmp/c-ares.tar.gz
$ mkdir -p /tmp/c-ares
$ tar -zxvf /tmp/c-ares.tar.gz -C /tmp/c-ares --strip-components=1
$ cd /tmp/c-ares
$ ./configure --libdir=/usr/lib64
$ make
$ sudo make install
$ git clone https://github.com/jemalloc/jemalloc.git
$ cd jemalloc
$ ./autogen.sh
$ make
$ sudo make install
2) nghttp2
$ cd ~/Downloads
$ git clone https://github.com/tatsuhiro-t/nghttp2.git
$ cd nghttp2
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
$ sudo make install
3) CURL
$ cd ~/Downloads
$ git clone https://github.com/bagder/curl.git
$ cd curl
$ ./buildconf
$ ./configure --with-nghttp2=/usr/local --with-ssl
$ make
$ sudo make install
4) 将 /usr/local/lib 写入 /etc/ld.so.conf.d/custom-libs.conf
$ su root
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/custom-libs.conf
$ ldconfig
$ ldconfig -p| grep libnghttp2
5) 测试
$ su user
$ cd ~/Downloads/curl
$ ./src/curl -V
$ ./src/curl --http2 -I https://nghttp2.org/
Ubuntu - CURL - HTTP1.1 改为 HTTP2
1) 检测 CURL 是用 HTTP 1.1 还是 HTTP 2
$ curl -I https://nghttp2.org/
HTTP/2 200
2) 如果是 HTTP1.1
2.1) 编译工具
$ sudo apt install git g++ make binutils autoconf automake autotools-dev libtool pkg-config
$ sudo apt install zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev
$ sudo apt install libjansson-dev libjemalloc-dev cython python3-dev python-setuptools
2.2) nghttp2
$ git clone https://github.com/tatsuhiro-t/nghttp2.git
$ cd nghttp2
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
$ sudo make install
2.3) CURL
$ wget https://curl.haxx.se/download/curl-7.56.1.tar.bz2
$ tar -xvjf curl-7.56.1.tar.bz2
$ cd curl-7.56.1
$ ./configure --with-nghttp2=/usr/local --with-ssl
$ sudo make
$ sudo make install
2.4) 将 /usr/local/lib 写入 /etc/ld.so.conf.d/local.conf
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
$ ldconfig
2.5) 检测
$ curl -I https://nghttp2.org/
3) 嫌麻烦? 一个脚本, 搞定..
$ wget https://github.com/yomun/linux-init/raw/master/ubuntu/curl-http2.sh
$ sudo bash curl-http2.sh
$ curl -I https://nghttp2.org/
HTTP/2 200
2) 如果是 HTTP1.1
2.1) 编译工具
$ sudo apt install git g++ make binutils autoconf automake autotools-dev libtool pkg-config
$ sudo apt install zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev
$ sudo apt install libjansson-dev libjemalloc-dev cython python3-dev python-setuptools
2.2) nghttp2
$ git clone https://github.com/tatsuhiro-t/nghttp2.git
$ cd nghttp2
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
$ sudo make install
2.3) CURL
$ wget https://curl.haxx.se/download/curl-7.56.1.tar.bz2
$ tar -xvjf curl-7.56.1.tar.bz2
$ cd curl-7.56.1
$ ./configure --with-nghttp2=/usr/local --with-ssl
$ sudo make
$ sudo make install
2.4) 将 /usr/local/lib 写入 /etc/ld.so.conf.d/local.conf
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
$ ldconfig
2.5) 检测
$ curl -I https://nghttp2.org/
3) 嫌麻烦? 一个脚本, 搞定..
$ wget https://github.com/yomun/linux-init/raw/master/ubuntu/curl-http2.sh
$ sudo bash curl-http2.sh
2017年10月27日星期五
WireShark + Google Chrome - SSL 解码
1) 安装 WireShark 和 Google Chrome
$ sudo apt install wireshark
http://jasonmun.blogspot.my/2017/09/wireshark-dofile-has-been-disabled-due.html
http://jasonmun.blogspot.my/2016/05/linux-chrome.html
2) Google Chrome 运行添加系数
$ sudo gedit /usr/share/applications/google-chrome.desktop
Exec 处加入系数
-ssl-key-log-file=/home/${USER_ID}/Documents/ssl_key.log
3) 添加系统系数
$ export SSLKEYLOGFILE=/home/${USER_ID}/Documents/ssl_key.log
$ printenv SSLKEYLOGFILE
4) 打开 WireShark
Wireshark - Edit - Preferences - Protocols - SSL
- (Pre)-Master-Secret log filename
输入
/home/${USER_ID}/Documents/ssl_key.log
# 可以用这个脚本取代以上步骤 2-3 (用之前, 需修改里面的 USER_ID 系数)
$ wget https://github.com/yomun/linux-init/raw/master/soft/ssl-wireshark-set.sh
$ sudo bash ssl-wireshark-set.sh
$ sudo apt install wireshark
http://jasonmun.blogspot.my/2017/09/wireshark-dofile-has-been-disabled-due.html
http://jasonmun.blogspot.my/2016/05/linux-chrome.html
2) Google Chrome 运行添加系数
$ sudo gedit /usr/share/applications/google-chrome.desktop
Exec 处加入系数
-ssl-key-log-file=/home/${USER_ID}/Documents/ssl_key.log
3) 添加系统系数
$ export SSLKEYLOGFILE=/home/${USER_ID}/Documents/ssl_key.log
$ printenv SSLKEYLOGFILE
4) 打开 WireShark
Wireshark - Edit - Preferences - Protocols - SSL
- (Pre)-Master-Secret log filename
输入
/home/${USER_ID}/Documents/ssl_key.log
# 可以用这个脚本取代以上步骤 2-3 (用之前, 需修改里面的 USER_ID 系数)
$ wget https://github.com/yomun/linux-init/raw/master/soft/ssl-wireshark-set.sh
$ sudo bash ssl-wireshark-set.sh
Failed to load module "libcanberra-gtk-module.so"
在 Ubuntu 17.10 安装 VMware 时,
出现以下错误
Gtk-WARNING **: Failed to load module "libcanberra-gtk-module.so":
libcanberra-gtk-module.so: cannot open shared object file: No such file or directory
$ locate libcanberra-gtk-module.so
/usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so
/usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libcanberra-gtk-module.so
$ su
$ echo '/usr/lib/x86_64-linux-gnu/gtk-3.0/modules' > /etc/ld.so.conf.d/gtk-3.0.conf
$ ldconfig
出现以下错误
Gtk-WARNING **: Failed to load module "libcanberra-gtk-module.so":
libcanberra-gtk-module.so: cannot open shared object file: No such file or directory
$ locate libcanberra-gtk-module.so
/usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so
/usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libcanberra-gtk-module.so
$ su
$ echo '/usr/lib/x86_64-linux-gnu/gtk-3.0/modules' > /etc/ld.so.conf.d/gtk-3.0.conf
$ ldconfig
Ubuntu - 人脸识别
1) 安装
$ sudo apt install git cmake python-pip
$ sudo apt install libboost-all-dev
$ git clone https://github.com/davisking/dlib.git
$ cd dlib
$ mkdir build
$ cd build
$ cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .
$ cd ..
$ python setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA
$ pip install face_recognition
2) 运行
known_people/ 文件夹放人头照
unknown_pic/ 文件夹放一些需要辨认的照片
$ face_recognition known_people/ unknown_pic/
2017年10月26日星期四
Linux - 编译 / 加载 / 卸载 驱动模块
1) 源码 hello.c
$ sudo gedit hello.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}
module_init(hello_init); //向系统注册模块加载函数
module_exit(hello_exit); //向系统注册模块卸载函数
MODULE_AUTHOR("Jason <abc@gmail.com>"); //模块作者等信息声明,可选
MODULE_LICENSE("Dual BSD/GPL"); //模块许可证声明
MODULE_DESCRIPTION("A simple Hello World Module"); //模块描述声明,可选
MODULE_ALIAS("a simplest module"); //模块别名的声明,可选
2) Makefile 源码 (以下源码 make -C 前用 Tab 一次, 不然编译时会出现错误)
KVERS := $(shell uname -r)
PWD := $(shell pwd)
obj-m += hello.o
default:
make -C /lib/modules/$(KVERS)/build M=$(PWD) modules
3) 编译 (编译后, 除了 hello.c 和 Makefile, 会多出另外 6 个文件)
$ make
4) 加载模块
$ sudo insmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 14:00:00 ubuntu kernel: [15724.222701] Hello World enter
5) 卸载模块
$ sudo rmmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 15:00:00 ubuntu kernel: [15724.222701] Hello World exit
$ sudo gedit hello.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}
module_init(hello_init); //向系统注册模块加载函数
module_exit(hello_exit); //向系统注册模块卸载函数
MODULE_AUTHOR("Jason <abc@gmail.com>"); //模块作者等信息声明,可选
MODULE_LICENSE("Dual BSD/GPL"); //模块许可证声明
MODULE_DESCRIPTION("A simple Hello World Module"); //模块描述声明,可选
MODULE_ALIAS("a simplest module"); //模块别名的声明,可选
2) Makefile 源码 (以下源码 make -C 前用 Tab 一次, 不然编译时会出现错误)
KVERS := $(shell uname -r)
PWD := $(shell pwd)
obj-m += hello.o
default:
make -C /lib/modules/$(KVERS)/build M=$(PWD) modules
3) 编译 (编译后, 除了 hello.c 和 Makefile, 会多出另外 6 个文件)
$ make
4) 加载模块
$ sudo insmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 14:00:00 ubuntu kernel: [15724.222701] Hello World enter
5) 卸载模块
$ sudo rmmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 15:00:00 ubuntu kernel: [15724.222701] Hello World exit
2017年10月25日星期三
Ubuntu 17.10 - CrossOver
如果软件要显示中文, 如 QQ
$ cd /opt/cxoffice/share/wine/fonts
$ mv ume-ui-gothic.ttf ume-ui-gothic.ttf.backup
$ cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc .
如果要 CrossOver 里的 Wine 显示中文
$ sudo gedit /usr/share/applications/cxmenu-cxoffice-0-29ra4ke-CrossOver.desktop
Exec=env LC_ALL=zh_CN.UTF-8 /opt/cxoffice/bin/crossover %u
$ cd /opt/cxoffice/share/wine/fonts
$ mv ume-ui-gothic.ttf ume-ui-gothic.ttf.backup
$ cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc .
如果要 CrossOver 里的 Wine 显示中文
$ sudo gedit /usr/share/applications/cxmenu-cxoffice-0-29ra4ke-CrossOver.desktop
Exec=env LC_ALL=zh_CN.UTF-8 /opt/cxoffice/bin/crossover %u
sudo 免输入密码
每次打开终端, 用 sudo 都要输入密码,
是不是很麻烦?
$ su
以你登入的 ID 为文件名, 输入以下
$ gedit /etc/sudoers.d/<用户ID>
<用户ID> ALL=(ALL) NOPASSWD: ALL
储存, 关闭终端.. 然后再打开终端测试看看..
是不是很麻烦?
$ su
以你登入的 ID 为文件名, 输入以下
$ gedit /etc/sudoers.d/<用户ID>
<用户ID> ALL=(ALL) NOPASSWD: ALL
储存, 关闭终端.. 然后再打开终端测试看看..
2017年10月24日星期二
Ubuntu 17.10 - 用 NVidia, 需将其设置为 xOrg
安装 nvidia-384 后, 在
$ sudo gedit /etc/gdm3/custom.conf
将 # WaylandEnable=false 前面的 # 拿走, 储存, 重启..
因 nvidia 现不支持 Wayland 为显示服务器
(但 Ubuntu 17.10 预设用 Wayland), 所以必须要改用 xOrg
$ sudo gedit /etc/gdm3/custom.conf
将 # WaylandEnable=false 前面的 # 拿走, 储存, 重启..
因 nvidia 现不支持 Wayland 为显示服务器
(但 Ubuntu 17.10 预设用 Wayland), 所以必须要改用 xOrg
Ubuntu 17.10 - 移除 Ubuntu Dock
移除 Ubuntu Dock
$ sudo apt-get remove gnome-shell-extension-ubuntu-dock
启动 Hot Corners (左上角)
$ gsettings set org.gnome.shell enable-hot-corners true
$ sudo apt-get remove gnome-shell-extension-ubuntu-dock
启动 Hot Corners (左上角)
$ gsettings set org.gnome.shell enable-hot-corners true
Ubuntu 17.10 - 网易云音乐 - 不能打开
在 Ubuntu 17.10 打开 网易云音乐
会出现如下错误
/usr/share/themes/Ambiance/gtk-2.0/apps/mate-panel.rc:30:
error: invalid string constant "murrine-scrollbar", expected valid string constant
解决方法
$ sudo gedit /usr/share/applications/netease-cloud-music.desktop
Exec=netease-cloud-music %U --no-sandbox
Kubuntu 17.10
1) 出现警告(这个应该没什么影响): Unable to locate theme engine in module_path: "adwaita"
解决方法
$ sudo apt install gnome-themes-standard
2) 出现错误: failed to retrieve property `gtk-primary-button-warps-slider' of type `gboolean'
解决方法
$ vi ~/.gtkrc-2.0
$ gtk-primary-button-warps-slider=false 改为 gtk-primary-button-warps-slider=0
会出现如下错误
/usr/share/themes/Ambiance/gtk-2.0/apps/mate-panel.rc:30:
error: invalid string constant "murrine-scrollbar", expected valid string constant
解决方法
$ sudo gedit /usr/share/applications/netease-cloud-music.desktop
Exec=netease-cloud-music %U --no-sandbox
Kubuntu 17.10
1) 出现警告(这个应该没什么影响): Unable to locate theme engine in module_path: "adwaita"
解决方法
$ sudo apt install gnome-themes-standard
2) 出现错误: failed to retrieve property `gtk-primary-button-warps-slider' of type `gboolean'
解决方法
$ vi ~/.gtkrc-2.0
$ gtk-primary-button-warps-slider=false 改为 gtk-primary-button-warps-slider=0
2017年10月23日星期一
CentOS - 编译新的内核
1) 下载与解压内核源码
https://www.kernel.org/
$ su
$ mkdir -p /app/tmp
$ cd /app/tmp
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.13.9.tar.xz
$ tar xvJf linux-4.13.9.tar.xz
$ cd linux-4.13.9
2) 准备配置文件.config (拿 /boot/config 文件做 template), 备份 /boot/grub2/grub.cfg
$ cp /boot/config-3.10.0-514.el7.x86_64 /app/tmp/linux-4.13.9/.config
$ cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup
3) 安装编译工具
$ yum groupinstall "development tools"
$ yum install ncurses-devel
$ yum install openssl-devel -y
4) 配置内核选项
$ cd /app/tmp/linux-4.13.9
$ make menuconfig
5) 开始编译内核
$ make -j 8
6) 安装模块与内核相关文件
$ make modules_install
$ make install
$ ls /boot
新的文件:
/boot/config-4.13.9-*.el7.x86_64
/boot/initramfs-4.13.9-*.img
/boot/symvers-4.13.9-*.el7.x86_64.gz
/boot/System.map-4.13.9-*.el7.x86_64
/boot/vmlinuz-4.13.9-*.el7.x86_64
更改的文件:
/boot/grub2/grub.cfg
7) 卸载
a) 删除 /lib/modules 目录下不需要的内核库文件
b) 删除 /usr/src/kernels 目录下不需要的内核源码
c) 删除 /boot 目录下启动的内核和内核映像文件
d) 更改 grub 配置文件, 删除不需要的内核启动列表 (以上已备份了)
$ mv /boot/grub2/grub.cfg.backup /boot/grub2/grub.cfg
https://www.kernel.org/
$ su
$ mkdir -p /app/tmp
$ cd /app/tmp
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.13.9.tar.xz
$ tar xvJf linux-4.13.9.tar.xz
$ cd linux-4.13.9
2) 准备配置文件.config (拿 /boot/config 文件做 template), 备份 /boot/grub2/grub.cfg
$ cp /boot/config-3.10.0-514.el7.x86_64 /app/tmp/linux-4.13.9/.config
$ cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup
3) 安装编译工具
$ yum groupinstall "development tools"
$ yum install ncurses-devel
$ yum install openssl-devel -y
4) 配置内核选项
$ cd /app/tmp/linux-4.13.9
$ make menuconfig
5) 开始编译内核
$ make -j 8
6) 安装模块与内核相关文件
$ make modules_install
$ make install
$ ls /boot
新的文件:
/boot/config-4.13.9-*.el7.x86_64
/boot/initramfs-4.13.9-*.img
/boot/symvers-4.13.9-*.el7.x86_64.gz
/boot/System.map-4.13.9-*.el7.x86_64
/boot/vmlinuz-4.13.9-*.el7.x86_64
更改的文件:
/boot/grub2/grub.cfg
7) 卸载
a) 删除 /lib/modules 目录下不需要的内核库文件
b) 删除 /usr/src/kernels 目录下不需要的内核源码
c) 删除 /boot 目录下启动的内核和内核映像文件
d) 更改 grub 配置文件, 删除不需要的内核启动列表 (以上已备份了)
$ mv /boot/grub2/grub.cfg.backup /boot/grub2/grub.cfg
2017年10月22日星期日
Linux 撤除乱码或中文文件名 (inode)
先找到文件或文件夹的 inum 值
$ ll -i
1701817 -rw-rw-r-- 1 <userID> <userID> 87 Oct 4 13:26 格子文件名.sh
然后可以用 find 找出, 而且撤除
1) $ find ./* -inum 1701817 -delete
2) $ find ./* -inum 1701817 -exec rm -i {} \;
3) $ find ./* -inum 1701817 -exec rm -f {} \;
4) $ find ./* -inum 1701817 | xargs rm -f
5) $ rm `find ./* -inum 1701817`
$ ll -i
1701817 -rw-rw-r-- 1 <userID> <userID> 87 Oct 4 13:26 格子文件名.sh
然后可以用 find 找出, 而且撤除
1) $ find ./* -inum 1701817 -delete
2) $ find ./* -inum 1701817 -exec rm -i {} \;
3) $ find ./* -inum 1701817 -exec rm -f {} \;
4) $ find ./* -inum 1701817 | xargs rm -f
5) $ rm `find ./* -inum 1701817`
Linux - Google Chrome - GPU 功能全打开
打开 Google Chrome, 然后浏览 chrome://gpu
检查之..
如果发现 Graphics Feature 没全被打开,
你可以下载这个 BASH 运行.. (脚本会不时更新)
$ wget https://github.com/yomun/chrome-gpu/raw/master/chrome.sh
$ sudo bash chrome.sh
然后再检查 chrome://gpu, 功能应该全打开了
Graphics Feature Status
---------------------------------------------------------
CheckerImaging: Enabled
Native GpuMemoryBuffers: Hardware accelerated
Rasterization: Hardware accelerated
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
检查之..
如果发现 Graphics Feature 没全被打开,
你可以下载这个 BASH 运行.. (脚本会不时更新)
$ wget https://github.com/yomun/chrome-gpu/raw/master/chrome.sh
$ sudo bash chrome.sh
然后再检查 chrome://gpu, 功能应该全打开了
Graphics Feature Status
---------------------------------------------------------
CheckerImaging: Enabled
Native GpuMemoryBuffers: Hardware accelerated
Rasterization: Hardware accelerated
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
VirtualBox - Linux 虚拟机安装 VBoxGuestAdditions.iso
https://github.com/yomun/vboxguestadd
在 Linux 虚拟机里, 下载脚本 virtualbox.sh
用之前, 需修改以下系数
VBOX_VER="VirtualBox 版本"
USER_ID="在 LInux 虚拟机的户口 ID"
然后才在 Linux 虚拟机里运行 virtualbox.sh
(脚本会帮你下载 VBoxGuestAdditional.iso, 然后安装与设置)..
支持 Linux 分发版:
antergos
centos
debian
elementary
fedora
linux mint
manjaro
openSUSE
solus
ubuntu
zorin
在 Linux 虚拟机里, 下载脚本 virtualbox.sh
用之前, 需修改以下系数
VBOX_VER="VirtualBox 版本"
USER_ID="在 LInux 虚拟机的户口 ID"
然后才在 Linux 虚拟机里运行 virtualbox.sh
(脚本会帮你下载 VBoxGuestAdditional.iso, 然后安装与设置)..
支持 Linux 分发版:
antergos
centos
debian
elementary
fedora
linux mint
manjaro
openSUSE
solus
ubuntu
zorin
可以关闭的 Linux 系统服务
以下服务可以考虑关闭
1) 是 AccountsService 的一部分, AccountsService 允许程序获得
或操作用户账户信息 accounts-daemon
2) 提供了一个无密码的 root shell, 用于帮助调试 systemd: debug-shell
3) 提供布莱叶盲文设备支持 brltty
4) 开机报告错误 apport
5) 拨号连接网络 pppd-dns
6) 蓝牙服务 bluetooth
7) 打印服务 cups
8) 扫描服务 saned
9) 用于零配置网络发现, 使电脑超容易发现网络中打印机或其他的主机 avahi-daemon
10) 该服务是一个被 dbus 激活的守护进程, 用于提供移动宽频 ModemManager
以下脚本会不时更新
$ wget https://github.com/yomun/linux-init/raw/master/linux/stop-service.sh
$ sudo bash stop-service.sh
1) 是 AccountsService 的一部分, AccountsService 允许程序获得
或操作用户账户信息 accounts-daemon
2) 提供了一个无密码的 root shell, 用于帮助调试 systemd: debug-shell
3) 提供布莱叶盲文设备支持 brltty
4) 开机报告错误 apport
5) 拨号连接网络 pppd-dns
6) 蓝牙服务 bluetooth
7) 打印服务 cups
8) 扫描服务 saned
9) 用于零配置网络发现, 使电脑超容易发现网络中打印机或其他的主机 avahi-daemon
10) 该服务是一个被 dbus 激活的守护进程, 用于提供移动宽频 ModemManager
以下脚本会不时更新
$ wget https://github.com/yomun/linux-init/raw/master/linux/stop-service.sh
$ sudo bash stop-service.sh
YouTube-DL GUI
https://github.com/MrS0m30n3/youtube-dl-gui
是以 youtube-dl 为基础做出来的界面
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt update
$ sudo apt install youtube-dlg
或
1) youtube-dlg 编译与安装
$ sudo apt install youtube-dl
$ sudo apt install build-essential libgtk-3-dev
$ sudo apt install pip gettext python-twodict python-wxgtk3.0
$ sudo pip install youtube-dlg
2) 运行
$ sudo youtube-dl-gui
3) 其它
$ sudo gedit /usr/share/applications/youtube-dlg.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=YouTube DL GUI
Exec=sudo youtube-dl-gui
Icon=youtube-dl-gui
Categories=Network;
Comment=youtube-dl GUI
Linux - SQL Server 2017
安装 MsSql
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ add-apt-repository "https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list"
$ apt-get update
$ apt-get install -y mssql-server
第一次设置 ( Sql Server 有8个版本可选择)
$ /opt/mssql/bin/mssql-conf setup
查看是否在运行
$ systemctl status mssql-server
安装 mssql-tools 和 unixodbc-dev
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"
$ apt-get update
$ apt-get install -y mssql-tools unixodbc-dev
设置环境
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
$ source ~/.bashrc
连接与创建数据库 (例子)
$ sqlcmd -S localhost -U SA -P '<password>'
1> CREATE DATABASE TestDB
2> GO
退出
1> QUIT
卸载
$ apt-get remove mssql-server
$ sudo rm -rf /var/opt/mssql/
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ add-apt-repository "https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list"
$ apt-get update
$ apt-get install -y mssql-server
第一次设置 ( Sql Server 有8个版本可选择)
$ /opt/mssql/bin/mssql-conf setup
查看是否在运行
$ systemctl status mssql-server
安装 mssql-tools 和 unixodbc-dev
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"
$ apt-get update
$ apt-get install -y mssql-tools unixodbc-dev
设置环境
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
$ source ~/.bashrc
连接与创建数据库 (例子)
$ sqlcmd -S localhost -U SA -P '<password>'
1> CREATE DATABASE TestDB
2> GO
退出
1> QUIT
卸载
$ apt-get remove mssql-server
$ sudo rm -rf /var/opt/mssql/
LInux - 录制/回放终端会话 TermRecord
想录制终端的操作过程?
TermRecord 可以做到
https://github.com/theonewolf/TermRecord
# 安装
$ sudo pip install TermRecord
# 开始录制
$ TermRecord -o /tmp/session.html
# 停止录制
$ exit
TermRecord 可以做到
https://github.com/theonewolf/TermRecord
# 安装
$ sudo pip install TermRecord
# 开始录制
$ TermRecord -o /tmp/session.html
# 停止录制
$ exit
MultiBootUSB - 安装多个 Linux
MultiBootUSB 自由/开源跨平台,
允许你创建有多个 Linux 发行版的 U 盘
它还支持在任何时候可卸载任何发行版,
以便回收 U 盘上的空间, 安装其它发行版
https://github.com/mbusb/multibootusb/releases/
Ubuntu - 用 Anbox 运行 Android App
https://github.com/anbox/anbox
1) 安装 (运行 snap, 需要用原安装的内核)
$ sudo snap install --edge --devmode anbox
$ sudo add-apt-repository -y ppa:morphis/anbox-support
$ sudo apt update
$ sudo apt install -y anbox-modules-dkms
2) 运行 (NVidia 不行, 要用 Intel,
如果有安装 NVIDIA X Server Settings, 将 PRIME Profiles 改为 Intel)
$ anbox session-manager
3) 安装 apk (必须是 ARM 结构)
$ sudo apt install android-tools-adb android-tools-fastboot
$ adb install name-of.apk
https://www.apkmirror.com/
1) 安装 (运行 snap, 需要用原安装的内核)
$ sudo snap install --edge --devmode anbox
$ sudo add-apt-repository -y ppa:morphis/anbox-support
$ sudo apt update
$ sudo apt install -y anbox-modules-dkms
2) 运行 (NVidia 不行, 要用 Intel,
如果有安装 NVIDIA X Server Settings, 将 PRIME Profiles 改为 Intel)
$ anbox session-manager
3) 安装 apk (必须是 ARM 结构)
$ sudo apt install android-tools-adb android-tools-fastboot
$ adb install name-of.apk
https://www.apkmirror.com/
2017年10月21日星期六
Ubuntu - GenyMotion 安装
1) 下载 genymotion-2.8.0-linux_x64.bin
http://pan.baidu.com/s/1eRGyCP8 密码:wujt
2) 下载 2.8.0 文件
http://pan.baidu.com/s/1nuGQsJZ 密码:sodz
3) 安装 virtualBox
$ sudo apt update
$ sudo apt install virtualbox
4) 安装 genymotion
$ sudo ./genymotion-2.8.0-linux_x64.bin
5) 备份
$ cd /opt/genymobile/genymotion
$ sudo mv genymotion genymotion.orig
$ sudo mv genyshell genyshell.orig
$ sudo mv player player.orig
$ sudo mv libxcb.so.1 libxcb.so.1.orig
$ sudo mv libdrm.so.2 libdrm.so.2.orig
6) 解压 genymotion.zip, 代替 /opt/genymobile/genymotion/
genymotion
genyshell
player
$ sudo chmod 755 *
$ sudo chown root:root *
$ sudo cp * /opt/genymobile/genymotion
7) 运行
$ /opt/genymobile/genymotion/genymotion
8) INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 错误
http://pan.baidu.com/s/1i5MExTj 密码:5h1m
下载 Genymotion-ARM-Translation.zip, 将这个文件拖到模拟器上安装
9) 重启
重启后, 即可拖动 apk 安装到模拟器
http://pan.baidu.com/s/1eRGyCP8 密码:wujt
2) 下载 2.8.0 文件
http://pan.baidu.com/s/1nuGQsJZ 密码:sodz
3) 安装 virtualBox
$ sudo apt update
$ sudo apt install virtualbox
4) 安装 genymotion
$ sudo ./genymotion-2.8.0-linux_x64.bin
5) 备份
$ cd /opt/genymobile/genymotion
$ sudo mv genymotion genymotion.orig
$ sudo mv genyshell genyshell.orig
$ sudo mv player player.orig
$ sudo mv libxcb.so.1 libxcb.so.1.orig
$ sudo mv libdrm.so.2 libdrm.so.2.orig
6) 解压 genymotion.zip, 代替 /opt/genymobile/genymotion/
genymotion
genyshell
player
$ sudo chmod 755 *
$ sudo chown root:root *
$ sudo cp * /opt/genymobile/genymotion
7) 运行
$ /opt/genymobile/genymotion/genymotion
8) INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 错误
http://pan.baidu.com/s/1i5MExTj 密码:5h1m
下载 Genymotion-ARM-Translation.zip, 将这个文件拖到模拟器上安装
9) 重启
重启后, 即可拖动 apk 安装到模拟器
2017年10月13日星期五
wine - TIM
1) 安装 wine + winetricks
http://jasonmun.blogspot.my/2017/10/wine-microsoft-office-2013-32-bit.html
2) 创建 ~/.wine/TIM
$ env LC_ALL=zh_CN.UTF-8 WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
将 App -> Windows ver. -> 改为 Windows 7 (如果中英文显示有问题, 可以先跳过)
3) wine 和 winetricks 如果显示的是中文 (需要安装字型)
$ cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc ~/.wine/TIM/drive_c/windows/Fonts/
$ sudo chown <userID>:<userID> ~/.wine/TIM/drive_c/windows/Fonts/wqy-microhei.ttc
$ sudo gedit /wqy.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="wqy-microhei.ttc"
"Microsoft Sans Serif"="wqy-microhei.ttc"
"MS Sans Serif"="wqy-microhei.ttc"
"Tahoma"="wqy-microhei.ttc"
"Tahoma Bold"="wqy-microhei.ttc"
"SimSun"="wqy-microhei.ttc"
"Arial"="wqy-microhei.ttc"
"Arial Black"="wqy-microhei.ttc"
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 wine regedit
将 /wqy.reg 导入到注册表中后退出, 然后再运行以上看看,
这时候应该可以正常显示中英文了
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
将 App -> Windows ver. -> 改为 Windows 7
4) 需要的字型和 library
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winetricks
安装字体: corefonts cjkfonts
安装 Windows DLL 或组件: winetricks msxml6 riched20 riched30 vcrun6
5) 加入 [函数库] - [DLL 顶替] - [新增函数库顶替]
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
msxml6
riched20
riched32
6) 创建连接文件 TIM.sh
$ sudo gedit ~/.wine/TIM/TIM.sh
#!/usr/bin/env bash
EXEPATH=$(cd `dirname $0`;pwd)
export WINEPREFIX=$EXEPATH
export WINEDEBUG=-all
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
cd "$EXEPATH/drive_c/Program Files/Tencent/TIM/Bin"
wine TIM.exe
给予执行权限
$ sudo chmod +x TIM.sh
$ bash TIM.sh
http://jasonmun.blogspot.my/2017/10/wine-microsoft-office-2013-32-bit.html
2) 创建 ~/.wine/TIM
$ env LC_ALL=zh_CN.UTF-8 WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
将 App -> Windows ver. -> 改为 Windows 7 (如果中英文显示有问题, 可以先跳过)
3) wine 和 winetricks 如果显示的是中文 (需要安装字型)
$ cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc ~/.wine/TIM/drive_c/windows/Fonts/
$ sudo chown <userID>:<userID> ~/.wine/TIM/drive_c/windows/Fonts/wqy-microhei.ttc
$ sudo gedit /wqy.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="wqy-microhei.ttc"
"Microsoft Sans Serif"="wqy-microhei.ttc"
"MS Sans Serif"="wqy-microhei.ttc"
"Tahoma"="wqy-microhei.ttc"
"Tahoma Bold"="wqy-microhei.ttc"
"SimSun"="wqy-microhei.ttc"
"Arial"="wqy-microhei.ttc"
"Arial Black"="wqy-microhei.ttc"
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 wine regedit
将 /wqy.reg 导入到注册表中后退出, 然后再运行以上看看,
这时候应该可以正常显示中英文了
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
将 App -> Windows ver. -> 改为 Windows 7
4) 需要的字型和 library
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winetricks
安装字体: corefonts cjkfonts
安装 Windows DLL 或组件: winetricks msxml6 riched20 riched30 vcrun6
5) 加入 [函数库] - [DLL 顶替] - [新增函数库顶替]
$ WINEPREFIX=~/.wine/TIM WINEARCH=win32 winecfg
msxml6
riched20
riched32
6) 创建连接文件 TIM.sh
$ sudo gedit ~/.wine/TIM/TIM.sh
#!/usr/bin/env bash
EXEPATH=$(cd `dirname $0`;pwd)
export WINEPREFIX=$EXEPATH
export WINEDEBUG=-all
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
cd "$EXEPATH/drive_c/Program Files/Tencent/TIM/Bin"
wine TIM.exe
给予执行权限
$ sudo chmod +x TIM.sh
$ bash TIM.sh
订阅:
博文 (Atom)