Linux上常见服务搭建
提前知识
常见文件压缩及解压
tar
1 | tar [-cxtzjvfpPN] 文件与目录 .... |
参数:
- 压缩与解压(以下三个仅能存在一个,不能同时存在)
-c
:建立一个压缩文件的参数指令(create)-x
:解开一个压缩文件的参数指令-t
:查看 tarfile 里面的文件
- 压缩与解压类型
-z
:是否同时具有 gzip 的属性?即是否需要用 gzip 压缩?(.tar.gz、.tgz)-j
:是否同时具有 bzip2 的属性?即是否需要用 bzip2 压缩?(.tar.bz2、.tar.bz)
-v
:压缩的过程中显示文件-f
:使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数- -p :使用原文件的原来属性(属性不会依据使用者而变)
- -P :可以使用绝对路径来压缩
- -N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中
- –exclude FILE:在压缩的过程中,不要将 FILE 打包
范例:
1 | 范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar |
其他常用类型
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
gzip 命令
语法:gzip [选项] 压缩(解压缩)的文件名
- -c 将输出写到标准输出上,并保留原有文件
- -d 将压缩文件解压
- -l 对每个压缩文件,显示下列字段
- 压缩文件的大小
- 未压缩文件的大小
- 压缩比
- 未压缩文件的名字
- -r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩
- -t 测试,检查压缩文件是否完整
- -v 对每一个压缩和解压的文件,显示文件名和压缩比
- -num 用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或–best表示最慢压缩方法(高压缩比)。系统缺省值为 6
Linux上常见服务搭建
Ubuntu用户管理
创建用户
useradd
user add (user)
只是创建一个用户名,命令如下:
1 | sudo useradd username |
它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的情况出现,可以添加-m
参数创建:
1 | sudo useradd username -m |
它会在/home目录下创建同名文件夹,然后利用sudo passwd username
为指定的用户名设置密码。
adduser
(system) add user
这个命令实际是一个perl脚本,是useradd等类似底层命令的更友好的前端,它会用交互性的方式建立新用户,使用它可以指定新用户的家目录,登录密码,是否加密主目录等等,它会:
- 建立一个新目录作为家目录
- 建立同名新组
- 把用户的主要组设为该组(除非命令选项覆盖以上默认动作,比如–disall-homdirecry之类)
- 从/etc/SKEL目录下拷贝文件到家目录,完成初始化
- 建立新用户的密码
- 如果其存在的话,还会执行一个脚本
1 | sudo adduser username |
删除用户
通过userdel
命令即可:
1 | sudo userdel -r username |
-r
:删除/home/
路径下的用户文件夹
添加root权限
/etc/sudoers
该文件只能由root用户处理,其中包含了root权限的具体信息,具体可以参见linux /etc/sudoers 文件说明,其中信息有:
1 | # User privilege specification |
-
root用户具有root权限
-
root用户可以在任何可能出现的主机名的系统中,在任何用户任何组中执行任何命令
-
文件格式
1
2
3# useralias (用户名) hostalias (可以从哪些机器登陆) = (用户:用户组)"以什么用户,什么组" cmndalias "执行什么命令"
useralias hostalias = (username:group) cmndalias
%FOO ALL = (ALL) NOPASSWD:ALL,!/usr/sbin/NOPASSWD:ALL
:不用输入密码执行任何命令%
:表示用户组!
:表示禁止执行
-
-
admin组和sudo组中的用户均具有root权限
-
查看当前用户组:
1
2
3id username
# 查看所有组及其用户
cat /etc/group | grep username -
添加到root权限组:
1
2
3# usermod -a -G group -s /bin/bash username
usermod -a -G sudo -s /bin/bash username
usermod -a -G admin -s /bin/bash username-G
:修改用户组(注意需要包含用户已有的组,否则会从已有的组中退出,或者通过-a
保留)-a
:append,加上之前的组
或者:
1
2# 通过gpasswd来管理组
gpasswd -a username sudo-a
:add
-
从指定组中移除用户:
1
gpasswd -d username group
-d
:del
-
/etc/sudoers.d/*
该文件夹下的内容和/etc/sudoers
中的类似,通过如下方式可以添加root用户:
1 | echo "username ALL=(ALL) ALL" >> /etc/sudoers.d/username |
TFTP服务
搭建步骤
tftp是Linux上常见的远程文件传输服务,其搭建方式如下(Ubuntu 18.04下实验成功):
-
搭建tftp服务器(tftp-server):
1
2sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd -
创建tftp共享文件夹并赋予其权限:
1
2mkdir /tftpboot
chmod 777 /tftpboot -
配置tftp服务器:
创建并打开
/etc/xinetd.d/tftp
文件,输入以下内容:1
2
3
4
5
6
7
8
9
10
11
12
13service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot # tftp的共享文件夹
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}打开
/etc/default/tftpd-hpa
文件,将其修改为如下所示内容:1
2
3
4
5
6# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot" # tftp的共享文件夹
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s" -
重启相关服务:
1
2sudo /etc/init.d/xinetd restart
sudo service tftpd-hpa restart
验证方法
-
在共享目录下创建文件
1
echo "hello tftp service" >> /tftpboot/a.txt
-
进入本地tftp服务器
1
2
3null@ubuntu:~$ tftp localhost
tftp> get a.txt
tftp> q -
如果在当前目录下看到刚刚创建在
/tftpboot
下的文件,则表示搭建成功
NFS服务
-
安装服务:
1
sudo apt-get install nfs-kernel-server rpcbind
-
修改配置文件
/etc/exports
,填入以下内容:1
2#nfs文件夹绝对路径 文件名(相关权限)
/home/null/NFS_Share *(rw,sync,no_root_squash) -
重启NFS服务:
1
sudo /etc/init.d/nfs-kernel-server restart
注意事项
在一些Linux驱动开发过程中,需要利用uboot通过nfs加载相关的文件或文件系统,但是往往会发生各种异常,其中低版本uboot和高版本deepin或者ubuntu搭配进行开发时尤其严重,根本原因是:
linux内核默认启动nfs,使用协议为2,即使在配置时,选择支持了更高级别的版本,但是未修改默认使用版本,依然会默认使用协议为2。而高版本的deepin或者ubuntu17之后nfs就默认支持3和4,因此需要deepin或者ubuntu支持协议2,或者内核启动nfs挂载,默认使用3以及以上版本挂载nfs。
方法如下:
-
修改ubuntu配置文件
/etc/default/nfs-kernel-server
,在配置文件尾部加上:RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
,使nfs支持协议2。之后重启NFS服务即可1
2#重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart -
修改Linux内核启动参数(内核支持更高等级的nfs协议),添加参数
proto=tcp,nolock,nfsvers=3,
,如:1
2
3tftp 80800000 zImage
console=ttymxc0,115200 root=/dev/nfs nfsvers=3 rw nfsroot=192.168.1.100:/home/null/NFS_Share ip=192.168.1.106:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off
注意:iptables用于设置,维护和检查Linux内核中IPv4包过滤规则的表,在意外情况下可以通过如下命令清除所有规则(如果有安装iptables):
1 | sudo iptables -F |
NodeJS安装
node、npm安装
-
从官网下载nodejs安装包或执行以下命令获取安装包
1
wget https://npm.taobao.org/mirrors/node/v10.15.0/node-v10.15.0-linux-x64.tar.xz
-
解压
1
2
3
4xz -d node-v12.18.3-linux-x64.tar.xz
tar -xvf node-v12.18.3-linux-x64.tar
# 或者
tar xvJf node-v12.18.3-linux-x64.tar.xz -
安装
1
2ln -s /root/node-v10.15.0-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v10.15.0-linux-x64/bin/npm /usr/local/bin/npm- 在 bin 下创建 node、npm快捷方式,方便全局使用
-
测试
1
2
3node -v
npm -v
node
离线安装npm包
去github下载对应的源码,然后通过以下步骤进行安装:
在能够联网的机器(ubuntu)上,执行以下步骤:
-
解压源码并进入
1
2tar -vxf L7-2.2.32.tar.gz
cd L7-2.2.32 -
安装npm包
1
npm install --global-style
--global-style
:表示将目前所处的npm包安装到./node_modules
中一个单独的npmname
文件夹中(可以方便地将npm包及其所有相关依赖都拷贝出来)
将上述整个文件夹拷贝出来,这里是L7-2.2.32
文件夹,放到离线机器上,并执行以下命令安装:
1 | cd L7-2.2.32 |