Linux *linux基础指令**

linux文档目录结构

linux目录结构特点

1.目录树的起始点是根目录(/,root);
2.每一个目录不止能使用本地的文件系统,也可以使用网络上的文件系统,可以利用NFS服务器挂载特定目录。
3.每一个文件在此目录树中的文件名,包含完整路径都是独一无二的。
参考博客地址:
https://www.cnblogs.com/pyyu/articles/9306498.html 服务器硬件
https://www.cnblogs.com/pyyu/p/9277153.html linux入门
https://www.cnblogs.com/pyyu/articles/9313587.html 安装vmware+centos
https://www.cnblogs.com/pyyu/articles/9336967.html 远程连接linux
https://www.cnblogs.com/pyyu/p/9213237.html linux文件目录结构
https://www.cnblogs.com/pyyu/articles/9314206.html linux基本命令讲解
http://linux.51yip.com/ 在线linux命令查询

 

linux目录结构

#/bin
bin是Binary的缩写, 这个目录存放着最经常使用的命令
#/boot
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
#/dev
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
#/etc                                  
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
#/home
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
#/lib
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库
#/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
#/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
#/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了
#/opt
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的
#/proc
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
   这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#/root
该目录为系统管理员,也称作超级权限者的用户主目录
#/sbin
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
#/selinux
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的
#/srv
该目录存放一些服务启动之后需要提取的数据
#/sys
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs,
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映,当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建
#/tmp
这个目录是用来存放一些临时文件的
#/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
#/usr/bin
系统用户使用的应用程序
#/usr/sbin
超级用户使用的比较高级的管理程序和系统守护程序
#/usr/src
内核源代码默认的放置目录
#/var
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件

linux快捷键

1.tab键    用于自动补全命令/文件名/目录名
2.ctrl + l  清理终端显示
3.clear/cls  清理终端显示
4.ctrl + c   终止当前操作

linux开关机指令

reboot命令用于重启机器
poweroff用于关闭系统

目录相关操作

 

ls指令常用参数

-a  显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表的方式显示文件的详细信息
-h 配合-l以人性化的方式显示文件大小

 

切换基础指令

.       当前目录
..      上一层目录
-   前一个工作目录
~   当前【用户】所在的家目录
pwd 查看当前工作目录

mkdir创建目录

mkdir是make directory的缩写,用来建立新目录,
#创建文件夹(只能创建一个文件夹)
mkdir ./python
mkdir /home/oldboy/python
#递归创建文件夹
mkdir -p /home/oldboy/python
mkdir -p /home/{data1,data2,data3}

rmdir删除目录

#rmdir 删除空的文件夹(默认有提示;确认删除)
rmdir /tmp/oldboy
#递归删除文件或目录(默认有提示:确认删除)
rm -r
#强制删除文件或目录
rm -f
#递归强制删除文件和目录(慎用)
rm -rf

linux环境变量PATH

#查看环境变量
echo $PATH
   PATH(一定是大写的)这个变量是由一堆目录组成,分隔符是":"号,而不同于windows的";"号。

绝对路径和相对路径

#绝对路径:由根目录(/)为开始写起的文件名或者目录名称,如/home/oldboy/test.py;
#相对路径:相对于目前路径的文件名写法。例如./home/oldboy/exam.py,简单来说只要开头不是/,就是属于相对路径
#实例:
cd /var/log (绝对路径)
cd ../var/log(相对路径)

VIM编辑器使用

VIM概念

vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

VIM的三种模式

基本上 vi/vim 共分为三种模式,分别是
1:命令模式(Command mode),
2:输入模式(Insert mode)
3:底线命令模式(Last line mode)

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令
#移动光标
w(e)  移动光标到下一个单词
   b    移动到光标上一个单词
   数字0  移动到本行开头
   $    移动光标到本行结尾
   H    移动光标到屏幕首行
   M    移动到光标到屏幕的中间一行
   L    移动光标到屏幕的尾行
   gg    移动光标到文档的首行
   G    移动光标到文档尾行
   ctrl + f  下一页
   ctrl + b  上一页
  `.  移动光标到上一次的修改行
#查找
/chaoge     在整篇文档中搜索chaoge字符串,向下查找
?chaoge     在整篇文档中搜索chaoge字符串,向上查找
   *        查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
   #       查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
   gd        找到光标所在单词匹配的单词,并停留在非注释的第一个匹配上
   %    找到括号的另一半!!
#复制,删除,粘贴
   yy    拷贝光标所在行
   dd    删除光标所在行
   D     删除当前光标到行尾的内容
   dG    删除当前行到文档尾部的内容
   p     粘贴yy所复制的内容
   x   删除光标所在的字符
   u     撤销上一步的操作
# 数字与命令
3yy  拷贝光标所在的3行
5dd  删除光标所在5行

输入模式

在命令模式下按下字母i,就可进入输入模式
#常用指令
i install进入输入模式,在光标当前位置输入
a append在文件末尾添加
o 在光标下一行输入

底线命令模式

在命令模式下输入冒号(英文的:),就进入了底线命令模式,在底线命令模式下可以输入单个或多个字符的命令,常用命令有
  :q!     强制退出
  :wq!    强制写入退出
  :set nu 显示行号
  :数字  调到数字那行
在输入模式下,先esc退出输入模式,在输入冒号,就可进入底线模式
随时按下esc可以退出底线命令模式

 

vim按键指令

#移动光标的方法
   h 向左箭头键(←)    光标向左移动一个字符
   j 向下箭头键(↓)    光标向下移动一个字符
   k 向上箭头键(↑)    光标向上移动一个字符
   l 向右箭头键(→)    光标向右移动一个字符
   向下移动5行      5j
   向右移动10字符    10l
   n(space)    按下数字n,例如10,然后按下空格,光标会向右移动10个字符

底线指令

:! command    暂时离开vim指令模式,执行command的结果
例如 :!ip a    临时看一下ip信息,然后可以回到vim
#:set nu    显示vim行号
#:set nonu    取消行号

cat指令

cat指令用于查看纯文本文件内容
cat -n a.tat #打开文件显示行号
cat a.txt #打开文件
cat -E a.txt #在每一行的结尾加上$符号
#追加文字到文件
cat >>/tmp/oldboy.txt << EOF
唧唧复唧唧
木兰开飞机
开的什么机
波音747
EOF

more指令

1.more命令用于查看内容较多的文本,例如要看一个很长的配置文件,cat查看内容屏幕会快速翻滚到结尾。
2.more命令查看文本会以百分比形式告知已经看到了多少,使用回车键向下读取内容
more /etc/passwd
按下空格space是翻页
按下b键是上一页
回车键向下读取内容

echo命令

echo命令用于在终端输出字符串或变量提取后的值,格式是“echo 【字符串|$变量】”
#默认吧内容显示到终端上    
echo "超哥666"
#写入到文件中
echo "超哥666" > /tmp/chaoge.txt
#打印变量
echo $PATH #取出打印PATH的值

特殊符号

#输入/输出 重定向符号
1.>>    追加重定向,把文字追加到文件的结尾
2.>     重定向符号,清空原文件所有内容,然后把文字覆盖到文件末尾
3.<     输入重定向
4.<<    将输入结果输入重定向
echo "oldboy-python666" > /tmp/oldboy.txt
echo "chaoge666" >> /tmp/oldboy.txt
cat >>/tmp/oldboy.txt << EOF
------------------------------------
#我想把命令执行的结果信息,写入到文件中
ip addr > /tmp/network.txt   #标准输出重定向 把命令执行结果信息,放入到文件中
#3.通配符  
ls -l /etc/us*

shell基础命令

创建文件或者修改文件时间戳

#创建文件
touch a,txt
#修改文件的修改时间
touch -t'07787878' a.txt

stat命令

显示文件或文件系统的状态
#用法 stat [参数] 文件
参数列表:
-L, --dereference     跟随链接
-f, --file-system     显示文件系统状态而非文件状态
-c --format=格式      使用指定输出格式代替默认值,每用一次指定格式换一新行
--printf=格式     类似 --format,但是会解释反斜杠转义符,不使用换行作
                               输出结尾。如果您仍希望使用换行,可以在格式中
                               加入" "
-t, --terse           使用简洁格式输出
--help            显示此帮助信息并退出
--version         显示版本信息并退出
#格式化输出参数:
 %a    八进制权限
 %A   用可读性较好的方式输出权限
#实例1
[root@master tmp]# stat 1.txt
 File: '1.txt'
 Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 17348002    Links: 1
(权限)Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
(最近访问)Access: 2018-07-10 15:30:00.000000000 +0800
(最近更改)Modify: 2018-07-10 15:30:00.000000000 +0800
(最近改动)Change: 2018-11-07 15:38:36.400989868 +0800
Birth: -

#实例2,显示文件权限
[root@master tmp]# stat -c %a 1.txt
644
[root@master tmp]# stat -c %A 1.txt
-rw-r--r--

cp复制(备份)命令

复制 > copy > cp
#移动xxx.py到/tmp目录下
cp xxx.py /tmp/
#移动xxx.py顺便改名为chaoge.py
cp xxx.py /tmp/chaoge.py

#Linux下面很多命令,一般没有办法直接处理文件夹,因此需要加上(参数)
cp -r 递归,复制目录以及目录的子孙后代
cp -p 复制文件,同时保持文件属性不变  可以用stat
cp -a 相当于-pdr
#递归复制test文件夹,为test2
cp -r test test2

cp是个好命令,操作文件前,先备份
cp main.py main.py.bak

mv移动(重命名)

移动(搬家)命令  > move > mv
cd /home
#移动文件
mv /home/shahe/oldboy /tmp/chaoyang
文件/文件夹改名
mv x.log xx.log

rm删除指令

删除  > remove > rm
参数  -i  需要删除确认
   -f  强制删除
     -r  递归删除目录和内容
 
cd /tmp
rm oldboy.py
#默认有提示删除,需要输入y
rm -f oldboy.py #不需要提示,强制删除
#rm默认无法删除目录,需要跟上参数-r
rm -rf /tmp/oldboy/

find查找命令

find 在哪里(目录) 什么类型(文件类型) 叫什么名字(文件名)
参数
-name 按照文件名查找文件
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件

find /tmp/ -type f  -name "oldboy.py"
#找出/tmp所有以 .txt 结尾的文件
find /tmp/ -type f -name "*.txt"

#找到/etc下所有名字以host开头的文件
find /etc -name 'host*'

#找到/opt下一个名为settings.py
find /opt -name 'settings.py'

管道命令

Linux提供的管道符“|”讲两条命令隔开,管道符左边命令的输出会作为管道符右边命令的输入。
常见用法:
#检查python程序是否启动
ps -ef|grep "python"

#找到/tmp目录下所有txt文件
ls /tmp|grep '.txt'

#检查nginx的端口是否存活
netstat -tunlp |grep nginx

grep文本搜索

是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep [参数] [--color=auto] [字符串] filename
参数详解:
-i : 忽略大小写
-n : 输出行号
-v : 反向选择
--color = auto : 给关键词部分添加颜色

grep "我要找什么" /tmp/oldboy.txt
#排除 -v,排除我要找的东西
grep -v "我要找什么 /tmp/oldboy.txt
#找出/etc/passwd下root用户所在行,以及行号,显示颜色
cat /etc/passwd |grep '^root' --color=auto -n
#找出/etc/passwd所有不允许登录的用户
grep /sbin/nologin /etc/passwd
#找到/etc/passwd的所有与mysql有关行,行号
cat /etc/passwd |grep 'mysql' -n

head和tail指令

head显示文件前几行,默认前10行
tail显示文件后几行,默认后10行
#查看前两行8
head -2 /tmp/oldboy.txt
#查看后两行
tail -2 /tmp/oldboy.txt
#持续刷新显示
tail -f xx.log
#显示文件10-30行
head -30 /tmp/oldboy.txt |tail -21

sed指令

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

#命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
#选项
-e<script>--expression=<script>:以选项中的指定的script来处理输入的文本文件;
-f<script文件>--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;
-h或--help:显示帮助;
-n或--quiet或——silent:仅显示script处理后的结果;
-V或--version:显示版本信息。
-i ∶插入, i 的后面可以接字串
#sed命令
a 在当前行下面插入文本。
i 在当前行上面插入文本。
c 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。  
W file 写并追加模板块的第一行到file末尾。  
! 表示后面的命令对所有没有被选定的行发生作用。  
= 打印当前行号码。  
# 把注释扩展到下一个换行符以前。  
#sed替换标记
g 表示行内全面替换。  
p 表示打印行。  
w 表示把行写入一个文件。  
x 表示互换模板块中的文本和缓冲区中的文本。  
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
1 子串匹配标记
& 已匹配字符串标记
#sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
(..) 匹配子串,保存匹配的字符,如s/(love)able/