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了

接下来:NAS的公网访问

文章作者: 月涯
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 月涯的博客
计算机 教程
喜欢就支持一下吧