linux基础

  本文基于centos7.1的系统

一、目录操作

  linux文件系统只有一棵目录树,就是根分区(/)。linux大体的目录树结构如下

  

  bin: 该目录中存放Linux的常用命令

  dev: 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目录没有区别

  etc: 该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等

  sbin: 该目录用来存放系统管理员使用的管理程序

  var: 该目录存放那些经常被修改的文件,包括各种日志、数据文件

  usr: 用户的应用程序和文件几乎都存放在该目录下

  home: 用户的家目录

  lib:该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库

  tmp:用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净

  这里做一点简单的归纳

  1. 系统级的组件放在/bin、/lib;
  2. 根用户才能访问的放在/sbin;
  3. 系统repository提供的应用程序放在/usr/bin、/usr/lib;
  4. 用户自己编译的放在/usr/local/XXX。

  也可以这样理解:重要的二进制位于 /bin(用户二进制)以及 /sbin(系统二进制)中。不重要的二进制(如图形环境或Office 工具)安装在/usr/bin 和 /usr/sbin中。进行这种分隔是为了尽可能地缩小根分区。使用源代码编译的软件通常位于 /usr/local/bin 和/usr/local/sbin中。

  注:现如今大多数linux系统已经把/bin,/sbin,/lib,/lib64做成了/usr/bin,/usr/sbin,/usr/lib,/usr/lib64的符号链接,所以我们在以后的学习中可以不加以区分。

  目录结构具体可参考http://www.centoscn.com/CentOS/help/2015/0424/5262.html

 简单的目录操作命令

  1. pwd        ---- 查看当前目录
  2. cd dirname   ----- 切换目录,dirname有绝对路径和相对路径之分,其中.表示当前目录(可以用来构造下一级目录),..表示上一级目录,- 表示上一次目录。注:.和..只是提供目录跳转的符号,并不是一个文件或者目录
  3. ll -ha | less   ----- 查看目录内容,'q'退出 
  4. mkdir     ----- 创建目录(可以同时创建多个目录),-p选项是递归创建目录,-m设置目录权限
  5. rmdir    ----- 删除空目录(可以同时删除多个目录),一般不用,因为rm命令可以做到rmdir能做到的,也能做到rmdir做不到的 

  注意:默认的umask是022,也就是说创建目录默认权限是755,文件权限是644(去掉可执行权限1)。umask命令可以查看当前的umask值,我们也可以修改/etc/profile的umask值

二、文件操作

  linux的核心思想是一切皆文件,区别于windows的一点是不是以后缀名区分文件类型,可以用file命令查看文件类型

  注:file查看的文件类型是根据你写入的内容自动确定的

  linux把文件分为7类:目录(d)、普通文件(-)、链接文件(l)、块设备(b)、字符设备(c)、套接字(s)以及管道(p)

  ls -l 查看当前目录文件的时候有一项是文件最后修改或访问的时间,这可能是我们以后需要常关注的内容

  注意:上图的4k是文件夹本身的大小,不包括文件夹里面的文件的总大小,想要查看目录包含文件的总大小用du -sh dirname命令;linux的文件名和目录不能同名,同名的话cd就不知道该访问文件还是目录

  简单的文件操作命令

    touch filename                #  更改text的时间戳,若无text则创建text

    > filename                      # 无符号重定向,创建空文件

    rm filename                    # 删除文件 -r 递归删除    -f 强制删除,不显示提示信息

    mv A B                         # 把文件或者目录A移动到B,分为以下几种情况:A是文件或者目录,B不存在,则重名A为B;A是文件或者目录,B是目录,把A移动到B内;A是文件或者目录,B是文件,则提示是否覆盖

                  可以用-f参数直接不显示提示信息直接覆盖(可以同时把多个文件或者目录移动到最后一个目录)

    cp A B                         # -a 把A的所有特性一并复制   -r/-R/--recursively参数用来复制目录,若B不存在会自动创建

    vim file                       # a/A(append)  i/I(insert)  o/O(换行)

  vim是一个比较强大的编辑器,具体使用可以参考http://www.cnblogs.com/dengmj/p/5031498.html

数据流

  在linux中,几乎所有的命令都可以看作是一个程序。既然是程序,那么就应该有数据输入与输出,数据输入一般是通过标准输入输入的,数据输出一般输出到标准输出。所谓的标准输入与标准输出指的是程序的默认输入与默认输入,分别指的是键盘和显示屏,当然我们也可以根据自己的需要更改默认输入与默认输出。例如input() 默认找系统的stdin,而stdin又是默认连接到键盘。

  注:数据流不是全部直接流入到屏幕,而是先暂存在缓冲区,然后再一次性丢给屏幕。

  在这里,我们要区分从参数获得输入和从标准输入获得输入。从参数获得输入就是把参数给shell,然后由shell提交给命令。

  echo     # 回显,可以接受标准输入,也可以接收命令参数,甚至可以用拓展技术进行模式匹配

  输出重定向:>(不断刷新)   >>(追加)

  管道数据流模型:用于把一个程序的输出交给另外一个程序的输入

  python一般接收一个文件,把文件代码作为输入,但这里是直接把代码作为输入。

 详解cat

  1. 拼接输出 :接收输入,把输入的内容显示。输入既可以是文件列表,也可以是标准输入
  2. 拼接文件:结合重定向

  要想实现把内容同时输出到屏幕(标准输出)和文件,可以采用tee命令

信息展示

  

  我们把ll的结果利用管道交给grep,并当作grep的最后一个参数,这时grep参数就不需要指定最后一个参数。

  模式匹配是匹配文件名包含python的内容

  less: -e  当文件显示结束后,自动离开;  -N  显示每行的行号; -s  显示连续空行为一行; /字符串:向下搜索“字符串”的功能; ?字符串:向上搜索“字符串”的功能;

      b  向后翻一页, d  向后翻半页, h  显示帮助界面, Q  退出less 命令, u  向前滚动半页, y  向前滚动一行, 空格键 滚动一行, 回车键 滚动一页, [pagedown]: 向下翻动一页, [pageup]:   向上翻动一页

  more: +n  从第n行开始显示; -n  定义屏幕大小为n行; -s  把连续的多个空行显示为一行; +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示。

  注:less is more, 在以后的学习过程中我们常常用less

查找文件

 简单易用:updatedb + locate

 稍微复杂:find

  注意一点:一个文件的名字其实除了文件名本身外,其实还包括了它的路径。如果仅仅是文件名,则表示的是相对路径

  find 目录(默认当前目录) -test content    

  注:content不和通配符混合使用只能精确匹配

  test的类型如下:-name   -type   -size(M或者G是大写)

  操作符:-and/-a(默认)   -or/-o    -not/-!

链接

  软连接(-s)    # 相当于windows底下的快捷方式

  

  删除软连接

  

  软连接分为相对连接与绝对连接。相对连接不在乎连接的是什么,只是在乎连接的文件或目录的名称以及与软连接的相对位置。

  硬连接     # 相当于python中的对象引用(不要随便建立硬连接,因为修改其中一个就会修改对象内容)。去掉软连接的-s选项就是硬连接   

任务和进程

  jobs 命令查看当前后台运行的任务

  两个快捷键(针对于前台程序):crtl + z(暂停程序) crtl + c(终止程序)

  暂停程序后可以进行的操作:fg %num 把程序调度到前台运行;bg %num 把程序调度到后台运行(python server.py & 把程序放到后台运行)。(num 是查看jobs得出来的值)

  注:不要把有标准输出的程序放到后台运行,这样你的shell可能会和程序的输出混合到一起,但是两者互不影响;只有前台程序才能crtl + c 终止程序

  进程例子:ps -ef|grep mysql|grep -v 'grep' 得出来的结果的第二列是进程号,可以用kill命令删除;关掉主进程,守护线程也跟着关掉

时间

  查看当前系统时间:date

  查看当前系统时区:date -R

  调整当前系统时区:1、tzselect      2、cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime   例如 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

  设置当前系统时间:例如:将系统日期设定成2009年11月3日的命令 命令 : "date -s 11/03/2009";将系统时间设定成下午5点55分55秒的命令  命令 : "date -s 17:55:55"

  注:上述设置时间只是临时的,重启后即失效,要想永久设置时间可以用下面命令:hwclock -w

别名

  在linux系统中经常碰到很长的命令。我们又很难记住,或者觉得打那么多字麻烦,或者我们为了使我们经常要进行的某个操作方便快捷,那么我们可以可以把这些命令组合起来,给它指定一个别名,这样我们只要执行这个“别名”命令的时候,就相当于执行了之前的那个命令了,非常的方便。

  查看系统已有别名:alias

  临时更改别名:例如alias cdmydir='cd /root/mydir'

  取消别名:unalias cdmydir

  永久更改别名:直接使用alias命令定义的别名,重启后就会失效。因此如果需要永久使用别名,就需要做一些操作。修改/定义别名,实际上也是在定义系统的环境变量。系统环境变量文件是/etc/profile。

            但是查看profile文件,你会发现文件最开头就有提示:

  因此最好不要直接在/etc/profile文件出进行定义,而是在/etc/bashrc中进行定义,定义完成后,通过    #source /etc/bashrc使其生效。

      或者,重新定义一个文件 /etc/profile.d/alias_bash.sh (alias_bash文件名是任意取的),然后通过    #source /etc/profile.d/alias_bash使其生效。再或者修改root目录下的.bashrc文件

      通过这些方法,就可以使自己(自定义)的别名永久生效了。

端口

   linux如何查看端口被哪个进程占用的方法:1、lsof -i:端口号     2、netstat -tunlp|grep 端口号

   lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具

   netstat -tunlp用于显示tcp,udp的端口和进程等相关情况,配合grep进行过滤

   查看服务占用端口情况,命令是netstat -apn|grep Patern

  3306是占用端口,20973是PID

  注: grep的参数是模糊匹配   ps aux|grep mysql  和  ps aux|grep mysq结果一样哦(因为grep是模糊匹配)

统计当前目录下的文件个数、目录个数

  有时候我们不关心目录下的文件是什么,只关心目录下的文件个数。例如我们想要查看/bin目录下的命令总数,这时候我们就要用到下面的知识了。

  1. 统计当前文件夹下文件的个数              ls -l |grep "^-"|wc -l
  2. 统计当前文件夹下目录的个数          ls -l |grep "^d"|wc -l
  3. 统计当前文件夹下文件的个数,包括子文件夹里的         ls -lR|grep "^-"|wc -l        注意:-R 在这里表示recursive, -r表示reverse
  4. 统计文件夹下目录的个数,包括子文件夹里的           ls -lR|grep "^d"|wc -l

  注:ls的参数-l 必须和wc的参数-l 相对应,因为wc的-l 参数表示统计行数

  

原文地址:https://www.cnblogs.com/longyunfeigu/p/6709715.html