搭建个人服务器时,涉及到的Linux基础,在这里总结和梳理。
vim编辑模式
命令模式
- 从其它模式切换到命令模式:
<ESC>
键 - 很多命令以冒号(:)开始, 命令后加叹号表示强制执行
- 命令前可以跟数字n表示重复该命令n次
插入模式
- 从命令模式, 通过命令i进入
普通模式
- 又称可视模式(Visual)
- 从命令模式, 通过命令v 切换, 移动光标选定, x删除一个字符,dd删除一行字符,J可以把两行合并为一行,也就是说两行之间的换行符被删除或者 y 复制
搜索模式
按"/"键后进入搜索模式,输入关键字回车即可
进入与退出
- 进入: 在命令行下输入 vi 或者 vi filename (如果filename不存在则创建,存在则打开)
- 退出:在命令模式下输入
- :wq 保存并退出
- :wq! 强制保存并退出
- :q 退出
- :q! 强制退出
- :x 如果有改动则保存并退出, 否则直接退出
- :w filename 另存为filename
- :e 重新读入当前文
软件安装
Linux种类
一般来说著名的 Linux 系统基本上分两大类,不同类型系统,安装方式也不同:
- RedHat 系列:Redhat、Centos、Fedora 等,常见安装方式如下:
- 常见的安装包格式 rpm 包,安装rpm包的命令是“rpm -参数”
- 包管理工具 yum
- 支持 tar 包
- Debian 系列:Debian、Ubuntu 等,常见安装方式如下:
- 常见的安装包格式 deb 包,安装 deb 包的命令是“dpkg -参数”
- 包管理工具 apt-get
- 支持 tar 包
基础用法
- rpm用法
- 显示所有已安装的套件名称:rpm -qa
- 显示套件包含的所有档案:rpm -ql softwarename (小写L)
- 显示特定档案所属套件名称:rpm -qf /path/to/file
- 查询套件档案资讯:rpm -qip pkgfile.rpm (显示套件资讯) + rpm -qlp pkgfile.rpm (小写L,显示套件内所有档案)
- 显示指定套件是否安装: rpm -q softwarename (只显示套件名称) + rpm -qi softwarename (显示套件资讯)
- 安装:rpm ivh softwarename
- 移除:rpm -e softwarename
- dpkg用法
- 显示所有已安装的套件名称:dpkg -l (小写L)
- 显示套件包含的所有档案:dpkg -L softwarename
- 显示特定档案所属套件名称:dpkg -S /path/to/file
- 查询套件档案资讯:dpkg -I pkgfile.deb (大写I ) + dpkg -c pkgfile.deb
- 显示指定套件是否安装:dpkg -l softwarename (小写L,只列出简洁资讯) + dpkg -s softwarename (显示详细资讯) + dpkg -p softwarename (显示详细资讯)
- 安装:dpkg -i
- 移除:dpkg -r softwarename (会留下套件设定档) + dpkg -P softwarename (完全移除)
- apt
- 设定/etc/apt/souces.list:apt-setup
- 软体资料库同步:apt-get update
- 安装软体:apt-get install softwarename1 [softwarename2.....]
- 移除软体(保留设定档):apt-get remove softwarename 1 [softwarename 2...]
- 移除软体(不保留设定档):apt-get --purge remove softwarename 1 [softwarename 2...]
- 列出所有sofrwarename的套件:apt-cache search softwarename
- 更新套件,不指定套件名则更新所有可更新的套件:apt-upgrade [softwarename 1 softwarename2...]
- 删除系统暂存的deb(autoclean只会将比目前系统旧版的套件删除):apt-get clean(autoclean)
- 转换系统的版本(需在/etc/apt/sources.list指定stable,testing或unstable):apt-get dist-upgrade
- yum
- 安装套件:yum install softwarename1 [softwarename2.....]
- 更新套件,不指定套件名则更新所有可更新的套件:yum update [softwarename 1 softwarename2...]
- 列出目前在yum server 上面有的套件:yum list,支持模糊搜索,比如yum list java-1.7*
- 显示套件资讯:yum info
- 移除下载到本机的packages 或headers:yum clean
- 移除已经安装的套件:yum remove softwarename1 [softwarename2.....]
编译安装
针对filename.tar.gz格式的文件,则需要采用编译安装的方式。基本步骤如下:
- 下载或拷贝文件至指定目录(/tmp?)
- 解压缩:tar xvzf filename.tar.gz,通常在解压缩后产生的文件中,有名为"INSTALL"的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
- 准备工作:./configure,它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。这一步一般用来生成 Makefile,为下一步的编译做准备.
- make:编译
- make install :安装
- make clean:清除编译过程中产生的临时文件和配置过程中产生的文件
- make distclean :除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
- 可以使用-prefix指定安装路径,eg:./configure --prefix=/usr/local,好处如下:
- 如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。
- 如配置./configure –prefix=/usr/local/test,可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。对于卸载软件或移植软件非常有帮助。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
- 当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。因此安装编译安装完成后,源代码建议不要删除。
关系描述
以Centos系统为例,安装软件的方式有如下:
- 使用wget下载一个rpm包, 然后用
rpm -ivh xxx.rpm
安装这个软件 yum install sqoop
自动下载和安装依赖的rpm软件- 扩展:wget和curl区别
- wget是个专职的下载利器,简单,专一,极致;
- curl可以下载,但是长项不在于下载,而在于模拟提交web数据,POST/GET请求,调试网页
- wget可以递归,支持断点;而curl支持URL中加入变量,因此可以批量下载。
- 个人用途上,用wget来下载文件,加 -c选项不怕断网;使用curl 来跟网站的API 交互,简便清晰
目录结构规范
- 见Linux目录规范
- 目前镜像软件安装主要有:nginx,tomcat,jdk,mysql,ftp,node,可以使用whereis命令查看位置。
环境变量
环境变量类型
Linux环境变量有多种类型,加载顺序为:
1./etc/profile
2./etc/paths
3.~/.bash_profile
4.~/.bash_login
5.~/.profile
6.~/.bashrc
当然/etc/profile
和/etc/paths
是系统级别的,系统启动就会加载,后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果~/.bash_profile
文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile
文件不存在,才会以此类推读取后面的文件。~/.bashrc
没有上述规则,它是bash shell打开的时候载入的。
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。在 Mac 和 Linux 的终端直接输入 env,会列出当前的环境变量。
查看单个环境变量:echo $PATH
全局设置
/etc/paths(全局建议修改这个文件):编辑 paths,将环境变量添加到 paths文件中 ,一行一个路径
/etc/profile(建议不修改这个文件):全局(公有)配置,不管是哪个用户,登录时都会读取该文件
/etc/bashrc(一般在这个文件中添加系统级环境变量):全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件
用户设置
~/.bash_profile (任意一个文件中添加用户级环境变量)
~/.bashrc 同上
修改变量并生效
编辑环境变量:vim ~/.bash_profile
修改后立即生效:source ~/.bash_profile
如果没特殊说明,设置PATH的语法都为:export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
最近在修改环境变量时碰到一个大坑,有必要注意一下,比如修改上述文件.bash_profile,我们每让这个文件生效一次,也就是调用source一次,PATH路径就会越来越长,是不断累加重复的,因为$PATH在自加的关系。如果不小心把PATH清空,导致基本命令都不能使用了怎么办,很简单,重新给PATH赋值即可,执行export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export 命令
- 功能说明:export可新增,修改或删除环境变量,供后续执行的程序使用。
export的效力仅及于该此登陆操作
。 - 语法:export [-fnp][变量名称]=[变量设置值]
- 参数
- -f 代表[变量名称]中为函数名称。
- -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
- -p 列出所有的shell赋予程序的环境变量。
- 例子
- export PATH=$PATH:/opt/au1200_rm/build_tools/bin
- $PATH代表已有的环境变量,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所有路径。
- “$PATH”表示原先设定的路径仍然有效,注意不要漏掉。
- 参看所有环境变量:直接使用export
- 查看结果:echo $PATH
- 知识扩充
/bin
、/sbin
、/usr/bin
、/usr/sbin
、/usr/local/bin
等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。- 如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 export $PATH="路径”(或“PATH=$PATH:路径”) ($PATH为环境变量名,如DVSDK;调用时用$DVSDK)可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可选:
/etc/profile
和用户主目录下的.bash_profile
,/etc/profile
对系统里所有用户都有效,用户主目录下的.bash_profile
只对这个用户有效。
软链接和硬链接
- 语法
- ln dec dst 硬链接
- ln -s src dst 软链接
- 基础知识
在linux系统下一切皆文件,目录它也是一个文件,只不过在它里面存储的是一张表的文件。
在linux系统中,保存在磁盘的文件不管什么类型,都会分配一个编号,称为索引节点号,而节点就类似我们c语言中学过的数组的下标,我们可以把每个文件都看成是数组中的元素,而知道了节点号,就可以找到实质的文件内容了。 - 硬链接(hard link)
文件A是文件B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。 - 软链接(soft link)
A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。软链接可以理解成window环境下的快捷方式。 - 使用限制
- 硬链接
- 不能对目录创建硬链接,防止出现链接环,影响文件遍历。
- 不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。
- 不能对不存在的文件创建硬链接,由原理即可知原因。
- 软链接
- 可以对目录创建软链接,遍历操作会忽略目录的软链接。
- 可以跨文件系统
- 可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了
- 作用
- 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
- 软链接又称之为符号连接(Symbolic Link)。软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
- 硬链接
用户管理
- 查看用户和用户组
可以查看所有用户的列表 cat /etc/passwd 描述:用户名:密码(x):用户id:用户组id:用户描述:用户目录:用户登录用的shell 查看用户组 cat /etc/group
- 基础操作
增加用户,并设置用户的主目录 useradd -d /mydata/nodeServer/fileServer/www py 设置用户密码 passwd py 限定用户只能ftp usermod -s /sbin/nologin py 恢复用户可以登录telnet usermod -s /bin/bash py 更改用户的主目录为/test usermod -d /test py
- sftp限制用户只能访问自身路径
修改/etc/vsftpd/vsftpd.conf如下 1.chroot_list_enable=YES//限制访问自身目录 2.找到vsftpd.conf说明路径找到vsftpd.chroot_list,将受限制的用户添加进去,每个用户名一行 改完配置文件,执行重启 service vsftpd restart
文件权限管理
权限查看
ls -l xxx.xxx (xxx.xxx是文件名) 权限查看:一共有10位数 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other)
具体含义
r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) \- 表示相应的权限还没有被授予
修改权限
使用字母
符号含义: \+ 表示添加权限 \- 表示删除权限 = 表示使之成为唯一的权限 具体用户含义: u 代表所有者(user) g 代表所有者所在的组群(group) o 代表其他人,但不是u和g (other) a 代表全部的人,也就是包括u,g和o 例子如下: chmod o+w xxx.xxx 表示给其他人授予写xxx.xxx这个文件的权限 chmod go-rw xxx.xxx 表示删除xxx.xxx中组群和其他人的读和写的权限
使用数字
r(4),w(2),x(1),-(0) 常用权限: -rw------- (600) 只有所有者才有读和写的权限 -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限 -rwx------ (700) 只有所有者才有读,写,执行的权限 -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限 -rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限 -rw-rw-rw- (666) 每个人都有读写的权限 -rwxrwxrwx (777) 每个人都有读写和执行的权限 NOTE:设置文件夹权限不会同时设置子目录,如果需要设置子目录,需要-R参数递归遍历子目录
- 查看文件所属用户和组
chown 用户 目录或文件名 chown qq /home/qq (把home目录下的qq目录的拥有者改为qq用户) chgrp 组 目录或文件名 chgrp qq /home/qq (把home目录下的qq目录的所属组改为qq组)
附录1:常用基础命令
cd /
回到根目录,/表示根目录,利用它可以实现类似windows的绝对跳转,eg:cd /project表示根目录下的project
cd ~
进入用户家目录,比如root用户就进入到/root,比如zzz用户,就进入到/home/zzz
tab补全
使用tab键,可以根据当前目录的文件进行匹配补全
mkdir 文件名
创建文件夹
tar zvxf 包路径
解压指定压缩包到何路径
mv [选项] 源文件或目录 目标文件或目录
当第二个参数类型是文件时,mv命令完成文件重命名,当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中
cp 文件 路径
文件拷贝,如果拷贝文件夹添加 -r表示递归
rm删除文件
如果删除文件夹,添加-rf。-r 就是向下递归,不管有多少级目录,均一并删除 ;-f 就是直接强行删除,不作任何提示的意思
find 路径 –name name
第一个参数表示在那个路径下搜索,第二个表示根据那个字段,第三个表示查询内容
netstat –tln
显示当前端口的暂用和监听情况
touch filename
创建文件
whereis softwarename
查看软件安装位置
which softwarename
查询运行文件所在路径
加鸡腿