Better

Ethan的博客,欢迎访问交流

Linux基础使用

搭建个人服务器时,涉及到的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格式的文件,则需要采用编译安装的方式。基本步骤如下:

  1. 下载或拷贝文件至指定目录(/tmp?)
  2. 解压缩:tar xvzf filename.tar.gz,通常在解压缩后产生的文件中,有名为"INSTALL"的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
  3. 准备工作:./configure,它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。这一步一般用来生成 Makefile,为下一步的编译做准备.
  4. make:编译
  5. make install :安装
  6. make clean:清除编译过程中产生的临时文件和配置过程中产生的文件
  7. make distclean :除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
  8. 可以使用-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
    查询运行文件所在路径

更多资料



留言

瑶哈哈
2017-07-27 23:18

加鸡腿