如何自建NAS以及玩出花(二):Linux系统的使用
Linux系统的使用
一、Linux系统目录结构
想要使用linux,除了对大黑框(Shell)的操作聊熟于心,更重要的是了解到基本的Linux系统目录结构。
不论是什么发行版,通常目录结构都是相同的。
Linux目录结构
在Linux或者Unix系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构,文件系统的最顶层使用/
表示,通常称为根目录,根目录既可以放置子目录(你也可以理解为Windows中的文件夹)也可以放置文件,这样所有的文件的路径都能从根目录发展出来,这样就构成了一个庞大的文件系统,同时也非常有条理。
第一次看到这么多的文件目录,其实真正使用的时候我们只需关注一下几个目录
/etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录,通常我们使用包管理器下载了软件后还需要自己配置才能使用,这些配置文件就放在了这个目录里,一些系统的服务也配置在这里。
/home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。这些目录都放置在/home路径下,这里也是通常我们放置自己的文件位置,像是系统的下载文件夹,桌面都会放置在这里。
/dev:dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。通常是对NAS进行扩容的时候会用到。
/media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。不过一般都是手动挂在,如果自动挂在的指不定会给你起个什么名字。
/var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。日常使用的时候,也是这个目录最容器出问题,因为Linux系统的空间增长主要就是来自于日志文件,如果日志文件控制的不好,就很容易造成空间不够用的情况。/var中的日志也可以帮我们判断程序问题。
二、Linux用户和权限管理
Linux是一个分时多用户的操作系统,也就是说Linux支持多个用户同时进行登录和操作。
任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
Linux中的超级管理员,也是每一个系统都会存在的用户是root,root拥有系统的所有权限,可以对任何文件进行任何操作,所以通常我们也不会使用root用户进行登录。
如果你是从头开始安装Ubuntu的话,那你已经创建了一个属于你自己的账户(就是安装引导程序让你填写用户名和密码的那里开始的),使用这个用户已经足够。
在命令行(Shell环境)中,我们可以使用su + 用户
命令来切换用户
su用法
PS:
whoami
命令可以得知当前的用户名,其实很有意思的,对吧。PPS:当Linux要求你输入密码,这时候按键盘在Shell中是没有反应的,虽然现在没有显示,但是实际上你按下的按键已经输入到内存中了,输入密码按下回车,如果密码正确,Linux就会执行你的命令,如果错误,那就会得到相应的提示。
PPPS:Linux同样秉持没有消息就是最好的消息的设计逻辑,输入密码后,如果没有任何报错,那就说明你的命令执行成功了,当有错误的时候,Linux才会通知你。
如果是从头开始安装的系统,那你的root用户应该是没有密码的,这当然不行,玩NAS网络安全是重中之重,兄弟,你也不想自己辛苦安装的NAS成为别人的肉鸡吧,那就给你的NAS设置一个复杂的密码,并且定期修改。
使用passwd + 用户名
来设置密码,这里你也不会看见输入的密码有多少字符。
这样你可以修改自己的用户密码,但是如果你想修改别的用户的密码需要怎么做呢?
在普通用户模式下,passwd
命令不能修改root用户的密码
很简单,在命令的前面加上sudo
命令,这是提权命令,Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
因为root有着最高的权限,所以一旦遇到需要超级管理员权限才能执行的事情,就使用sudo
命令,提升自己的权限,这样就能执行了。
当然,Linux系统的权限管理可不止这一点点,实际上权限管理和使用是非常复杂的一件事。这里还包括,Linux用户的创建,Linux用户组,用户组的执行关系,文件目录管理等,有兴趣的可以自己查看,如果后续遇到相关的命令我会进行解释。
三、Linux常用命令
有了以上的知识储备,那我们就准备了解一下Linux的一些常用命令,这里还要说一下Linux终端的使用方式,在Ubuntu图形化界面下可以按下Ctrl+Alt+T
的快捷方式打开终端,也可以在全部程序中进行寻找,如果像我一样使用Windows Terminal(Microsoft Store商店下载)通过SSH登录,还需要使用apt安装SSH服务器,并且输入命令进行登录,SSH作为我们远程非常重要的登录方式后续会单开一期。
有很多人会有疑问,为什么程序员都喜欢使用Shell对计算机进行操作,除了Shell可以进行编程执行一些自动化任务,能够执行更准确的操作外,还有一点就是终端很快,不光是执行的速度很快,命令的输入也很快。
当你输入命令、文件名或路径,可是使用键盘上的tab
键,来实现自动补全。
按下tab进行路径的自动补全
可以使用方向键↑↓来调回之前运行过的命令。
当你的命令执行到一半,想终止执行,可以按下Ctrl + C
,终端会强制中断命令。
当你想要登出终端,比如从root用户切换回自己的用户,可以按下Ctrl + D
,退出用户。
还有管道符号|
,这在下面的ps部分有讲解。
命令行参数符号-
, 用于给命令添加参数,在tar部分有讲解。
当然还有使用zsh和Oh My Zsh进行主题美化和各种插件的安装,这会帮助能够更快的输入和执行命令。
下面这些命令先使用Ubuntu本机的GUI尝试一下吧。
ls:列出当前目录中的文件和子目录
ls
ls:列出当前目录中的文件和子目录
pwd:显示当前工作目录的路径
pwd
cd:切换工作目录
cd /path/to/directory
cd # 切换到默认目录,通常是用户文件夹,如/home/Username
mkdir:创建新目录
mkdir directory_name
rm:删除文件或目录
rm file_name
rm -r directory_name # 递归删除目录及其内容
rm -rf directory_name # 强制删除
cp:复制文件或目录
cp source_file destination
cp -r source_directory destination # 递归复制目录及其内容
clear:清屏
mv:移动或重命名文件或目录
mv old_name new_name
cat:打印文件
cat file_name
head/tail:显示文件的前几行或后几行
head -n 10 file_name # 显示文件的前10行
tail -n 20 file_name # 显示文件的后20行
tail -f file_name # 追踪文件更新,这在查看日志文件的时候很有用
grep:在文件中搜索指定文本
通常与其他命令结合使用,通过文本过滤搜索结果
ps:显示当前运行的进程
ps -ef|grep docker # 搜索名为docker的进程
如果单独使用ps
命令,则会显示所有的进程,这时候可以使用管道符号|
,使用grep
过滤显示含有docker的行。
管道符号|
会将两个命令分开,管道符号|
左边的命令的输出会变成管道符号|
右边命令的输入,这样就可以像流水线一样使用命令对结果进行处理。
管道符号原理
使用管道符号进行处理
kill:终止进程
kill process_id
kill
命令用于强制终止进程,进程ID则通过之前的ps
命令获得,第二列就是进程ID
tar:用于压缩和解压文件和目录
tar -czvf archive.tar.gz directory_name # 压缩目录
tar -xzvf archive.tar.gz # 解压文件
tar用于打包和解包文件,在后面加上控制符号-z
才是用于选择压缩算法的参数,单纯使用tar命令则只是打包,就是将所有的文件都整合成一个文件,但是不经过压缩。
Linux常用的压缩格式是tar.gz
,当然使用zip,bz2也是可以的,可以自由选择。
不过我现在使用的zsh(Shell的一种)加上插件,可以使用x
这一个命令直接进行解压,插件会自动判断解压类型,也就不用背那么长的参数列表了。
df/du:显示磁盘使用情况
df -h # 显示磁盘空间使用情况
du -h directory_name # 显示目录的磁盘使用情况
这个df
命令是很常用的命令,尤其是当你需要更换硬盘或判断硬盘还有多少存储空间的时候。-h
参数用于将容量大小改写为人类常用的K,M,G,T等单位。
当你想要更直观的观看文件夹的容量,怎么办呢。我通常使用ncdu
命令,可以在终端中可视化的显示当前文件夹中各个文件的占比以及大小。你没听错,命令行界面也是可以有可视化界面的。下面的top
命令就是一个例子。
ncdu
命令需要用户自己安装。安装方式下一小节会介绍。
top/htop:显示系统资源的实时使用情况和进程信息
top
htop
htop
命令界面
shutdown/reboot:关闭或重新启动系统
shutdown -h now # 立即关闭系统
reboot # 重新启动系统
shutdown -r now # 立即重启系统
关闭或重启系统是需要很高权限进行操作的,所以通常需要使用root用户进行,当然你也可以很方便的使用在命令前加入sudo
命令进行提权。
crontab:定时任务管理器,用于自动执行计划任务
crontab -e # 编辑当前用户的定时任务
crontab -l # 显示当前用户的定时任务
crontab的定时任务
crontab
是非常有用的工具,当你需要一些定时任务的时候就可以使用它,通常我都是用来执行自动化执行系统的备份工作。crontab
不光可以用来执行命令,也可以执行shell脚本,当然运行环境的设置和配置文件的编写是一大难点。
时间格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 时表示每分钟都要执行 program,f2 为 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 /n 时表示每 n 分钟个时间间隔执行一次,f2 为 /n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其此类推
更简洁的介绍方式:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
具体参看:crontab命令
iptables/ufw:用于配置防火墙规则
通常情况下,Ubuntu使用ufw
防火墙,iptables
命令并不推荐使用,因为过于复杂,但是有些需要精细操控的时候可以使用。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTP流量
ufw enable # 启用Uncomplicated Firewall
ufw allow|deny [service/port] # 用于开启和阻止端口
防火墙用于阻挡未经允许的外部访问。当没有开放的端口获取到网络包后,防火墙会检查规则,如果不允许通过则会直接丢弃,防火墙是安全防护的好帮手,但是有时候安装服务后发现无法访问,就需要检查一下防火墙是否开启了对应端口的访问。
free:显示系统内存使用情况
free -m # 以MB为单位显示内存使用情况
rsync:用于在本地和远程系统之间同步文件和目录
rsync -avz source_directory/ remote_user@remote_host:/remote/directory/
这里注意,rsync
是同步,而非是复制,与cp
命令不同,复制会直接修改文件的信息,比如文件的创建时间,文件的用户权限等,而rsync则能够保留这些信息。同时rsync
会只同步经过修改的文件,如果文件没有修改,则会跳过,相比复制更加节省资源并且更快。这也是我用来进行备份的主要方法。
具体参看:rsync命令
man:命令的详细文档
man command_name # 获取命令的详细文档
上面这些只是Linux命令的很小一部分,这些命令都有不同的参数用于调节命令的效果,实在没有办法一一介绍,不过开发者早就想到了解决方案,那就是man
命令,通过这个命令可以获得其他命令的文档,其中很详细的介绍了命令的作用以及各个参数的解释,是实在是非常方便,当然,man man
这样的命令也是有效的。
以上这些基本就是Linux操作的基本命令,更加详细的介绍参看:Linux命令搜索
四、Debain包管理器:apt
apt
是Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt
命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具。
apt
中的软件,都是社区里编译好的二进制文件,不需要自己编译,直接安装就行,包管理器会自动帮助你下载相关的依赖,不需要去官网下载安装包,只要是包管理器有的软件,都只需要一个命令即可搞定,后续的卸载、清理、升级等也都是可以通过apt命令运行,你甚至可以写个脚本+crontab
进行自动执行。是不是比Winodws很方便很多呢?其实Windows也有自己的包管理器winget
。
至于为什么是Debain的包管理器要在Ubuntu上使用,因为Ubuntu的上游就是Debain,自然是这一个系列的,所有的Debain系开发版都是使用的apt。当然世面上也有其他的包管理器,比如yum,pacman,虽然名字不同,但很多操作和功能都是相通的。
换源
想要愉快的使用apt
,第一步就是换源。所谓换源,就是更换apt的下载服务器,通常apt
默认的下载服务器都构建在国外,下载速度简直感人(现在国内也有了,但是还是没有镜像站快),这时候就需要换源,将下载服务器更换的更近且速度更快的国内镜像站,镜像站的资源都是和母站相同的,每过一段时间都会自动进行更新,所以完全不用担心。
镜像站我通常使用中科大或者清华大学的镜像站,速度很快,而且教程也很不错。
使用图形化界面可以很方便的更改
命令行的修改方法可以参看TUNA清华大学镜像站的教程
中科大的也不错,而且用的人还少一些。
软件的安装、卸载、更新、清理、搜索
可以说换源之后,apt
的使用就非常简单了,下面是apt
的命令,使用apt必须要有管理员权限,所以所有的命令前都要加上sudo
sudo apt install app_name # 通过程序名进行安装
sudo apt remove app_name # 通过软件名进行卸载
sudo apt update # 查找更新
sudo apt upgrade # 进行更新,更新的时候会让你按Y/N确认,如果不像就加上-y参数
sudo apt autoremove # 让apt自动清理不需要的程序
sudo apt search app_name # 通过软件名模糊搜索软件
下面也可以给一些ubuntu常用的软件,可以直接运行命令
sudo apt install git build-essential vim ssh wget tree tcpdump ncdu htop glances exa gparted uuid rar samba tmux curl cmake python-dev python3-dev
五、总结
当然Linux的使用可不止这一点,后续我会和NAS的一些相关软件安装和配置结合着去介绍,可以说学会了Linux的操作后,在进行NAS的设置,简直就是小case了