学习 和 记录,也包括 shell 脚本的编写
基本就是 Ubuntu,其他发行版我也没用过。。。
wsl 和正常 ubuntu 都有
在这里面写 echo 的 shell 脚本就好了,记得开头加上#!/bin/sh
cd /etc/update-motd.d
/opt 存放的是源码之类的(独立的那种,删掉直接就能把整个软件删掉的那种)
/usr/local/bin 存放的是用户自己编译的可执行文件
/usr/local 用户级的软件目录,用来存放用户安装编译的软件,用户自己编译安装的软件也默认存放在这里
/usr/local/src 这个目录是存放用户编译软件所用的源码的
-
idea 或者 maven 应该放在/opt 下面
-
自己编译的 opencv 源码应该放在 /usr/local/src 下面,执行 make install 指令后,opencv 安装路径如下
make install 指令的默认安装路径为: /usr/local/bin - executable files /usr/local/lib - libraries (.so) /usr/local/cmake/opencv4 - cmake package /usr/local/include/opencv4 - headers /usr/local/share/opencv4 - other files (e.g. trained cascades in XML format)
配置环境你可能会用到代理。如果你用的是代理,注意 sudo 命令不会带上环境变量,这也就意味着,使用 sudo apt 的时候,你的 apt 是不会走代理的,因为你的代理是通过全局变量 all_proxy 之类的指定的 。
是的,这是安全的,但是不是很方便。
用代理的话, 要么使用sudo su -l切换到 root 用户下开启代理后再执行安装指令, root 用户下命令前面就不要带 sudo 了;要么修改 sudo 的配置文件,保留 all_proxy 之类的与代理相关的环境变量。
我也是在使用 sudo wget 和 wget,速度不一样才发现的。
后面是具体的用户,sudo 能修改 root 的密码,也是挺有意思的事情
sudo passwd root
警告:执行了apt-get autoremove就等着完蛋吧。
| 命令 | 特点 |
|---|---|
| apt-get autoremove | 删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包),保留配置文件;警告:慎用本命令!!!它会在你不知情的情况下,一股脑删除很多“它认为”你不再使用的软件; |
| apt-get remove xxxx | 删除已安装的软件包 xxxx(保留配置文件),不会删除依赖软件包,保留配置文件; |
| apt-get purge xxxx | 删除已安装的软件包(不保留配置文件),删除软件包,同时删除相应依赖软件包; |
| apt-get --purge remove xxxx | 同 apt-get purge |
| apt-get autoclean | 删除为了满足某些依赖安装的,但现在不再需要的软件包;apt 的底层包是 dpkg, 而 dpkg 安装软件包时, 会将*.deb 文件放在/var/cache/apt/archives/中;因此本命令会删除该目录下已经过期的 deb; |
| apt-get clean | 删除已经安装过的的软件安装包;即自动将/var/cache/apt/archives/下的所有 deb 删掉,相当于清理下载的软件安装包; |
apt 太慢了,这玩意是单线程的,太折磨了,apt-fast 是多线程的,下载起来很快,我写了脚本,直接 bash 执行就行。或者像下面一样手动安装。
add-apt-repository ppa:apt-fast/stable && apt-get install apt-fast -y
接下来选择,第一个是包管理器,现在一般都用 apt 的吧,我反正很少用 apt-get;第二个是线程数,看自己 CPU 线程数选就是了;第三个是安装包的时候是否跳过询问(是这样吗),我反正直接选 No(默认的)。
apt --> 12 --> No
ubuntu 现在强推 snap,22.04 版本里,火狐和软件商店用的都是 snap,然鹅这玩意不会读取全局代理,我们要是不设置代理的话,下载东西会很慢的。
看看代理 ip 是啥(前提是你设置了代理 ip)
echo $http_proxy
换成你自己的代理 ip,分开执行(下面那个也是没有 s 的)
snap set system proxy.http="http://172.22.160.1:7890"
snap set system proxy.https="http://172.22.160.1:7890"
CentOS 下,有一个很智能的功能,就是只输入一条历史命令的前几个字母,再按 PageUp 和 PageDown 键,就可以在以此字母为前缀的历史命令中上下切换。这个功能非常实用,而且比 CTRL+R 使用起来更友善、更方便。遗憾的是,ubuntu 上并没有这个功能。Google 上搜索才直到,这个只是 linux 在终端对键盘的映射而已,和 linux 的某个发行版无关。只是 CentOS 下默认打开了这个功能,而 ubuntu 默认禁止了而已。
输入指令,修改一下文件
vim /etc/inputrc
5~ 改 A,6~ 改 B,即可
安装 nload
sudo apt-get install nload
使用 nload
nload -m
这东西能检测网卡流量,挺好用的
下面四个命令结果相同,都是递归拷贝 packageA 文件及其任意层的结构到 packageB 中:
cp -r /home/packageA /home/packageB
cp -r /home/packageA /home/packageB/
cp -r /home/packageA/ /home/packageB
cp -r /home/packageA/ /home/packageB/
下面两个命令结果相同,都是不拷贝 packageA 文件,只递归拷贝其任意层的子结构到 packageB 中:
cp -r packageA/* packageB
cp -r packageA/* packageB/
mv IfElseTest1.java chapter03/
ls -l | grep "-" | wc -l
df -h
du -sh ./
在当前目录下寻找文件或目录 filename
find . filename
可以把 . 换成指定路径
TODO
nohup 后台执行并保存 pid 与 log
nohup java -jar ~/JavaFiles/tmp/nLogging/nWeb/admin/target/admin.jar > command.log 2>&1 & echo $! > command.pid
现在我装上了,用起来还行 2023/6/14,详情看这里
别装可视化界面了,很坑很坑很坑,托马斯无敌回旋坑。装上了也没卵用,没有显卡支持,卡卡的
gnome 和 meta(是叫这个名字吧)因为 wsl(准确来说是容器)不支持 acpi 无法安装,装了等着自带的 systemctl 瘫痪吧,我修了好久才找到办法修回来。问题链接
xfce4 我装上了,但是不支持显卡,nvidia-smi 命令无效,win10 给 wsl2 的显卡驱动不能用于界面显示,简直鸡肋。Xrdp 还间歇性闪退黑屏,累的。
最好的还是用 wslg 了,有 vGPU 的支持,还算流畅,ieda 和输入法和谷歌浏览器我都试过,都正常安装
这个我写了脚本
-
更新
apt -y update -
安装 locales(语言设置的一个软件)
apt -y install locales -
安装语言包(管你简体繁体,是中文我就装,省的后面麻烦)
apt -y install language-pack-zh-han* -
安装字体
apt -y install ttf-wqy-microhei ttf-wqy-zenhei xfonts-intl-chinese -
区域设置
dpkg-reconfigure locales依次出现两个界面
这里的安装考虑到了 wslg
注意:安装之前请按照前面的过程配置好中文环境
警告:不要安装搜狗拼音,装了我一天没装成 😀
-
安装 cjk 字型和 fcitx 核心(是 fcitx4,5 的话我没试过)和 googlepinyin
apt -y install fcitx fonts-noto-cjk fonts-noto-color-emoji dbus-x11 fcitx-googlepinyin -
dbus 自启动
不用担心,现在的 wsl 有 systemctl,会自动启动 dbus,所以不需要设置自启动
至于正常的 linux 或者虚拟机就更不需要担心了。。。
-
使用 root 账号生成 dbus 机器码(这一步很重要)
我看很多 csdn 上都没这一步,坑死了,唉,主要是这玩意只能在国内找,国外的又不用中文输入法。
我不知道机器码是什么,这好像是个随机数,机器标识符?这玩意如果有桌面环境的话,他就会有,如果没装过桌面环境的话,他就没有。
反正是给 dbus 用的,没这玩意 fcitx 启动不了
查看一下机器码
cat /var/lib/dbus/machine-id没有东西的话,生成一个
dbus-uuidgen > /var/lib/dbus/machine-id -
创建全局环境变量
vim /etc/profile.d/my_fcitx.sh写入
#!/bin/bash # 设置默认输入方式 export QT_IM_MODULE=fcitx export GTK_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx export DefaultIMModule=fcitx # fcitx自启动 fcitx-autostart &>/dev/null如果使用远程连接,这时候右上角会有两个键盘,因为桌面自己启动了一个,你在 profile 里又启动了一个,不影响使用。
-
wsl --shutdown 后重启 wsl(可能有点慢)
-
设置 fcitx
fcitx-configtool只留这两个
为了防止和 win 里快捷键打架,设置
Alt+`为切换中英文,其他的都关掉,防止打架 -
安装可视化的 gnome-language-selector
如果用 wslg,它会提示没有装完语言,不要点击安装,因为装不了。
如果用完整的桌面,打开 gnome-language-selector,它会提示没有装完语言,安装没装完的,然后下面选项里语言换成中文(记得输入法换成 Fcitx 4,省得后面调)。这样整个系统的中文环境就完善了。
apt -y install language-selector-gnomegnome-language-selector出现下面的界面,键盘输入法系统是 fcitx4 然后选的是中文就行了,这玩意好像有点怪。
-
im-config(可选)
im-config 是 Input Method Configuration 的缩写。
这玩意也是用来选择输入方式,我放在这里记录一下,不用执行。
-
测试(如果安装了 gedit 的话)
gedit hehe.txt
括号内为真,输出 0;为假输出 1
[ -f /home/guof/my_check_up_ln.sh ]; echo $?
-
文件判断
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L filename 如果 filename为符号链接,则为真 -r filename 如果 filename可读,则为真 -w filename 如果 filename可写,则为真 -x filename 如果 filename可执行,则为真 -s filename 如果文件长度不为0,则为真 -h filename 如果文件是软链接,则为真,这个和-L是什么区别 filename1 -nt filename2 如果 filename1比 filename2新,则为真。 filename1 -ot filename2 如果 filename1比 filename2旧,则为真。 -
整数变量表达式
-eq 等于 -ne 不等于 -gt 大于 -ge 大于等于 -lt 小于 -le 小于等于 -
字符串变量表达式
If [ $a = $b ] 如果string1等于string2,则为真 字符串允许使用赋值号做等号 if [ $string1 != $string2 ] 如果string1不等于string2,则为真 if [ -n $string ] 如果string 非空(非0),返回0(true) if [ -z $string ] 如果string 为空,则为真 if [ $sting ] 如果string 非空,返回0 (和-n类似) -
逻辑
逻辑非 ! 条件表达式的相反 if [ ! 表达式 ] if [ ! -d $num ] 如果不存在目录$num 逻辑与 –a 条件表达式的并列 if [ 表达式1 –a 表达式2 ] 逻辑或 -o 条件表达式的或 if [ 表达式1 –o 表达式2 ] -
实例
#!/bin/bash #if [ -d x.txt ] if [ -d ] then cd toolchain; \ ls *.patch | sort \ #FILES=$$(ls *.patch | sort); \ echo "ok" else echo "nok" fi
这个看脚本就行
将命令输出导入到变量中,使用方法如下
variable=`commands`
variable=$(commands)
v1=${1:-"set"} # 第一个参数默认为字符串 "set"
例子
echo -e "\e[36m不是yes, 退出\e[0m"
read -ra arr # 将输入的东西以空格为间隔,输入到数组arr, -r表示进制转义符
for element in ${arr[*]}
do
###
done








