Category Archives: Debian

为什么在 Linux 系统中,许多服务程序的名称后面会加上一个字母“d”

为什么在 Linux 系统中,许多服务程序的名称后面会加上一个字母“d”

在 Linux 系统中,许多服务程序的名称后面会加上一个字母“d”,例如 ntpd(NTP 服务)、httpd(HTTP 服务)、sshd(SSH 服务)等。这种命名方式背后有其历史和技术背景,主要可以归结为以下几个原因:

1. “d”代表“Daemon”(守护进程)
在 Unix 和 Linux 系统中,守护进程(Daemon)是一种在后台运行的特殊进程,它独立于用户终端并且周期性地执行某种任务或等待处理某些事件。守护进程通常在系统启动时启动,并在系统关闭时才结束。

- 命名习惯的由来:早期的 Unix 系统开发者为了区分普通程序和守护进程,会在守护进程的名称后面加上“d”,以表示这是一个“Daemon”(守护进程)。这种命名习惯一直延续到了 Linux 系统中。
- 举例:
- ntpd:表示 NTP(网络时间协议)的守护进程,它在后台运行,负责同步系统时间。
- httpd:表示 HTTP(超文本传输协议)的守护进程,它在后台监听 HTTP 请求并提供 Web 服务。
- sshd:表示 SSH(安全外壳协议)的守护进程,它在后台监听 SSH 连接请求,允许用户安全地远程登录系统。

2. 便于区分和管理
这种命名方式使得系统管理员能够快速识别哪些程序是守护进程,从而更方便地进行系统管理和维护。

- 启动和停止服务:在 Linux 系统中,守护进程通常通过服务管理工具(如 systemctl 或 service)进行管理。例如,启动 ntpd 服务时,可以直接使用命令 systemctl start ntpd,而停止服务时可以使用 systemctl stop ntpd。这种命名方式让命令更加直观。
- 日志和配置文件:守护进程的日志文件和配置文件通常也会以服务名称命名。例如,ntpd 的配置文件通常是 /etc/ntp.conf,日志文件可能包含在 /var/log/ntp 中。这种一致性有助于系统管理员快速定位相关文件。

3. 历史和兼容性
这种命名方式源于早期的 Unix 系统,Linux 系统继承了 Unix 的许多设计和命名习惯。保留这种命名方式不仅是为了向后兼容,也是为了保持一致性,让熟悉 Unix 和 Linux 的用户能够快速理解和使用系统。

- 兼容性:许多脚本和工具在设计时就假设守护进程的名称以“d”结尾,例如一些用于监控系统服务状态的脚本。如果改变这种命名方式,可能会导致这些工具无法正常工作。
- 传统:这种命名方式已经成为一种传统,许多 Linux 发行版和开源项目都遵循这一习惯,使得整个生态系统保持一致。

4. 清晰的功能标识
在 Linux 系统中,守护进程的主要功能是提供某种服务,而“d”这个后缀能够清晰地标识出程序的守护进程特性。例如,ntp 可能是一个普通的 NTP 工具,而 ntpd 则明确表示这是一个在后台运行的守护进程,负责提供 NTP 服务。

总结
在 Linux 系统中,服务名称后面加“d”的原因主要是为了标识这是一个守护进程(Daemon)。这种命名方式不仅有助于系统管理员快速识别和管理服务,还保持了与 Unix 系统的历史兼容性。虽然这种命名方式看起来可能有些简单,但它背后蕴含了 Unix 和 Linux 系统设计的智慧和传统。

Linux Debian12安装fcitx5中文拼音输入法

新版的fcitx5中文拼音输入法有着更好的输入体验。搜狗输入法Linux版我也尝试安装测试了,但是在Debian12中不能正常使用。

今天就来分享一下在Linux Debian12中安装fcitx5中文拼音输入法的方法。
1.首先卸载旧版输入法
推荐先卸载旧版输入法,打开命令终端,执行命令:

sudo apt purge fcitx* ibus*

2.安装fcitx5中文拼音输入法
执行命令:

sudo apt install fcitx5 fcitx5-chinese-addons
3.重启系统

4.打开fcitx配置,查看信息

如下图所示,打开fcitx配置,这里不需要配置,我们查看一些信息。
可以看到启用fcitx中文输入法快捷键是“Ctrl+空格键”,英文输入法与fcitx中文拼音输入法之间切换键:“左Shift键”。

wget 与 curl 命令详解

wget 与 curl 命令详解

wget 命令
wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

命令格式:wget [选项] URL资源

1. 下载单个文件

wget http://www.example.com/testfile.zip
下载的文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)

2. 下载并以不同的文件名保存

wget -O myfile.zip http://www.example.com/testfile.zip

-O 自定义文件名:重命名下载的文件
如果不指定"-O" 选项,wget默认会以 url 路径最后一个 "/" 的后面全部字符为下载的文件名,如wget http://www.example.com/testfile?id=123,下载后的文件名就为 testfile?id=123

3. 断点续传

wget -c http://www.example.com/testfile.zip

-c:继续接着执行上次未下载完的任务
当下载的文件特别大或者网络原因,文件没有下载完连接就已经被断开,使用 -c 选项可以在网络连接恢复时接着上次的下载任务继续下载,而不需要重头开始下载文件

wget默认重试20次连接下载文件,如果网络一直有问题下载可能失败。如果需要的话,你可以使用--tries增加重试次数。例如设置最多重试40次:wget --tries=40 http://www.example.com/testfile.zip
4. 后台下载

wget -b http://www.example.com/testfile.zip

-b:以后台运行的方式下载
对于下载非常大的文件不能及时下载完时,可以进行后台下载。后台下载时会在当前下载目录下创建一个 "wget-log" 文件记录下载日志,可以使用 tail -f wget-log 命令查看下载进度

5. 带宽控制和下载配额

wget --limit-rate=下载速度 http://www.example.com/testfile.zip

--limit-rate=下载速度:限定不超过指定的下载速度。例如:--limit-rate=300k
当你执行wget的时候,它默认会占用全部可能的宽带下载,但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

如果还需要限制下载配额,可使用选项 "-Q 下载配额",下载数据超过了指定配额会停止下载。注意,该选项对于单个文件下载无效,只适用于多文件下载或递归下载,例如:wget -Q 10m -i dowload.txt,如果不指定下载配额会下载download.txt文件包含的所有url,如果指定了下载配额为10m,下载数据超过了10m会停止后面url的下载(一个文件正在下载过程中下载数据超过了下载配额会继续完成该文件的下载不会立即停止下载)。

6. 多文件下载

wget -i url文件

-i url文件:从指定文件获取要下载的URL地址
如果有多个url资源需要下载,那么可以先生成一个文件,把下载地址的url按行写入该文件,然后使用 "-i" 选项指定该文件就可以批量下载了

7. 密码认证下载

wget --http-user=USER --http-password=PASS http://www.example.com/testfile.zip

--http-user=USER:设置 http 用户名为 USER
--http-password=PASS:设置 http 密码为 PASS
--ftp-user=USER:设置 ftp 用户名为 USER
--ftp-password=PASS:设置 ftp 密码为 PASS
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl

8. 递归下载

wget -r http://www.example.com/path1/path2/

-r:递归在下整个站点(www.example.com)资源
-nd:递归下载时不创建一层一层的目录,把所有的文件下载到当前目录;不指定该选项默认按照资源在站点位置创建相应目录
-np:递归下载时不搜索上层目录,只在当前路径path2下进行下载;不指定该选项默认搜素整个站点
-A 后缀名:指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
-R 后缀名:排除要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
-L:递归时不进入其它主机。不指定该选项的话,如果站点包含了外部站点的链接,这样可能会导致下载内容无限大
示例,只下载path2路径下的所有pdf和png文件,不创建额外目录全都保存在当前下载目录下:
wget -r -nd -np -A pdf,png http://www.example.com/path1/path2/

curl 命令
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。

与wget类似的下载功能
1. 单个文件下载

curl [-o 自定义文件名|-O] http://www.example.com/index.html

-o 自定义文件名:把服务器响应输出到指定文件
-O:与-o选项作用一样,区别在于以 url 路径最后一个"/"之后的部分作为文件名
如果这两个选项都不写,curl 默认会把服务器响应内容输出到终端

2. 断点续传

curl -O -C 偏移量 http://www.example.com/testfile.zip

-C 偏移量:从指定的偏移量处继续下载,偏移量以字节为单位
如果让curl自动推断出正确的续传位置可以使用 "-" 代替偏移量,例如:
curl -O -C - http://www.example.com/testfile.zip

3. 带宽控制和下载配额

curl -O --limit-rate 下载速度 http://www.example.com/testfile.zip

--limit-rate 下载速度:限定不超过指定的下载速度。例:--limit-rate 500k
--max-filesize 下载配额:指定最大可下载文件大小
处理复杂的web请求
1. 自动跳转

curl -L http://www.example.com

-L:自动跳转到重定向链接(Location)
有些链接访问时会自动跳转(响应状态码为3xx),-L参数会让 HTTP 请求跟随服务器的重定向。例如:访问 "http://a.com" 会重定向到 "http://b.com",使用"-L"选项会返回 "http://b.com" 的响应内容

2. 显示响应头信息

curl -i http://www.example.com

-i:输出包含响应头信息
-I:输出仅包含响应头信息,不包含响应内容
3. 显示通信过程

curl -v http://www.example.com

-v:显示一次http通信的整个过程,包括端口连接和http request头信息
如果还需要查看额外的通信信息,还可以使用选项 "--trace 输出文件" 或者 "--trace-ascii 输出文件",例如:curl --trace-ascii output.txt http://www.example.com,打开文件 "output.txt"可以查看结果。

4. 指定http请求方式

curl -X 请求方式 http://www.example.com/test

-X 请求方式:指定http请求方式(GET|POST|DELETE|PUT等)。默认是"GET"
5. 添加http请求头

curl -H 'kev:value' http://www.example.com/test

-H 'kev:value':添加http请求头。例:-H 'Content-Type:application/json'
添加多个请求头,-H 选项重复多次即可。例如:
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' http://www.example.com/test

6. 传递请求参数

curl -X POST -d '参数' http://www.example.com/test

-d '参数':指定POST请求体。参数形式可以是 "k1=v1&k2=v2", 也可以是json串
--data-urlencode '参数':与 -d 相同,区别在于会自动将发送的数据进行 URL 编码
使用 -d 参数以后,HTTP 请求会自动加上标头"Content-Type:application/x-www-form-urlencoded",并且会自动将请求转为 POST 方法,因此可以省略 "-X POST"。如果要发送的请求体为json串,需要指定"Content-Type:application/json",例如:
curl -d '{"user":"zhangsan", "password":"123456"}' -H 'Content-Type:application/json' http://www.example.com/login

参数较多时,可以下把参数数据保存到本地文本中,然后从文本中读取参数数据。例如:
curl -d '@requestData.txt' -H 'Content-Type:application/json' http://www.example.com/login
如果要以GET请求方式发送表单数据,可以直接把参数直接追加url之后。例如:
curl http://www.example.com/login?user=zhansan&password=123456
7. 文件上传

curl -F 'file=@文件' https://www.example.com/test

-F 'file=@文件':模拟http表单向服务器上传文件。更多参数形式:file=@文件;name1=value1;name2=value2
文件上传时 -F 选项默认会给 HTTP 请求头加上 Content-Type: multipart/form-data,默认文件MIME类型为 application/octet-stream

指定上传文件 MIME 类型。下面示例指定MIME类型为"image/png"
curl -F '[email protected];type=image/png' https://google.com/profile
指定上传文件名。下面示例中原始文件名为"photo.png",但是服务器接收到的文件名为 "me.png"
curl -F '[email protected];filename=me.png' https://google.com/profile

8. 设置来源网址

curl -e '源网址' https://www.example.com

-e '源网址' 或 --referer '源网址':设置来源网址,即http请求头的 Referer字段。和 -H 选项直接设置请求头 "Referer" 字段等效
9. 设置客户端用户代理

curl -A '代理信息' https://www.example.com

-A '代理信息' 或 --user-agent '代理信息':设置客户端用户代理,即http请求头的 User-Agent字段。和 -H 选项直接设置请求头 "User-Agent" 字段等效
将"User-Agent"改成 Chrome 浏览器,示例:
curl -A 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36' https://www.example.com
移出 "User-Agent" 请求头,示例:
curl -A '' https://www.example.com

10. 设置cookie

curl -b '参数' https://www.example.com

-b '参数' 或 --cookie '参数':设置cookie参数。参数形式可以是 key1=value1;key2=value2...,也可以是一个文件
-c 文件:把服务器响应的cookie信息写入到文件中
至于具体的cookie的值,可以从http response头信息的 "Set-Cookie" 字段中得到,可以保存服务器返回的cookie信息到文件,再用这文件作为下次请求的cookie信息,如下:
curl -c cookies.txt http://example.com
curl -b cookies.txt http://example.com
11. 设置服务器认证的用户名和密码

curl -u 'user[:password]' https://www.example.com

-u 'user[:password]':设置服务器认证的用户名和密码。只有用户名时,执行curl后提示输入密码
wget与curl对比
wget 是一个独立的下载程序,无需额外的资源库,它也允许你下载网页中或是 FTP 目录中的任何内容, 能享受它超凡的下载速度,简单直接。
curl是一个多功能工具,是libcurl这个库支持的。它可以下载网络内容,但同时它也能做更多别的事情。

从用途方面,wget倾向于网络文件下载;curl倾向于网络接口调试,相当于一个无图形界面的 PostMan 工具

参考文章:
https://segmentfault.com/a/1190000022301195

详解ip addr命令

Linux操作系统指南:详解ip addr命令

Linux操作系统作为一款强大的开源操作系统,广泛应用于服务器、嵌入式设备、超级计算机等领域。

其中,ip addr命令是Linux网络配置中的核心工具之一,用于显示和管理操作系统中网络接口的IP地址。

本文将详细介绍Linux的IP ADDR命令及其使用方法。

1. IP ADDR命令的基本概念

IP ADDR命令是iproute2套件中的一个命令,用于显示和管理操作系统中的网络接口的IP地址。

这个命令可以显示网络接口的所有信息,包括IP地址、子网掩码、广播地址等。

2. IP ADDR命令的基本语法

IP ADDR命令的基本语法如下:

ip addr [show] [设备名称]
ip addr add [IP地址] dev [设备名称]
ip addr del [IP地址] dev [设备名称]

在上述命令中,show用于显示设备的IP信息,add用于添加IP地址,del用于删除IP地址。dev后面跟的是设备名称,例如eth0、lo等。

3. IP ADDR命令的使用实例

下面是几个常见的使用实例:

显示所有网络接口的IP信息:
ip addr show

显示特定网络接口的IP信息:
ip addr show eth0

给特定网络接口添加IP地址:
ip addr add 192.168.1.2/24 dev eth0

删除特定网络接口的IP地址:
ip addr del 192.168.1.2/24 dev eth0

4. 总结

IP ADDR命令是Linux网络配置中的重要工具,掌握这个命令的使用方法对于理解和管理Linux系统的网络配置有着重要的意义。

希望本文能够帮助你更好地理解和使用IP ADDR命令。

debian系统下目录结构及用途

一、根目录(/)
根目录是Debian系统的根源,所有的一级目录都从这里开始。 根目录下,存放这常用文件夹结构:

/bin
bin 是 Binaries (二进制文件) 的缩写,/bin目录包含了一些基本的可执行命令,如ls、cp和mkdir等。这些命令是系统启动时必需的,不依赖于其他文件系统。

/boot
/boot目录包含了引导Linux内核启动时所需的文件。例如,内核映像文件(vmlinuz)和引导加载程序(GRUB或LILO)配置文件都位于此目录中。

/etc
/etc目录包含了系统的配置文件。在这个目录下,存着网络配置文件、用户账户配置文件、软件包管理器(apt)配置文件等。一般修改IP,DNS等系统参数都修改此目录下文件。

/home
/home目录是每个用户的个人主目录。当创建新用户时,每个新用户就会在这个目录下生成个人文件夹,有点类似windows的用户目录,用于存储文件和配置。可以将该目录单独分一个盘区存放,重做系统后数据不丢失

/lib和/lib64
/lib和/lib64目录包含了系统所需的共享库文件。这些库文件被可执行文件使用,以提供系统功能和支持。

/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/media
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

/proc
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/opt
/opt目录用于安装可选软件包。一些第三方软件,如跨平台应用程序和专有软件,可能会安装在这个目录下。通常情况下,它们会有自己的子目录,以保持整洁。

/root
/root目录是超级用户(root)的个人主目录。与普通用户的主目录(/home)不同,root用户的主目录位于/root目录下。

/tmp
/tmp目录用于存储临时文件。这个目录下的文件通常在系统重新启动后被清除,所以你可以在这里放置临时数据和缓存文件。

/var
/var目录存储经常变化的数据。数据包括日志文件(/var/log)、临时文件(/var/tmp)和软件包数据库(/var/lib/dpkg)等。

/usr: /usr目录是一个重要的目录,包含了系统的许多子目录和文件。主要内容如下:

/usr/bin:系统的用户可执行命令。 /usr/include:用于C/C++编程的头文件。 /usr/lib:非系统关键库的共享库文件。 /usr/local:用户自行安装的软件(通常由源码编译得到)。 /usr/sbin:系统管理员使用的系统管理命令。 /usr/share:共享数据文件,如系统文档、图标和桌面文件等。

二、自己编译的程序放置的目录
当编译自己的程序时,你可以选择将可执行文件和相关文件放置在以下目录之一: /usr/local/bin: /usr/local/bin目录用于存放用户自行编译的可执行文件。将你的程序放置在这里,可以使其成为系统的一部分,并在终端中全局访问。

/opt: 前面已提到,/opt目录适用于安装可选软件包。你可以创建一个子目录(如/opt/myprogram)来存放你编译的程序及其相关文件。

eg:需要注意的是,如果你希望你编译的程序能够被所有用户访问,你需要相应地设置文件和目录的权限。

三、第三方软件的安装目录
对于第三方软件的安装,一般而言,可以选择将其放置在/opt目录或者/usr/local目录下。

/opt目录:该目录用于安装可选的软件包。你可以在/opt目录下创建一个子目录,例如/opt/mysoftware,然后将第三方软件的文件放置在这个子目录中。这种方式可以将第三方软件与系统自带的软件分开,使其易于管理。

/usr/local目录:/usr/local目录也可以用于存放用户自行安装的软件。你可以将第三方软件的文件放置在/usr/local目录下的相应子目录中,例如/usr/local/bin用于存放可执行文件,/usr/local/lib用于存放库文件,等等。使用/usr/local目录的好处是,它可以让你的软件成为系统的一部分,并且能够被所有用户访问。

需要注意的是,无论你选择将第三方软件放置在/opt还是/usr/local目录下,你需要确保正确设置文件和目录的权限,以便所有用户能够访问和执行这些软件。

此外,对于特定的第三方软件,它们可能会有自己的安装指导或推荐的安装目录。在安装该软件之前,最好查阅其官方文档或参考指南,以了解它们的推荐安装位置。

四、用户源代码
用户源代码通常放置在用户的个人目录或者特定的源代码目录中。下面是两个常见的放置源代码的目录:

用户的个人目录: 每个用户都有自己的个人目录,通常位于/home目录下,其路径类似于/home/username,其中username是用户的用户名。在个人目录中,用户可以创建一个专门用于存放源代码的文件夹,例如/home/username/src或/home/username/code。这样做的好处是,每个用户都有自己的私有空间来管理和组织自己的源代码。

/usr/local/src目录: /usr/local/src目录是一个常见的用于存放用户源代码的系统级别目录。在这个目录下,用户可以创建一个子目录,例如/usr/local/src/myproject,并将源代码放置在其中。这种方式适用于多个用户或者系统范围内的共享源代码,使得多个用户可以方便地访问和共享源代码。

需要注意的是,放置源代码的具体目录位置可以根据个人偏好和实际需求进行自定义。重要的是选择一个有组织且易于管理的位置,并确保适当设置文件和目录的权限,以确保源代码的安全性和访问性。

--------------------------------
我们应该知道 Windows 有一个默认的安装目录专门用来安装软件。Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的。

/usr 系统级的目录,可以理解为 C:/Windows/ , /usr/lib 可理解为 C:/Windows/System32 。

/usr/local 用户级的程序目录,可以理解为 C:/Progrem Files/ 。用户自己编译的软件默认会安装到这个目录下。

/opt 用户级的程序目录,可以理解为 D:/Software , opt 有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接 rm -rf 掉即可。

在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。

源码放哪里?
/usr/src 系统级的源码目录。

/usr/local/src 用户级的源码目录。

拓展:
/opt

Here’s where optional stuff is put. Trying out the latest Firefox beta? Install it to /opt where you can delete it without affecting other settings. Programs in here usually live inside a single folder whick contains all of their data, libraries, etc.

这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。

举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。

/usr/local

This is where most manually installed(ie. outside of your package manager) software goes. It has the same structure as /usr. It is a good idea to leave /usr to your package manager and put any custom scripts and things into /usr/local, since nothing important normally lives in /usr/local.

这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。

常用目录及用途
/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。

/etc 存放系统管理和配置文件

/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录

/usr/bin 众多的应用程序

/usr/sbin 超级用户的一些管理程序

/usr/doc linux文档

/usr/include linux下开发和编译应用程序所需要的头文件

/usr/lib 常用的动态链接库和软件包的配置文件

/usr/man 帮助文档

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里

/usr/local/bin 本地增加的命令

/usr/local/lib 本地增加的库

/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。

/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/root 超级用户(系统管理员)的主目录(特权阶级^o^)

/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。

/dev 用于存放设备文件。

/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。

/boot 存放用于系统引导时使用的各种文件

/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。

/tmp 用于存放各种临时文件,是公用的临时文件存储点。

/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

例:linux中lnmp相关软件的安装目录

Nginx 目录: /usr/local/nginx/

MySQL 目录 : /usr/local/mysql/

MySQL数据库所在目录:/usr/local/mysql/var/

PHP目录 : /usr/local/php/

PHP项目目录:/www/ 或者 /home/www/

FTP目录:/usr/local/ftp/

https://zhuanlan.zhihu.com/p/145270349

DEBIAN启用密钥登陆

在Linux系统里面,密钥登录是比较安全的一种方法,这里只说在debian 10里面,如何用密钥进行登录。

一,用ssh方式登录到debian系统,建议用putty这个软件

二,生成密钥,输入
ssh-keygen -t rsa(生成密钥)

按两次回车,即可完整的生成密钥了,就会在当前目录(一般为root目录)生成一个.ssh的文件夹

三,设置密钥

cd .ssh
查看目录内有哪些文件
ls -la
发现有id-rsa和id-rsa.pub两个文件,其中 id-rsa为私钥, id-rsa.pub 则为公钥

把公钥改一个文件名
cat id_rsa.pub >> authorized_keys

把改好的文件给上权限
chmod 600 authorized_keys
chmod 700 ~/.ssh

四,设置私钥
在.ssh目录内,查看私钥id_rsa的内容 ,命令:cat id_rsa

cat id_rsa查看密钥内容
然后把下面的所有的内容复制到一个记事本内,命名为:id_rsa

五,设置ssh用密钥登录的配置

nano /etc/ssh/sshd_config

把以下两个前面的注释去掉,让其生效
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

然后重启ssh

service sshd restart
或者
systemctl restart sshd.service

六,设置私钥

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
下载puttygen.exe,把私钥转换为putty可用模式

点File----->Load Private key,找到刚才另存为的id_rsa文件,打开,如下,点Save private key,然后保存为一个ppk的文件

七,用putty采用密钥登录,把上一步保存的ppk文件选中

如下图,直接输入root就可以登录了,不用密码

然后在/etc/ssh/sshd_conifg里面,把密码登录改为no,即为不用密码登录

PasswordAuthentication no

DEBIAN11 配置域名并启用SSL

DEBIAN 配置域名并启用SSL

1.将SSL证书文件放在/etc/ssl目录下,放其他目录也可以。

miie_net.pem
miie_net.key

2. 建立网站跟目录

sudo mkdir /var/www/miienet

3.编辑NGINX主机配置文件

miie@miie:~$ cd /etc/nginx/sites-available
miie@miie:/etc/nginx/sites-available$ sudo cp default miienet

miie@miie:/etc/nginx/sites-available$ sudo vi miienet

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or WordPress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        # 注释下面两行,不监听80端口
        #listen 80 default_server;
        #listen [::]:80 default_server;

        # SSL configuration
        #
        # 以下两行注释去掉,监听443端口,并去掉default_server
          listen 443 ssl ;
          listen [::]:443 ssl ;
        # 添加以下6行,导入证书
        ssl_certificate  /etc/ssl/miie_net.pem;
        ssl_certificate_key /etc/ssl/miie_net.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        # 配置网站跟目录
        root /var/www/miienet;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;

        # 配置网站域名
        server_name miie.net www.miie.net;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # 启用PHP支持
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
                # With php-cgi (or other tcp sockets):
                #fastcgi_pass 127.0.0.1:9000;
        }



        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
# 配置http网站支持
server {
       listen 80;
       listen [::]:80;

       server_name www.miie.net miie.net;
# 配置http转发到https
       rewrite ^(.*)$ https://miie.net;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
}

4.建立配置文件链接

sudo ln -s /etc/nginx/sites-available/miienet  /etc/nginx/sites-enabled/

5.测试并重启NGINX

sudo systemctl reload nginx
sudo systemctl restart nginx

DEBIAN11 安装NGINX PHP MARIADB

DEBIAN11 安装NGINX PHP MARIADB

1.更新系统

更新系统,不更新也行。纯粹个人强迫症

miie@miie:~$ sudo apt update  && sudo apt upgrade
Hit:1 http://mirrors.ustc.edu.cn/debian bullseye InRelease
Get:2 http://mirrors.ustc.edu.cn/debian bullseye-updates InRelease [44.1 kB]
Fetched 44.1 kB in 0s (113 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

安装wget unzip

sudo apt install wget unzip

2.安装NGINX

miie@miie:~ $ sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core geoip-database libdeflate0 libfontconfig1 libgd3 libgeoip1 libicu67 libjbig0
  libjpeg62-turbo libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
  libnginx-mod-stream libnginx-mod-stream-geoip libtiff5 libwebp6 libxml2 libxpm4 libxslt1.1 nginx-common nginx-core
Suggested packages:
  libgd-tools geoip-bin fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
  fontconfig-config fonts-dejavu-core geoip-database libdeflate0 libfontconfig1 libgd3 libgeoip1 libicu67 libjbig0
  libjpeg62-turbo libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
  libnginx-mod-stream libnginx-mod-stream-geoip libtiff5 libwebp6 libxml2 libxpm4 libxslt1.1 nginx nginx-common nginx-core
0 upgraded, 24 newly installed, 0 to remove and 0 not upgraded.
Need to get 16.8 MB of archives.
After this operation, 56.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
........
Setting up libnginx-mod-http-image-filter (1.18.0-6.1+deb11u2) ...
Setting up nginx-core (1.18.0-6.1+deb11u2) ...
Upgrading binary: nginx.
Setting up nginx (1.18.0-6.1+deb11u2) ...
Processing triggers for libc-bin (2.31-13+deb11u3) ...
miie@miie:~$

3.安装MARIADB

miie@miie:~$ sudo apt install mariadb-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  galera-4 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libclone-perl libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl
  libencode-locale-perl libfcgi-bin libfcgi-perl libfcgi0ldbl libgdbm-compat4 libgdbm6 libhtml-parser-perl libhtml-tagset-perl
  libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmariadb3 libmpfr6
  libperl5.32 libsigsegv2 libsnappy1v5 libterm-readkey-perl libtimedate-perl liburi-perl lsof mariadb-client-10.5
  mariadb-client-core-10.5 mariadb-common mariadb-server-10.5 mariadb-server-core-10.5 mysql-common perl perl-modules-5.32
  psmisc rsync socat
Suggested packages:
  gawk-doc libmldbm-perl libnet-daemon-perl libsql-statement-perl gdbm-l10n libdata-dump-perl libipc-sharedcache-perl
  libwww-perl mailx mariadb-test netcat-openbsd perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make
  libtap-harness-archive-perl python3
The following NEW packages will be installed:
  galera-4 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libclone-perl libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl
  libencode-locale-perl libfcgi-bin libfcgi-perl libfcgi0ldbl libgdbm-compat4 libgdbm6 libhtml-parser-perl libhtml-tagset-perl
  libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmariadb3 libmpfr6
  libperl5.32 libsigsegv2 libsnappy1v5 libterm-readkey-perl libtimedate-perl liburi-perl lsof mariadb-client-10.5
  mariadb-client-core-10.5 mariadb-common mariadb-server mariadb-server-10.5 mariadb-server-core-10.5 mysql-common perl
  perl-modules-5.32 psmisc rsync socat
0 upgraded, 43 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.3 MB of archives.
After this operation, 210 MB of additional disk space will be used.
Do you want to continue? [Y/n]Y //输入Y按回车键
Setting up libhtml-template-perl (2.97-1.1) ...
Setting up libcgi-fast-perl (1:2.15-1) ...
Processing triggers for libc-bin (2.31-13+deb11u3) ...
miie@miie:~$

配置MARIADB

miie@miie:~$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

创建数据库和用户

miie@miie:~$ sudo mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE miie_db;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT ALL ON miie_db.* TO 'miie'@'localhost' IDENTIFIED BY '123' WITH GRANT OPTION;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit;
Bye
miie@miie:~$

3.安装PHP


miie@miie:~$ sudo apt install php php-fpm php-mysql php-mbstring php-xml
//前三个是NMP运行的主程序基本模块,后两个是phpMyAdmin运行所需模块
Reading package lists... Done
Building dependency tree... Done
..................
Processing triggers for php7.4-cli (7.4.28-1+deb11u1) ...
Processing triggers for php7.4-fpm (7.4.28-1+deb11u1) ...
miie@miie:~$

在/var/www/html/文件夹里创建一个info.php文件,输入代码:,保存并关闭文件。
如果创建不成功请切换到root用户再试试。

miie@miie:~$ sudo echo "<?php phpinfo(); ?>" > /var/www/html/info.php
-bash: /var/www/html/info.php: Permission denied
miie@miie:~$ su
Password:
root@miie:/home/miie# echo "<?php phpinfo(); ?>" > /var/www/html/info.php
root@miie:/home/miie#

现在打开浏览器并键入以下地址,以查看Web服务器是否可以显示由此PHP脚本创建的内容。
http://IP/info.php
这里还没有配置NGINX,当然打不开的,打开的时候提示下载文件。

4.配置NGINX

//刚刚操作完忘了退出root用户了
root@miie:/var/www/html# cd /etc/nginx/sites-available
root@miie:/etc/nginx/sites-available# ls
default  default.bak

//编辑default文件
root@miie:/etc/nginx/sites-available# vi default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or WordPress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        #修改这一行,添加index.php。
        index index.html index.htm index.nginx-debian.html index.php;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        #修改下面内容,去掉注释。
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }



        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}
root@miie:/etc/nginx/sites-available#

修改完保存文件。执行以下命令确认配置文件无误并重启NGINX

root@miie:/etc/nginx/sites-available# systemctl reload nginx
root@miie:/etc/nginx/sites-available# systemctl restart nginx

现在打开浏览器并键入以下地址,可以查看PHP的信息页面,如果页面空白,请检查/var/www/html/info.php文件内容是否为“<?php phpinfo(); ?>”。
http://IP/info.php

5.安装PHPMYADMIN

root@miie:/var/www/html# ls
index.nginx-debian.html  info.php
root@miie:/var/www/html# wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
--2022-08-31 13:19:11--  https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
Resolving files.phpmyadmin.net (files.phpmyadmin.net)... 89.187.187.12, 89.187.187.20, 89.187.187.15, ...
Connecting to files.phpmyadmin.net (files.phpmyadmin.net)|89.187.187.12|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14801905 (14M) [application/zip]
Saving to: ‘phpMyAdmin-5.1.1-all-languages.zip’
phpMyAdmin-5.1.1-all-languages.z 100%[=======================================================>]  14.12M   860KB/s    in 15s
2022-08-31 13:19:28 (933 KB/s) - ‘phpMyAdmin-5.1.1-all-languages.zip’ saved [14801905/14801905]
root@miie:/var/www/html# ls
index.nginx-debian.html  info.php  phpMyAdmin-5.1.1-all-languages.zip
root@miie:/var/www/html# unzip  phpMyAdmin-5.1.1-all-languages.zip

解压完之后,在浏览器中打开
http://IP/phpMyAdmin-5.1.1-all-languages/
即可用刚刚设置的MARIADB的ROOT用户和密码以及自定的用户密码登录。

至此在Debian上安装NGINX PHP MariaDB已经完成并配置成功。

Debian普通用户添加sudo权限

刚安装好的Debian默认还没有sudo功能。
1、安装sudo

root@host# apt-get install sudo

2、修改 /etc/sudoers 文件属性为可写

root@host# chmod +w /etc/sudoers

3、编辑 /etc/sudoers ,添加如下行

root@host# vim /etc/sudoers
root ALL=(ALL) ALL
user ALL=(ALL) ALL 用户user执行sudo时需要密码。
#user ALL=NOPASSWD:ALL 用户user执行sudo时不需要密码。
#user ALL=NOPASSWD:/etc/network/interfaces 用户user执行只有sudo执行/etc/network/interfaces的权限,执行时不需要密码。

4、修改/etc/sudoers 文件属性为只读

root@host# chmod -w /etc/sudoers