linux-debian系统初始化 Nov 19, 2021 · linux · 分享到: Linux-Debian 10系统初始化 账户初始化 安装常用软件 更换常用源 apt换成国内源 pip换成国内源 npm换成国内源 docker换成国内源 github加速 配置环境变量 SSH与sshd设置 Nginx设置 Anaconda安装 Jupyter notebook 使用NVM安装Nodejs 安装Hexo 切换Hexo主题 Docker安装与配置 Jenkins安装与使用 Gitlab安装 Linux目录结构与用处 账户初始化 本文的Linux账号名皆以lelouch为例!!! 账户的创建与权限修改都是系统用户操作,所以这一节的命令都是使用root用户执行的。 使用adduser lelouch命令创建账户,本文的用户名皆以lelouch为例。adduser是交互式命令,按照指令创建即可。 为新创建的用户添加sudo权限:echo 'lelouch ALL=(ALL:ALL) ALL' > /etc/sudoers.d/lelouch。若无sudo命令,则用apt install sudo安装。(这样添加sudo权限不用来回改sudoers文件的写权限) 切换到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中国区官方镜像:https://registry.docker-cn.com 网易:http://hub-mirror.c.163.com ustc:https://docker.mirrors.ustc.edu.cn 中国科技大学:https://docker.mirrors.ustc.edu.cn 阿里云容器服务:https://cr.console.aliyun.com/ 更改镜像后重启docker,sudo systemctl restart docker。 github加速 你都要用github了,还没代理吗? 实在需要访问加速,可查看国内的镜像地址https://github.com.cnpmjs.org,https://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 系统级: /etc/environment:是系统在登录时读取的第一个文件,该文件设置的是整个系统的环境,只要启动系统就会读取该文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如PATH=$PATH:/xxx/bin的代码即可。 /etc/profile:此文件是系统登录时执行的第二个文件。 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。(/etc/profile可以用于设定针对全系统所有用户的环境变量,环境变量周期是永久性)。 /etc/bashrc:是针对所有用户的bash初始化文件,在此中设定的环境变量将应用于所有用户的shell中,此文件会在用户每次打开shell时执行一次。(即每次新开一个终端,都会执行/etc/bashrc)。 用户级(这些文件处于用户根目录下): ~/.profile:对应当前登录用户的profile文件,用于定制当前用户的个人工作环境(变量是永久性),每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次! ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。(~/.bashrc只针对当前用户,变量的生命周期是永久的)。 ~/.bash_profile or ~./bash_login:~/.bash_profile是交互式login 方式进入bash运行的,~/.bashrc是交互式non-login方式进入bash运行的通常二者设置大致相同,所以通常前者会调用后者。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。 ~/.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系统,推荐使用MobaXterm,https://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。