linux-debian系统初始化

Linux-Debian 10系统初始化

账户初始化

本文的Linux账号名皆以lelouch为例!!!

账户的创建与权限修改都是系统用户操作,所以这一节的命令都是使用root用户执行的。

  1. 使用adduser lelouch命令创建账户,本文的用户名皆以lelouch为例。adduser是交互式命令,按照指令创建即可。
  2. 为新创建的用户添加sudo权限:echo 'lelouch ALL=(ALL:ALL) ALL' > /etc/sudoers.d/lelouch。若无sudo命令,则用apt install sudo安装。(这样添加sudo权限不用来回改sudoers文件的写权限)
  3. 切换到lelouch用户:su lelouch,进行下一步操作。

安装常用软件

以下命令都是以lelouch用户执行。

1$ sudo apt update
2............
3$ sudo apt install vim python3 python3-pip netcat unzip redis rar sqlite3 default-jdk tree build-essential tcpdump curl wget git cmake net-tools nginx
4..............
5$ sudo apt autoremove

以上需要的软件因人而异。如果发现自己那个命令是因为没装而出现command not found可以参考这个网站:https://command-not-found.com/

更换常用源

如果你有代理,那么不必换成国内源。

apt换成国内源

打开/etc/apt/sources.list文件,替换其中所有内容为国内源地址。以下为Debian 10 buster版本源的地址,选择其中一个源就行(最好复制一份原有内容到别处作为备份)。

 1# 阿里apt源
 2deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
 3deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
 4deb http://mirrors.aliyun.com/debian-security buster/updates main
 5deb-src http://mirrors.aliyun.com/debian-security buster/updates main
 6deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
 7deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
 8deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
 9deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
10# 网易163源
11deb http://mirrors.163.com/debian/ buster main non-free contrib
12deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
13deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
14deb-src http://mirrors.163.com/debian/ buster main non-free contrib
15deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
16deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
17deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
18deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

之后,使用sudo apt update更新即可完成换源。

pip换成国内源

我们使用pip config set global.index-url来指定下载的源。如果你的pip命令是pip3那么下面的命令都换成pip3。由于pip默认要求是https传输,而国内的源都是http的,因此直接换会有The repository located at http://xxxxxxxxxxxx is not a trusted or secure host and is being ignored.这个错误,所以我们还要再后面加上信任国内源pip config set global.trusted-host的设置。

 1# 清华源
 2$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 3$ pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
 4# 阿里源
 5$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
 6$ pip config set global.trusted-host mirrors.aliyun.com
 7# 腾讯源
 8$ pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple
 9$ pip config set global.trusted-host mirrors.cloud.tencent.com
10# 豆瓣源
11$ pip config set global.index-url http://pypi.douban.com/simple/
12$ pip config set global.trusted-host pypi.douban.com
13
14# 升级 pip 为最新版本
15$ sudo pip install pip -U

npm换成国内源

1$ npm config set registry https://registry.npm.taobao.org
2$ npm info underscore 
3#如果上面配置正确这个命令会有字符串response
4# 其他还有华为的源
5$ npm config set registry https://mirrors.huaweicloud.com/repository/npm/

npm每次会在我主的文件夹创建一个node_modules,package.json,packet-lock.json等文件,很烦。

docker换成国内源

目前默认的源速度还不错,如果确实需要更换源,则要在配置文件中添加registry-mirrors的配置。Linux下的默认配置文件是/etc/docker/daemon.json,没有此文件就创建一个。在文件中添加源:

1# https://<my-docker-mirror-host>表示要替换的源地址
2{
3  "registry-mirrors": ["https://<my-docker-mirror-host>"]
4}

https://<my-docker-mirror-host>可以替换成:

更改镜像后重启docker,sudo systemctl restart docker

github加速

你都要用github了,还没代理吗?

实在需要访问加速,可查看国内的镜像地址https://github.com.cnpmjs.orghttps://hub.fastgit.org可惜经常被限流,多刷新几次。如果用谷歌浏览器,可以下载github加速插件(可惜被Wall,自己去别的地方找)。修改HOSTS文件的方法也失灵时不灵。

如果需要下载加速,可尝试https://toolwa.com/github/

最方便稳定的还是代理。

配置环境变量

Linux中有多个配置环境变量的文件,分为系统级(对所有用户生效)和用户级两种。其顺序为

1/etc/environment -> /etc/profile(/etc/profile.d) -> 
2(~/.bash_profile | ~/.bash_login | ~/.profile) -> 
3~/.bashrc -> (/etc/bashrc | /etc/bash.bashrc) -> 
4~/.bash_logout
  • 系统级:
    1. /etc/environment:是系统在登录时读取的第一个文件,该文件设置的是整个系统的环境,只要启动系统就会读取该文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如PATH=$PATH:/xxx/bin的代码即可。
    2. /etc/profile:此文件是系统登录时执行的第二个文件。 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。(/etc/profile可以用于设定针对全系统所有用户的环境变量,环境变量周期是永久性)。
    3. /etc/bashrc:是针对所有用户的bash初始化文件,在此中设定的环境变量将应用于所有用户的shell中,此文件会在用户每次打开shell时执行一次。(即每次新开一个终端,都会执行/etc/bashrc)。
  • 用户级(这些文件处于用户根目录下):
    1. ~/.profile:对应当前登录用户的profile文件,用于定制当前用户的个人工作环境(变量是永久性),每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!
    2. ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。(~/.bashrc只针对当前用户,变量的生命周期是永久的)。
    3. ~/.bash_profile or ~./bash_login:~/.bash_profile是交互式login 方式进入bash运行的,~/.bashrc是交互式non-login方式进入bash运行的通常二者设置大致相同,所以通常前者会调用后者。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
    4. ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。

系统级环境变量如/etc/profile中设定的变量(全局)的可以作用于任何用户,而用户级环境变量如~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系。

另外,如果只是临时的增加变量,使用export命令声明即可,变量在关闭shell时失效。所添加变量的优先级取决于export命令中变量的顺序如:

1# 低优先级
2export PATH=$PATH:$NEW_VAR
3# 高优先级
4export PATH=$NEW_VAR:$PATH

SSH与sshd设置

一般情况下,Debain这类Linux发行版自带ssh服务器(openssh-server)和客户端(openssh-client)。

服务端设置:修改sshd的端口,端口设置在/etc/ssh/sshd_config,其他还要注意以下配置项:

 1# 修改端口,默认22,最好改成别的,比如5122
 2Port 22
 3#AddressFamily any
 4# 监听IP地址,0.0.0.0表示任意IP
 5#ListenAddress 0.0.0.0
 6#ListenAddress ::
 7............
 8............
 9# 是否允许root通过ssh登录,如果你只有root用户,千万不要设置成no
10# 其他情况下最好设置成no
11PermitRootLogin yes
12#StrictModes yes
13#MaxAuthTries 6
14#MaxSessions 10
15# 通过公钥登录,如果需要就去掉前面的注释符
16PubkeyAuthentication yes
17# 指定存放客户端ssh公钥的文件的位置
18# Expect .ssh/authorized_keys2 to be disregarded by default in future.
19AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
20............
21............
22# 这里是否保持客户端长连接可以设置成60
23ClientAliveInterval 60
24#ClientAliveCountMax 3

修改后需要重启ssh生效。

客户端设置:windows系统,推荐使用MobaXtermhttps://mobaxterm.mobatek.net/。记住,将settings->ssh->SSH keepalive选上。不然会自动断开连接。Linux系统使用默认的bash就可以。

如果需要使用公钥登录服务端,则还要生成公私钥对。公私钥对是客户端生成的,将客户端的公钥内容复制到服务端的.ssh/authorized_keys文件中,如果需有多个公钥则一行一个的复制粘贴。

1# 生成公私钥对,下面一路回车即可
2$ ssh-keygen -t rsa
3Generating public/private rsa key pair.
4Enter file in which to save the key (++++++++++):
5Created directory '++++++++++'.
6Enter passphrase (empty for no passphrase):
7Enter same passphrase again:
8Your identification has been saved in ++++++++++/id_rsa.
9Your public key has been saved in ++++++++++/id_rsa.pub.

'++++++++++'指的是公私钥对存放的位置,打开该位置,然后将id_rsa.pub文件中的内容复制出来,放到服务端.ssh/authorized_keys文件中,即可通过公钥登录ssh服务端。

Nginx设置

安装nginx:sudo apt install nginx。需要指出nginx的命令默认放在/usr/sbin/nginx,根据所以只有$PATH包含了此路径且有权限才可以使用。而/sbin这种一般是root用户才能使用的,所以运行nginx的命令要加sudo

Nginx软件本身的设置在/etc/nginx/nginx.conf,如果不是对Nginx与http协议很熟悉,建议不要更改。我们一般要改的网站设置放在/etc/nginx/sites-available文件下,默认有一个default文件,里面存放了一个默认的网站设置,下面我举个完整配置的例子:

 1server {
 2        # 这里指定Nginx监听的端口,即网站的端口IPv4,IPv6
 3        listen 8888 default_server;
 4        listen [::]:8888 default_server;
 5
 6        # SSL configuration SSL设置,即Https监听设置 默认443端口
 7        #
 8        # listen 443 ssl default_server;
 9        # listen [::]:443 ssl default_server;
10        #
11        # Self signed certs generated by the ssl-cert package
12        # Don't use them in a production server!
13        #
14        # include snippets/snakeoil.conf;
15        # 指定此网站的目录,以此为网站的根目录
16        root /var/www/html;
17
18        # Add index.php to the list if you are using PHP
19        # 打开的默认文件,如果没有指定文件,默认寻找以下几个文件
20        index index.html index.htm index.nginx-debian.html;
21
22        server_name _;
23        # 对网站根目录的设置
24        location / {
25                # First attempt to serve request as file, then
26                # as directory, then fall back to displaying a 404.
27                try_files $uri $uri/ =404;
28        }
29        # 以根目录的基准下面一个加密文件夹的设置
30        location /encryption/ {
31                # 运行目录遍历
32                autoindex on; 
33                # 不允许查看文件大小
34                autoindex_exact_size off;
35                # 设置默认字符集
36                charset utf-8;
37                # 请输入验证码的提示
38                auth_basic "Please complete user authentication";
39                # 存放加密认证文件的位置,这个是自己指定的,使用Apache的htpasswd工具来创建密码文件
40                auth_basic_user_file /etc/nginx/vhost/htpasswd;
41        }
42        # 这里是PHP的设置,不用PHP的可以不管
43        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
44        #
45        #location ~ \.php$ {
46        #       include snippets/fastcgi-php.conf;
47        #
48        #       # With php5-cgi alone:
49        #       fastcgi_pass 127.0.0.1:9000;
50        #       # With php5-fpm:
51        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
52        #}
53        # .htaccess可以实现每个文件夹更精细的功能,不详细展开,可参考官方文档
54        # deny access to .htaccess files, if Apache's document root
55        # concurs with nginx's one
56        #
57        #location ~ /\.ht {
58        #       deny all;
59        #}
60}

配置文件中以每一个server{...}为一个网址的配置内容。如果需要在同一个Nginx部署多个网站,可以通过端口或者别名区分。虽然说可以把多个网站配置放在同一个文件中,我还是建议在/etc/nginx/sites-available文件下为每一个网站单独建个文件。比如说有两个网站,我们可以分别在/etc/nginx/sites-available建立website1,website2两个文件,每个文件中分别放一个server{...}配置。

刚开始的时候,我不清楚/etc/nginx/sites-available/etc/nginx/sites-enabled的区别。其实,sites-enabled文件下放置都是来自sites-enabled下文件的软链接。Nginx只读取sites-enabled下的软连接内容,也就是说Nginx只上线sites-enabled下的配置网站。我们写把配置都写在sites-enabled文件夹中,如果认为某个网站配置(比如website2文件)没有问题可以上线了,就在sites-enabled文件夹中使用ln -s /etc/nginx/sites-available/website2 /etc/nginx/sites-enabled/website2,让Nginx读取website2的配置,然后我们使用nginx -t测试配置文件是否正确,如果正确则显示:

1nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2nginx: configuration file /etc/nginx/nginx.conf test is successful

然后即可重启Nginx,是新的配置生效。

Anaconda安装

由于国外的源速度较慢,我们使用清华源来安装

 1$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
 2--2021-11-19 00:46:58--  https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
 3Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.15.130, 2402:f000:1:400::2
 4Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15.130|:443... connected.
 5HTTP request sent, awaiting response... 200 OK
 6Length: 667976437 (637M) [application/octet-stream]
 7Saving to: ‘Anaconda3-5.3.1-Linux-x86_64.sh’
 8
 9Anaconda3-5.3.1-Linux-x86_64.sh    100%[=============================================================>] 637.03M  10.5MB/s    in 56s
10
112021-11-19 00:47:55 (11.3 MB/s) - ‘Anaconda3-5.3.1-Linux-x86_64.sh’ saved [667976437/667976437]

下载好之后,在下载目录目录中,出现一个Anaconda3-5.3.1-Linux-x86_64.sh这样子的文件,运行它就好,切换到该文件目录运行

1bash Anaconda3-5.3.1-Linux-x86_64.sh

然后接下来会要有几次配置环境变量操作,一般默认就行。注意,安装完后需要退出终端后,再次进入才能输入conda命令。

如果显示"command not found",则将conda添加到环境变量中echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc,更新bashrc以立即生效,source ~/.bashrc。配置好PATH后,可以通过which conda或conda –version命令检查是否正确。

Jupyter notebook

python3 pip 安装

1$ pip3 install jupyter
2# 如果出现"Faied building wheel for cffi"的错误则安装以下:
3$ sudo apt-get install libssl-dev libffi-dev python3-dev

使用NVM安装Nodejs

首先安装NVM,其官方说明文件在https://github.com/nvm-sh/nvm,有具体的安装脚本。

nvm安装完后就可以开始管理nodejs的版本了

1# 最新的lts版本
2nvm install --lts
3# 目前最新的lts版本是v16.13.0 (2021.11.18)
4$ node -v
5v16.13.0
6$ npm -v
78.1.0
8$ nvm -v
90.39.0

即得到最新的稳定版node与npm。

安装Hexo

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。官方文档:https://hexo.io/zh-cn/docs/

 1$ npm install hexo-cli -g
 2$ mkdir -p nodejs && cd nodejs
 3# 使用hexo,初始化
 4$ hexo init hexoblog
 5# 生成静态文件
 6$ hexo generate
 7INFO  Validating config
 8INFO  Start processing
 9INFO  Files loaded in 80 ms
10WARN  No layout: 2021/11/19/hello-world/index.html
11WARN  No layout: archives/index.html
12WARN  No layout: archives/2021/index.html
13WARN  No layout: archives/2021/11/index.html
14WARN  No layout: index.html
15INFO  Generated: archives/index.html
16INFO  Generated: archives/2021/index.html
17INFO  Generated: archives/2021/11/index.html
18INFO  Generated: index.html
19INFO  Generated: 2021/11/19/hello-world/index.html
20INFO  5 files generated in 14 ms
21# 测试网页
22$ hexo server
23INFO  Validating config
24INFO  Start processing
25INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

切换Hexo主题

Docker安装与配置

官方文档安装指南:https://docs.docker.com/engine/install/debian/

x86/amd64系统请查看Install using the repository这一节,如果是在树莓派上安装docker,查看Install using the convenience script这一节。

安装完之后查看https://docs.docker.com/engine/install/linux-postinstall/来自己选取一些需要的配置。比如我这里需要这节中的非sudo使用Docker,则参看“Manage Docker as a non-root user”这一节。

Jenkins安装与使用

Jenkins官方安装指:https://www.jenkins.io/doc/book/installing/linux/#debianubuntu

如果jenkins未启动,通过执行以下命令启用并启动Jenkins服务:sudo systemctl enable --now jenkins

初次访问jenkins(默认8080端口),需要复制/var/lib/jenkins/secrets/initialAdminPassword文件夹下的密码。接下来要安装jenkins插件,在下一个屏幕上,安装向导将询问您是否要安装建议的插件或要选择特定的插件。对于初学者,单击Install suggested plugins(安装社区推荐的插件)框即可,安装过程将立即开始。漫长的等待之后,系统将提示您设置第一个管理员用户。填写所需的信息,然后保存并继续。然后使用其默认生成的IP(或域名)以及端口即可。

完成后,我们将被重定向到以前面的步骤之一创建的admin用户身份登录的Jenkins仪表板。至此,我们已经在系统上成功安装了Jenkins。

PS:安装完成后,如果apt库立的jenkins库总是拖速度,可以把jenkins源删掉sudo rm /etc/apt/sources.list.d/jenkins.list

Gitlab安装

Gitlab有debian的官方安装教程,请参考https://about.gitlab.com/install/#debian

Linux目录结构与用处

  • /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev:dev是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。常见的配置文件都在这里
  • /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。一般用来存放各个用户自己的用户程序和数据
  • /lib(还包括/lib32,/lib64,/libx32):lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all;但是对这个文件中修改都是只在本次开机运行期间有效。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。/usr 是系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。
    • /usr/bin : 所有可执行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 内的);
    • /usr/include : 各种头文件,编译文件等时需要使用;
    • /usr/include/’package-name’ : 程序特定的头文件;
    • /usr/lib : 所以可执行文件所需要的库文件;
    • /usr/local : /usr 通常只包含系统发行时自带的程序,而 /usr/local 则是本地系统管理员用来自由添加程序的目录;
      • /usr/local/bin 本地增加的命令
      • /usr/local/lib 本地增加的库
    • /usr/share : 它包含了各种程序间的共享文件,如字体,图标,文档等。(/usr/local 对应的目录是 /usr/loca/share)
    • /usr/src : linux 内核的源码和说明文档等;
  • /var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。