Linux学习记录

躲不过去捏,还是得学。


#

为了在 Ubuntu 中为AMD显卡搭建ROCm平台,鼠鼠我不得不开始学 Linux 系统了捏。

# 文件目录结构

该小节资源来自: RUNOOB

系统树状目录结构如下图所示:

以下是对这些目录的具体解释:

# 终端窗口与终端命令

放大与缩小终端窗口文本字体

放大: Ctrl Shift =
缩小: Ctrl –

终端命令格式:  command [-options] [parameter] 。其中,command为命令名; [-options]为控制命令的可选选项; parameter为传递给命令的参数,可以是零个、一个或多个。

以删除文件夹的命令为例, rm -r 文件夹名 ,其中-r为[-options]; 文件夹名为[parameter]。

查阅命令帮助:  command –help  man command 。其中,[]意味可选,有些命令parameter有[]而有些没有。

man command分屏操作如下表所述:

操作键功能
空格键显示下一屏
Enter键一次滚动一行
b回滚一屏
f前滚一屏
q退出

常用命令

命令作用
ls查看当前目录下的内容
pwd查看当前所在文件夹
cd 目录名切换文件夹
touch 文件名如果文件不存在,则新建文件
mkdir 目录名创建目录
rm 文件名删除指定名字的文件
clear清屏

type键可以将命令、文件名、目录名补全。

 ls 命令说明

该系统下,文件或目录名称最长可有256个字符。以 . 开头的文件为隐藏文件,需要使用 -a 才能显示。 -l 将文件详细信息以列表方式展示。 -h 需要配合-l以显示文件大小。

该命令返回的内容,白色意为文件,蓝色意为目录。

ls与通配符的联合使用:

# *代表任意长度的字符
ls 1* # 定位到以1开头的任意文件、目录
ls 1*1 # 定位到以1开头1结尾的任意文件、目录
# ?代表一个任意字符
ls 1?1 # 定位到以1开头以1结尾的任意3个字符的文件、目录
# []表示可以匹配字符串中任意一个
ls [123]hh # 定位到以hh结尾,且前一字符为1或2或3的文件、目录
ls [a-z]hh # 定位到以hh结尾,且前一字符为a到z的任意字符的文件、目录

结合 ls 查看文件夹内的所有文件个数

ls | wc -l

 cd 命令说明

.代表当前目录,..代表上一级目录。所以 ./xxx.sh 指执行当前目录的xxx.sh。

返回上一级目录:  cd .. ; 返回到当前用户的主目录:  cd ~ ; 在最近两次工作目录中来回切换:  cd – 

相对路径与绝对路径

当路径最前面不是 /  ~ 时,表示相对当前目录的目录位置。如cd Desktop/, 指进入当前目录下的Desktop文件夹。

当路径最前面是 /  ~ 时,表示从根目录/家目录开始的具体的目录,如使用 ~ 代表当前用户的主目录,因此可以直接 cd ~/Documents/ 来进入主目录下的文档文件夹。

 mkdir 命令说明

 mkdir -p 能够递归创建目录。此外,系统中文件与目录不得重名。

mkdir -p a/b/c/d # a目录里含b目录、b目录内含c目录...

 rm 命令说明

使用rm命令删除文件并不等于将文件移至垃圾桶,删除文件后不可恢复。上文讲过,使用-r能够删除文件夹,因为-r意为递归删除目录下文件。此外,-f意为强制删除并忽略不存在的文件。

rm命令同样可以与通配符联用,详见此处

rm -rf /* # 意为递归删除根目录下所用文件

拷贝和移动命令说明

 tree 命令可以查看某目录的树状结构:

tree ~ # 查看家目录下的树状结构目录
tree ~/Desktop/ # 查看家目录下Desktop文件夹内的树状结构
tree # 查看当前目录下的树状结构
tree -d # 只显示目录,不显示文件
 cp 命令可以移动文件:

cp 源文件/-r 目录 目标目录
cp ~/Documents/test.txt ./test.txt # 终端当前位置在桌面
cp ~/Documents/test.txt . # 终端当前位置在桌面,且省略了文件名
cp ~/Documents/test.txt ~/Desktop/

使用-i能够覆盖同名文件前提示; 使用-r能够拷贝目录。

 mv 命令可以移动或重命名文件或目录:

# 移动文件或目录均不用使用-r
mv 源文件或目录 目标目录
# 重命名文件或目录
mv 源文件名或目录名 目标文件名或目录名
mv aaa ./bbb/ccc # 将当前目录下的aaa文件夹移动至bbb文件夹下并重命名为ccc

使用-i能够提示重命名文件/目录覆盖。

查看文件内容命令说明

 cat 命令可以查看文件内容、创建文件、合并文件、追加文件内容等:

会一次显示所有内容,适合查看内容较少的文本文件。

使用-b对非空输出行编号; 使用-n对所有输出行编号。

如果查看的文件内容较多,使用 more 分屏显示内容,按空格显示所有内容。更多操作参考man command的操作表格。

 grep 命令对文本文件进行模式查找:

# 在123.txt中查找as单词
grep as 123.txt

-n可以显示匹配行的行号; -v显示不包含匹配文本的所有行; -i忽略大小写。

常用的两种模式查找(正则表达式): ^a搜寻以a开头的行; a$搜寻以a结束的行。

其他

重定向 >  >> :

使用重定向将命令的执行结果输出到一个文件,>会覆盖原有内容,>>会将命令结果追加到已有文件末尾。

# 将树状结构输出到文件a(覆盖)
tree ~ > a
# 将树状结构追加到文件a(若不存在会新建文件a,若存在会追加到a末尾)
tree ~ >> a
 echo 用于将文本字符串或变量的值输出到终端或重定向到文件:

# 新建文件a并在里面输入test
echo test > a
 | 管道将一个命令的输出作为另一个命令的输入:

# 将家目录下的所有文件、文件夹分屏显示
ls -lha ~ | more
# 查询家目录内包含D的项目
ls -lha ~ | grep D
 which 命令查看执行命令所在位置:

通过 PATH环境变量查找可执行文件。

which ls
which python
  • 在该系统中,绝大多数可执行文件都保存在/bin/sbin/usr/bin/usr/sbin
  • /bin(binary)是二进制执行文件目录,主要用于具体应用
  • /sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
  • /usr/bin(user commands for applications)后期安装的一些软件
  • /usr/sbin(super user commands for applications)超级用户的一些管理程序
 whereis 命令查看执行命令所在位置:

通过查询数据库查找可执行文件,然而该数据库并不会实时更新。

该命令可以在查找到二进制命令的同时,查找到帮助文档的位置; 而 which 在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。

whereis ls
whereis python

远程管理命令

# 立刻关机
shutdown now
# 一分钟之后关机
shutdown
# 指定时间关机
shutdown 20:30
# 10分钟之后关机
shutdown +10
# 取消之前的关机计划
shutdown -c

-r是重新启动选项。 shutdown -r now 意为立刻重启。

 ssh 命令能够远程控制其他机器:

ssh -p 端口号 用户名@远程地址 # ssh -p 22 [email protected]

输入exit退出。

 scp 能在两台机器之间传输文件:

# 将本地文件传过去
scp -P 端口号 文件名 用户名@远程地址:文件名
# 将远程文件拉到本地
scp -P 端口号 用户名@远程地址:文件名 文件名
# 传文件夹需要加-r,以传目录到其他机器为例
scp -P 端口号 -r 目录 用户名@远程地址:目录

# 用户权限

对文件/目录的权限包括:

序号权限英文缩写数字代号
01readr4
02writew2
03执行excutex1

把用户归为不同组,给组确定权限,以此赋予用户不同权限。使用ls -l命令以查看当前目录所有项目的详细信息:

总用量 44
drwxr-xr-x 2 user group 4096 7月  13 02:27 公共的
drwxr-xr-x 2 user group 4096 7月  13 13:30 模板
drwxr-xr-x 2 user group 4096 7月  13 02:27 视频

其中,开头的d意为目录; 第一组权限(三个字符, rwx)意为文件/目录拥有者(user)对其所有的权限; 第二组权限(三个字符, r-x)意为拥有者所在组(group)的权限; 第三组权限(三个字符, r-x)意为其他用户的权限。

 chmod 命令以修改权限:

chmod -R +或-rwx 文件名/目录
# 给test.txt关闭读写权限
chmod -rw test.txt
# 给test.txt增加读写权限
chmod +rw test.txt
chmod +r+w test.txt
# 给a目录增加读写权限
chmod -R +r+w a

若想精确到给拥有者||其他用户设置权限,可以设置以下选项:

# u - 给所有者设置执行权限
chmod u+x test.sh
# g - 给组设置执行权限
chmod g+x test.sh
# o - 给其他用户设置执行权限
chmod o+x test.sh
# a - 给所有用户设置执行权限
chmod a+x test.sh

然而该方法不够便捷,因此介绍用数字表示法来分别给拥有者||其他用户设置权限:

chmod -R 755 文件/目录名 # 数字详见权限表

TIP: 使用 ./ 执行可执行文件。其中/指当前目录。

./abc.sh
 chown 可以修改文件/目录拥有者:

chown 用户名 文件名/目录名

组管理终端命令

命令作用
groupadd 组名添加组
groupdel 组名删除组
cat /etc/group确认组信息
chgrp -R 组名 文件/目录名递归修改文件/目录的所属组

创建用户/设置密码/删除用户

命令作用说明
useradd -m -g 组名 用户名添加新用户-m为自动建立家目录
-g指定用户所在组,否则会建立一个同用户名的组
passpwd 用户名为用户设置密码
userdel -r 用户名删除用户-r会自动删除用户家目录
cat /etc/passwd | grep 用户名确认用户信息新建用户后,用户信息保存在这里

查看用户信息

命令作用
id 用户名查看用户UID和GID(组ID)
who查看当前所有登陆的用户列表
whoami查看当前登陆用户的用户名
 usermod 命令可以设置用户的主组/附加组:

主组通常在新建用户时指定,在/etc/passwd的第四列GID对应的组; 而附加组用于指定用户附加权限,如sudo权限。

# 修改主组
usermod -g 组 用户名
# 修改附加组
usermod -G 组 用户名 # 举例usermod -G sudo auser
# 修改用户登陆Shell
usermod -s /bin/bash
# 使用-a进行追加,而不是修改
usermod -a -G group1,group2,group3 usera

# 系统信息

关于时间与日期: 使用 date 查看时间; 使用 cal 显示日历。

关于磁盘信息: 使用 df -h disk free显示磁盘剩余空间; 使用 du -h 目录名 disk usage显示指定目录下的文件大小。-h指以人性化的方式展示。

进程信息

使用 ps process status查看进程的详细情况:

该命令带选项不需要

# 仅显示当前用户通过终端启动的应用程序
ps
# 显示终端上的所有进程,包括其他用户的进程
ps a
# 显示进程的详细状态
ps u
# 显示没有控制终端的进程(不是通过终端启动的进程)
ps x

使用 top 动态显示运行中的进程并按资源占用率排序:

top
# 按下q退出

使用 kill PID 终止指定代号的进程:

kill 1234
# 强制终止
kill -9 1234

打包压缩

在该系统中, tar 是最常用的备份工具,此命令可以把一系列大文件打包到一个大文件中,也可以把一个打包好的大文件恢复成一系列文件。这是打包命令,压缩命令在后面。

# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径
tar -cvf py.tar 01.py 02.py 03.py # 将01.py 02.py 03.py打包到py.tar文件中
# 解包文件
tar -xvf 打包文件.tar
-c: 生成档案文件,创建打包文件
-x: 解开档案文件
-v: 列出归档解档的详细过程,显示进度
-f: 指定档案文件名称,f后面一定是.tar文件,所以必须放最后
 tar  gzip 命令结合使用可以实现打包和压缩:

  • tar仅负责打包
  • gzip压缩tar打包后的文件,其扩展名一般为 xxx.tar.gz 

在选项中增加一个z便可实现gzip压缩。

# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩文建/路径
# 解压缩文件
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
[OPTIONAL] tar  bzip2 命令结合使用可以实现打包和压缩:

gzip不同的是,bzip2新增的选项是-j

# 压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径
# 解压缩文件
tar -jxvf 打包文件.tar.bz2
# 解压缩到指定路径
tar -jxvf 打包文件.tar.bz2 -C 目标路径

其他命令

使用 find 命令在特定目录下查找符合条件的文件:

# 一般格式
find 路径 -name "文件名"
# 找到当前路径所有py格式的文件
find . -name "*.py"

使用 ln 创建链接文件:

通俗来讲,创建软链接就像创建快捷方式。

# 加-s才是创建软链接,并且源文件要使用绝对路径
ln -s 被软链接的文件 链接文件

时间同步查看此处

# 环境变量

使用以下方法查看环境变量:

env: 列出所有环境变量
export: 单独输入export可以列出所有环境变量
echo $PATH: 列出环境变量中PATH这个变量的值,这是一些路径,执行程序命令时会在这里面找。比如ls、python等命令
echo $USER: 返回环境变量中USER这个变量的值,值为用户名。

使用 export 命令全局新增环境变量,该命令只对该次终端有效:

# (全局)定义并赋值变量
(export) 变量名=值(asd=aaaaaa)
# 删除环境变量
unset 变量名(unset asd)
# 全局新增PATH环境变量的值
export PATH=$PATH:/path/you/want/
# 删除PATH环境变量的部分值
echo $PATH 然后手动去除不需要的路径然后export PATH=路径1:路径2:路径3... 

更改~/.bashrc文件,该方法对登陆用户有效:

# 打开~/.bashrc文件
export PATH=$PATH:/path/you/want/ # 在最后新增
export 变量名=值
# 返回终端,输入以下命令使其立刻生效
source ~/.bashrc

更改/etc/profile文件,该方法对所有用户有效:

# 打开/etc/profile文件
export PATH=$PATH:/path/you/want/ # 在最后新增
export 变量名=值
# 返回终端,输入以下命令使其立刻生效
source /etc/profile

对于系统范围内的PATH变量的值,在 /etc/environment 文件内更改。

# 文本增删改查

文本增删改查对于终端系统而言非常有效,然而笔者因为学习机器学习而使用 Ubuntu ,安装的是桌面端。因此,笔者并不会着重记录这一部分的知识。

语法:  sed 选项 sed内置命令字符 文件 

选项:

选项解释
-n取消默认sed的输出,常与内置命令p一起使用
-i直接将修改结果写入文件。否则,sed修改的是内存文件
-e支持多次编辑,而不依赖管道符
-r支持正则表达式
 sed 的内置命令符用于对文本进行不同操作:

内置命令符解释
aappend, 对文本追加,在指定行后面添加文本
ddelete, 删除匹配行
iinsert, 插入文本,在指定行前面添加文本
pprint, 打印匹配行内容,常与-n连用
s/正则表达式/替换内容/[flags]匹配正则内容,然后替换内容,默认只替换第一个
结尾可填g(global)代表全局匹配,也就是替换所有
结尾也可填123,也就是匹配第123次替换
其中/符号可以替换为@或#
cchange, 改变指定行的内容
y转换,实现字符的转换,如把文中小写的abc转换成大写
 sed 匹配范围:

范围解释
空地址全文处理
单地址指定某一行
/pattern/被模式匹配到的每一行
范围区间10,20是10到20行; 10,+5是10行向下5行;/pattern1/,/pattern2/是匹配多种条件
2,$是从第2行到最后一行
步长1~2是1,3,5,7,9奇数行; 2~2是2,4,6,8偶数行
[!]取反

案例:

# 输出文件第2, 3行内容
sed -n '2,3p' 目标文件
# 删除含有game的行(若想修改源文件需要加上-i)
sed '/game/d' 目标文件 (-i)
# 删除第五行到结尾
sed '5,$d' 目标文件
# 将文中amd全替换成nvidia
sed 's/amd/nvidia/g' 目标文件
# 将文中amd全替换成nvidia,并同时替换our为ours
sed -e 's/amd/nvidia/g' -e 's/our/ours/g' 目标文件
# 在文件第二行追加内容,并写入到文件
sed -i '2a append something' 目标文件
# 给每一行增加一个内容---
sed 'a ---' 目标文件
# 输出ifconfig etho中的第二行
ifconfig etho | sed '2p'
# 将第二行和第四行替换为&&&
sed '2,4c &&&' 目标文件
# 找到有www的一行,然后把ee替换为EE
sed '/www/ s/ee/EE/' 目标文件
# 将文中的小写的abcde替换成大写
sed 'y/abcde/ABCDE/' 目标文件

# 软件安装与卸载

 Ubuntu 中使用 apt Advanced Packaging Tool这一安装包管理工具来安装/卸载/更新软件包。

# 安装软件
sudo apt install 软件包
# 删除已安装的软件包(保留配置文件)
sudo apt remove 软件包
# 删除已安装包(不保留配置文件)
sudo apt purge 软件包
# 删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包)。如软件包a,依赖软件包b,则执行该命令会同时删除软件包a,b
sudo apt autoremove
# APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在/var/cache/apt/archives/中。该只会删除/var/cache/apt/archives/已经过期的deb
sudo apt autoclean
# 将/var/cache/apt/archives/的所有deb删掉
sudo apt clean
# 更新已安装的包
sudo apt upgrade
# 查找软件包
sudo apt search <keyword>

在系统中,可以在 软件和更新 中自行设置软件源。在Ubuntu软件选项卡中,可以将下载自选择为主服务器

后缀名安装包管理器支持发行版
.rpmrpm/yum红帽系(如redhat、fedora、centos)
.debdpkg/aptdebian系(如debian、ubuntu、银河麒麟)
.pkg.tar.xzpacmanarch系(如Arch Linux、manjaro)
.shbash任意支持bash的发行版

以下安装实例以QQ for Linux举例。

对于 .deb 安装包而言:

# 安装
sudo dpkg -i linuxqq_1.0.1-b1-100_armhf.deb
sudo apt install ./amdgpu-install_5.6.50600-1_all.deb
# 卸载
sudo dpkg -r linuxqq

对于 .rmp 安装包而言:

# 安装 (ivh: install_verbose_hash)
sudo rpm -ivh linuxqq_1.0.1-b1-100_mips64el.rpm
# 卸载
sudo rpm -e linuxqq

对于 tar.gz/tar.xz 这种tarball免安装二进制包:

# 安装
解压
# 使用
进入安装目录的bin文件夹,运行该目录下与软件同名的可执行文件。如/pycharm/bin/pycharm.sh
# 卸载
删除解压出的文件夹

对于 .sh 这种脚本文件:

# 使用当前用户安装
bash xx.sh
# 使用root用户安装
sudo bash xx.sh
# 卸载
执行官方提供的卸载文件,或删除根目录然后检查系统环境变量等。

对于 .snap 这种snap package:

# 本地安装.snap包
sudo snap install ./xxx.snap --dangerous # 自动连接插头和插槽的意思是正在下载文件

使用 dpkg 卸载软件的一般范式:

# 检查该软件的名字,以chrome为例
dpkg -l | grep chrome
# 卸载
dpkg -r google-chrome-stable

# apt与apt-get

系统安装完成并更改完软件源后,使用 apt update 更新包的索引和列表,该命令并不会更新软件。

完成上一步后,再使用 apt upgrade 升级软件。

 apt-get upgrade 命令不会更新内核。

sudo apt update
sudo apt upgrade

# 一些提高工作效率的软件介绍

首先是用于后台挂载任务的 screen 虚拟终端软件。当执行的命令所需时间较长时,期间关闭终端将导致工作中断。创建并后台挂载 screen 虚拟终端是解决该问题的有效途径。

# 安装screen虚拟终端
sudo apt install screen
# 创建虚拟终端
screen -S 虚拟终端名
# 查看已有虚拟终端
screen -ls
# 从虚拟终端中退出,此举并不会kill该终端
ctrl+A+D
# 返回虚拟终端
screen -r 虚拟终端名
# kill虚拟终端
进入虚拟终端后,输入exit并回车

至于网络:

在TUN模式下若发现无法正常使用浏览器,可以尝试关闭或指定浏览器的安全DNS以解决该问题。

# 安装\(\text{WIFI}\)适配器

查看网卡型号并下载与之对应的驱动文件,放在正确的位置。重启系统后,便可享受无线网络带来的便利。

在Windows系统的设备管理器中查看网卡型号

在任务栏上点击鼠标右键,进入设备管理器。在该页面,展开\(\text{网络适配器}\)选项卡,便可以看到具体的无线网卡型号。

下载对应的无线网卡驱动

Intel的无线网卡驱动在这里下载。

安装驱动

无需\(\textit{apt install}\)等,需要做的仅仅是解压该压缩包,并把得到的文件移动到对应的位置。

# 解压
tar zxf iwlwifi-ty-59.601f3a66.0.tgz

移动得到的文件至\(\text{/lib/firmware}\)。需要注意的是,解压得到的可能是文件夹,需要移动其中的文件。

# 移动文件
sudo cp * /lib/firmware/

最后重启电脑,进入 WIFI 选项卡,滑动选项卡名称右侧的按钮以打开无线网络功能。

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments