linux基础(超详细笔记)

linux介绍

        基础命令、vim操作、shell编程

C语言

        c基础             

                for if 

        数据结构

                增、删、查、改

C++

系统编程、网络编程

arm编程

==================================================================

类:

Unix        1965年        AT MIT bell        多用户过进程分时系统、Miut        

                1970        PDP-7

                1972        C语言之父        里奇

                1985        Linux

                        社群        ubantu

                        商业        redhat

==================================================================

安装工具tool:

        调整分辨率 :

                系统---管理---显示---分辨率

==================================================================

进入终端:

        1.右键--->打开终端

        2.左上角--->附件--->终端

        3.按ALT +F2--->在运行窗口输入gnome-terninal

新建终端: ctrl + shift +n

新建标签: ctrl + shift + t

标签间切换: alt + 标签序号 

        例:alt + 2 切换到第二个标签

vim 文件名称---> i(编辑) --->按esc,按wq保存退出,w是保存,q是退出,强制退出是q!

回到桌面 : ctrl + alt + d

窗口最大化 :alt + F10

窗口最小化 : alt +F9

程序间的切换 : alt + tap

注销 (回到登录界面) : ctrl + alt +backspace

放大终端字体 : ctrl  + shift + =

缩写终端字体 : ctrl + -

关闭终端 : ctrl + shift + q 或者 输入exit

关闭标签 : ctrl + shift + w

关闭程序/窗口 : alt + F4

shutdown :

        shutdown -h -r -s

                立刻关机 : shutdown -h now

                10分钟后关机 : shutdown -h 10

                注释 : shutdow -h + 30  'The system is going DOWN for system halt in 30
  minutes!'

                立刻重启 : shutd - r now

        取消关机指令 (中断程序): ctrl + c

init :

        系统启动等级 :

        0 - 6 : 

        0 :关机

        1 :单用户

        2 :多用户 不联网

        3 :多用户

        4 :图形界面

        5 :安全模式

        6 :重启

==================================================================

目录结构 :

        / :根目录,所有的目录都是从根目录开始的

        /bin : 存放二进制可执行文件

        /sbin :存放管理员(root)可执行的二进制文件

        /root :管理员的家目录

                /root/install.log :d 安装日志文件,,保存安装历史信息

        /boot : 存放引导镜像文件目录

        /etc :存放各种配置文件

                /etc/rc.d :与开机,运行级别相关的配置文件

        /mnt :挂载目录

        /dev :存放设备文件

                c :字符设备

                b :块设备

                - :普通文件

                d :目录文件

                l  :链接文件

                p :管道文件

                s :套接字

        /var :存放系统经常发生改变的文件,如:日志、邮件

        /usr :程序的安装目录

                /usr/src :存放linux源文件

                /usr/include :存放头文件

                /usr/lib :存放库文件

        /proc :虚拟目录,目录系统状态信息

                cat /proc/version        查看内核信息

                cat /proc/cpuinfi        查看cpu信息

        /opt :存放扩展软件包目录

        /media :挂载光盘\u盘目录

        /selinux :存放系统增强安全的目录

        /tmp :临时存放目录

        /lost + found :遗失碎片的目录

        /srv :存放一些服务启动之后需要提取的数据

        /home :用户的主目录

        /sys :虚拟目录,相当于模块驱动,开机时加载过来

==================================================================

共享文件夹:

        点击虚拟机--->设置--->选项--->共享文件夹,总是启用,添加

        查看文件夹文件:cd /mnt--->ls(会显示hgfs)---cd hgfs(会看到共享文件夹)--->ls()可以看到共享文件夹的文件。

==================================================================

命令 :对linux系统进行控制、管理

        内部命令 :shell(内核)自带的命令,没有路径,不可被卸载

        外部命令 :(计算机)用户自己安装的一些命令,存在路径(以文件形式存在磁盘),可以被卸载。

        如何区分:type ;which

        格式:type +cmdname        which + cmdname

         [root@localhost ~]# type cd
         cd is a shell builtin               ->内部命令

 
        [root@localhost ~]# type tar
        tar is /bin/tar                     ->外部命令


         [root@localhost ~]# type ls
         ls is aliased to `ls --color=tty'   ->别名


         [root@localhost ~]# type -a cp
         cp is aliased to `cp -i'
         cp is /bin/cp
        cp is /root/bin/cp       ->区分别名的内外命令


         [root@localhost ~]# which ls
         alias ls='ls --color=tty'
               /bin/ls         ->外部

        [root@localhost ~]# which ch:       

                /usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:                 /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/FriendlyARM/                        toolschain/4.5.1/bin/)        ->内部

        内部命令是在操作系统开机时进行加载,并在后台运行

        外部命令很多是一些不常用的命令,只是在执行的时候会进行调用,在使用完后从内存中删除,减少内存占用,减少开机时的加载向,减轻系统的负担。

        查看所有的内部命令 :man        help        bash

==================================================================

man 帮助命令 :

        格式 : man + cmdname 

        退出文档 :按q

        手册类型 :

                1.Commands         普通的用户命令手册

                2.System calls        系统调用函数库手册

                3.Library calls        常用的一些函数和c库函数

                4.Special files        设备文件的一些说明

                5.File formats and conventions        配置的一些文件和其他的格式的文件说明

                        man 5 passwd

                6.Games       游戏相关的说明

                7.System management commands        网络协议相关说明

                8.System management commands        系统管理员可操作的命令

                9.Kernel routines         内核相关的文件

        其他帮助命令 :help         info

        内部命令(help) :help + cmdname 

        外部命令(help) :cmdname +  -- help 

        info + cmdname 

==================================================================

Tab键自动补全 :

        对文件补全

        对命令补全

        当按下后没有补全,再按一次就会出现提示信息(所有匹配的文件)

        当2次Tab键查看所有命令

==================================================================

 alias 别名 :

        格式 : alias + newname = 'cmdname'

        临时别名,脱离了当前申请终端标签(窗口),就不能使用

        如何永久 :

        修改配置文件 : vim ~/.bashrc,按i进行编辑

        再添加一行 :alias  + newname = 'cmdname'

        按esc退出编辑模式,  按(英文) :,输入wq保存退出

        初始化 :source  ~/.bashrc

==================================================================

ls :查看当前路径下的所有文件和文件夹

        格式 : ls [OPTION] 目录

        option :         touch 创建空文件        mkdir 创建空目录

         -l :长格式显示文件

        -a :显示所有文件和目录

        -A :显示除.和..以外的所有文件和目录

        -t :按最后修改的时间排序

        -S :按文件大小进行排序

        -h :把文件大小转成易读的方式

        --full-time :以完整的时间格式进行显示

                年 月 日 时 分 秒

        -i :显示文件的inode号

        [root@localhost learn]# ls -l
         97 总计 52
         98 -rw-r--r-- 1 root root 2249 03-10 18:03 03-10.txt

        第一列第一个字符 :文件类型

                c :字符设备

                b :块设备

                - :普通文件

                d :目录

                l :链接文件

                p :管道文件

                s: 套接字

        第一列的2~10 : 表示文件的权限位

                rwxr--r--

                权限位三个一组,共三组

                第一组 : 表示属主的个人权限

                第二组 :表示属组成员的权限

                第三组 :表示其他用户的权限

                r :读

               w :写

                x :执行

                - :无权限

        第二列 :硬链接数

                inode 号 :

                inode默认大小是128

                Byte,用来记录文件的权限、文件所有者、属组、文件大小、文件状态改变时间、文件按最近一次修改时间、文件数据保存的block编号.每个文件都需要占用inode号。inode等资源是有限的,在磁盘格式化的时候就已经固定了,如果inode资源用完就不能再新建文件。

                硬链接 :ln源文件,链接文件

                        相当于是对文件inode的备份

                        不可以跨区

                        不可以对目录进行创建

                        不会产生新的inode号(不是 创建新文件,相当于给文件起了一个别名)

                软链接 : ln -s 源路径 链接路径

                        相当于快捷方式

                        可以跨分区

                        可以对目录进行创建

                        会产生新的inode号

                        源文件或目录被删除后,链接文件就不能访问

                硬链接和软链接的区别. :

                1.原理上,硬链接和源文件的inode节点号相同,两者互为硬链接。软连接和源文件的inode节点号不同,进而指向的block也不同,软链接block中存放了源文件的路径名。实际上,硬链接和源文件是同一份文件,而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。

                2.使用限制上,不能对目录创建硬链接,不能对不同系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软链接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。

        第三列 :文件属主

        第四列 :文件属组

        第五列 :文件大小

        第六列 :文件最后修改的时间

        第七列 :文件名

==================================================================

cd : 切换当前路径

        格式 :cd + 路径

                绝对路径 : 从根开始         目录前有/

                相对路径 : 从当前目录开始         目录后有或无/、

        . :表示当前所在目录

        .. : 表示上级目录

        [root@localhost ~]# pwd
         /root
         [root@localhost ~]# cd ..
         [root@localhost /]# pwd
         /
 
     ~  :表示当前登录用户的家目录
         [root@localhost learn]# cd ~
         [root@localhost ~]# pwd
         /root
 
     -  :表示上一次所在的目录
         [root@localhost block]# cd -
         /learn

==================================================================

pwd : 查看当前所在目录的路径(绝对路径)

        pwd - P        显示出真实的路径 ,而非链接路径

        [root@localhost var]# cd /var/mail/
         [root@localhost mail]# pwd
         /var/mail
         [root@localhost mail]# pwd -P
         /var/spool/mail
 
         /var/mail 是一个链接目录,链接着 /var/spool/mail
==================================================================

touch :新建一个空白文件

        格式 :touch + filename 

        touch filea fileb        创建2个文件

        touch a{1,2,3}b{1,2}        创建了6个文件,两两组合

        touch "a{1,2,3}b{1,2}"         创建了1个文件,以双引号内部字符作为文件名

        stat filename        查看文件属性

        Access: 2023-03-11 17:21:24.000000000 +0800
        Modify: 2023-03-11 17:21:24.000000000 +0800
        Change: 2023-03-11 17:21:24.000000000 +0800

        Atime : 最后一次访问时间

        Mtime :文件修改(内容)时间

        Ctime :文件修改(属性)时间

单独修改文件的时间 :

        touch一个已经存在的文件,就会更改文件的时间(Mtime),但是内容不会被覆盖。

        touch -a : 修改Atime 和Ctime

                touch -at 1209151645 filename

        touch -c :仅修改文件时间,当文件存在时不会新建文件

        touch -d :后面可以根与修改的时间,而不用目前日期,也可以使用--date= "日期或时间",Atime Mtime

                touch -d "7 days age" hello.c

        touch -m :修改文件的Mtime和Ctime

                touch -mt 202209151234 filename

        touch -t :修改文件的Atime和Mtime到指定的时间,格式为[[CC]YY]MMDDhhmm[.SS]

                touch -t 201209240340 filename

        touch -r :参考文件 变更文件 :把指定的文件atime、mtime更改成和参考文件的相同值

==================================================================

rm :删除

        rm + fac + filename 

        rm + -r +dir

        -f :掠过交互

        -r :递归删除,用于删除目录

        * :通配符,也叫匹配符,用来匹配相应条件的文件或目录

                rm * -rf  :需要注意当前位置,不要在根下

                rm /* -rf :相当危险,执行时要确定命令是否有敲错

        ?:匹配相同个字符的文件名称

                rm ???? 删除文件名只有4个字符的文件

                        aaaa         aa.h         aa.c         a.txt         a.out

==================================================================

mkdir :新建目录

        mkdir + dirname

        -p :递归创建,用来创建多个嵌套的目录

                mkdir -p aa/bb/cc/dd

        注意区分绝对路径和相对路径

        默认创建文件的权限是        644

        默认创建目录的权限是        755

        umask :

                文件 :0666 - 0022 = 644

                目录 :0777 - 0022 = 755

        临时修改umask :

                umask + 2

        永久修改 :

                vim /etc/bashrc

==================================================================

rmdir :删除空目录(基本不用)

        rmdir -p /aa/ee/dd/ff

        需要递归删除

        tree:以树状结构显示目录和文件

==================================================================

cp :复印文件或者目录

        cp + sourcfile + dc

        -i : 默认存在的,交互

        -r :复制目录

        -u :若目标路径没有文件,则进行复制,如果有则对比源文件和目标路径同名文件的版本,若源文件版本比目标要新,则执行复制,否则不执行

        cp -r abc/ /tmp        复制abc目录到/tmp下

       

        复制文件 :

         [root@MiWiFi-R4A-srv ee]# cp cc /tmp/
         [root@MiWiFi-R4A-srv ee]# ll /tmp/
              总计 12
          -rw-r--r-- 1 root root    0 03-13 10:34 cc
  
          复制文件并改名
          [root@MiWiFi-R4A-srv ee]# cp cc /tmp/dd
          [root@MiWiFi-R4A-srv ee]# ll /tmp/
              总计 12

        交互:
      [root@MiWiFi-R4A-srv ee]# cp cc /tmp/dd
      cp:是否覆盖“/tmp/dd”? y
  
      去掉交互,就需要找到cp的源路径去执行
          cp是别名,执行cp也就是执行 cp -i
          用whic cp ,查看cp执行文件的路径
          直接运行他的源程序文件
==================================================================

mv :移动文件或者目录

        mv + sourcfile +dc 

        -f :略过交互

        -u :同上,,对比源和目标信息

        mv cc asd/        移动cc文件到当下的asd目录

        mv cc hello        把当下的cc改名成hello

        mv abc/ /tmp        移动abc到/tmp

==================================================================

cat :查看文件

        cat + file 

        -n :显示行号

        -b :显示行号,但是空号不编号        

        -E :在行末显示$

        -A :显示非打印字符(如tap)

tac :倒着查看文件,一行一行

==================================================================

more :分屏显示

        只能通过回车向下查看

less :通过上下方向键查看

head :从文件头开始显示,默认显示十行

        head -n 15 file

tail :从文件末开始显示,默认显示十行

        tail -n 15 file

==================================================================

wc :计算命令

        wc + filename

        [root@MiWiFi-R4A-srv learn]# wc hello.c
        36 36 99 hello.c        //hello.c文件的行数为36 单词数为36 字节数为99


        -w:计算单词数、字数
        -c:计算文件字节数
         -l:计算行数

==================================================================

grep :查找相匹配的内容(文件内容或文件系统)

        grep + 查找内容 + 文件名

                以行显示查找匹配内容

        --color :把匹配的内容用颜色标注出来

        -w :仅匹配单词

        -i :忽略大小写显示

        -n :显示匹配到的内容所在的行号

        -c :统计匹配到的内容所在的行号

        -o :只显示匹配到的内容

        -v :取反显示,显示匹配到的内容及以下的东西

        -A<num> :显示匹配到的内容及以上的num行

                grep -A2 bbbBBB abc

        -B<num> :显示匹配到的内容及以上的num行

                grep -B4 bbbBBB abc

        -C<num> :显示匹配到的内容及上下的num行

==================================================================

find :文件查找

        find + path +option + findname 

        -name :按名字名查找

        -perm :按权限查找

        -user :按属主查找

        -group :按属组查找

        -type :按类型查找

                f :指代-,普通文件 

                d        c        b        l

        -size :按文件大小查找

                +n :大于N

                -n :小于N

                n :等于N

                        g  M  k  b > block,c

                        一个block = 512字节,如果时查找小于1个块的文件,相当于查找空文件

                        find [path]  -size -lb

        -exec :找到文件后,针对其执行指定命令

                find -size -lb -exec rm {} \;

                        {} : 表示find找到的内容

                        \ :禁止转义

                        ; :本行结束的指示  \n

                        没有结束指示,则会提示 :

                                find :遗漏 “-exec”的参数

        -mtime :按文件修改(内容)时间查找

        -ctime :按文件修改(属性)时间查找

        

        find /etc/ -perm 755 -type d

        find /etc -uid 0

        find /etc -gid 0

==================================================================

tar :打包压缩工具

        解压缩

                tar -xvf tarfile

        打包

                tar -cvf tarfile.tar [path]

        压缩

                tar -cvf tarfile.tar.gz [path]

                tar -cjvf tarfile.tar.bz [path]

        查看

                tar -tf tarfile

        解压到指定路径

                tar -xvf nul.tar -C /learn/tar/

        -c :打包

        -r :添加到包里

        -v :显示过程

        -f :存在文件夹

        -j :调用bzip2进行压缩或者解压缩

        -z :调用gzip进行压缩或者解压缩

        -x :解包

        -C :解压到指定路径

        -t :查看

==================================================================

l :管道

        用于将多个管道链接起来,前一个命令的输出作为后一个命令的输入

        ls -l /etc/  | grep '^d' | wc -l

        find /user zhangsan | wc -l

==================================================================

重定向 :

        改变输入输出的方向

        标准输入        键盘        鼠标

        标准输出        屏幕        打印机

        输入输出代码:

                stdio        0        标准输入        键盘

                stdio        1        标准输出        屏幕

                stdio        2        错误输出        屏幕

        输出 :

        > :输出重定向,默认是标准输出

        2> :表示错误输出重定向

                ls -l /dddd 2> aa

        &> :表示标准&错误输出重定向

                ls -l / /dddd &> aa

        >> :表示追加,不会覆盖文件原有内容

        输入 :

                < :输入重定向

                        passwd < gg.txt

               << :表示函数结尾

==================================================================

用户 :

        useradd :添加用户

               useradd u_name 

        userdel :删除用户

                userdel -r u_name 完全删除用户

        groupadd:

        groupdel:

        切换用户 :

                su : su u_name

                su - : su - u_name 完全切换

                exit 退出 :也可以用ctrl + d

        文档 :

        用户账号文档

                /etc/passwd 

                用:进行分割,共七列

                第一列 : 用户名

                第二列 :密码

                第三列 :uid        

                第四列 : gid

                第五列 :描述信息

                第六列 :用户家目录

                第七列 :用户登录的shell,nologin表示不允许登录,在特殊进程中进行认证

        用户密码文档

                /etc/shadow

                第一列 : 用户名

                第二列 :密码,用MD5加密,为空则无

                第三列 :上一次密码修改的时间,天数,从1900年1月1日开始

                第四列 :密码修改最少间隔时间,0则表示随时可修改 

                第五列 :密码有效期,99999为永久有效

                第六列 :口令过期提示,7为提前7天提示

                第七列 :密码过期多少天后不能再使用,空则一直有效

                第八列 :密码过期时间,1900年1月1日开始算,空则长期有效

        组用户文档

                /etc/group

                第一列 :用户名

                第二列 :密码

                第三列 :GID

                第四列 :组成员

        组密码文档

                /etc/gshadow

chmod :文件、目录权限修改

        r w x -         7 7 7

                           r  -  -

                           1 0 0  >  4 

        三组权限 :属主        属组        其他用户

                               u           g                  o

                chmod u-w lisi

                chmod u+w lisi

                chmod o-x lisi

                        + > 增加权限

                        - > 减少权限

                chmod a = rw lisi

                        u g o都变成r w 的权限

        chown :改变文件属主、属组

                需要高级权限

                        chown lisi f_name        把属主改成lisi

                        chown :wangwu f_name         把属组改成wangwu

                        chown root:lisi f_name        把属主改成root,属组改成lisi

                属主和属组不能是不存在的用户

==================================================================

nfs :

        虚拟机设置--->网络适配器 :

                桥接模式 :VMware虚拟机的操作系统就相当于所局域网里面的一台独立主机,可以访问局域网内部的任何一台主机

                NAT :仅主机模式 :把真事环境和虚拟环境隔离开

                NAT :让虚拟机通过网络地址转换器,通过主机网络访问互联网

        查看主机网络IP地址 :

                win + r -> 运行窗口 -> 输入cmd,回车 -> ipconfig

        查看rehat ip地址 :

                ifconfig

        服务 :

                1.安装yum install nfs * ->ubantu apt

                        自行安装 -> 网络上找.rpm的安装包

                        源码安装 -> VMware-tools -> ./xxxxx.p1

                2.配置服务

                        服务器

                        vim /etc/exports

                                /nfs *(ro)

                                /cmf *(rw)

                                        /nfs :共享目录

                                        * :能ping通当前电脑的ip都能访问

                                        192.168.31.* :只有31这个网段的ip能访问

                                        (ro):权限,read only

                                        (rw):read and write尽量不要给别人写的权限

                        重启nfs服务 :service nfs restaer

                         [root@MiWiFi-R4A-srv C]# service nfs
                         用法:nfs {start|stop|status|restart|reload|condrestart}

        客户端 :

                1、ping 192.168.31.222 -c 3         查看与服务器的连接是否正常

                2.showmount -3 192.168.31.222        查看当前服务器上的共享目录

                3.mount 192.168.31.222:/nfs / mnt        挂载共享目录到本机

                4.df -h        查看文件系统,也就是查看是否挂载成功

                5.cp /mnt/* /tmp        复制文件

                6.umount /mnt           解挂

        ctrl + c 终止当前命令

==================================================================

vim编辑器 程序开发器

        vim的三种模式 :

                一般模式 :从终端进入的默认模式,从编辑模式下按ESC退回到一般模式

                        从底行模式按下ESC退回到一般模式

                编辑模式 :在左下角有“插入”字样的模式,从一般模式进入,按i、I、a、A、o、O

                底行模式 :在屏幕最后一行可以输入命令的模式,按:进入(英文底下:)

                        w wq q q!

        一般模式操作 :

                yy :复制一行

                nyy :复制n行

                dd :剪切一行

                ndd :剪切n行

                p :粘贴,从缓冲区进行粘贴,要和系统的剪切板区分开

                x :删除单个字符

                nx :删除n个子符

                dw :从 当前位置删除一个单词

                ndw :从当前位置删除n个单词

                d^ :从当前位置删除到行首,不包括当前光标位

                d$ :从当前位置删除到行末,包括当前光标位

                dgg :从当前行删除到文件头

                dG :从当前行删除到文件末尾

                ddp :交换两行位置 - >  p 粘贴是在当前光标位置的下一行进行粘贴

                cc :删除一整行,并进入编辑状态

                D :相当于 d$

                C :相当于d$,并在删除后进入插入状态

                S :相当于cc 

                daw :对光标所在的位置的整个单词删除

                xp :交换两个字符 - > p 粘贴是在当前光标位置的下一位进行粘贴

                J :合并两行,并用空格隔开

                u :撤销

                ctrl + r :取消撤销

        光标位置 :

                h :向左,等同于左方向键

                j :向下,等同于下方向键

                k :向上,等同于上方向键

                l :向右,等同于上方向键

                ^ :光标移动到行首,第一位有效字符

                0 :数字0,光标移动到行首

                $ :光标移动到行末

                H :光标移动到顶端的行首,第一位有效字符

                M :光标移动到屏幕中间的行首,第一位有效字符

                L  :光标移动到屏幕底端的行首,第一位有效字符

                gg :光标移动到文件头,第一位有效字符 - > 双击 [

                ngg :光标移动到文件第N行,第一位有效字符

                G :光标移动到文件末尾的行首,第一位有效字符

                50% :光标移动到文件的50%的行,第一位有效字符 - > 30%  70%

                w :将光标移动到下一个单词,光标在单词头

                b :将光标移动到上一个单词,光标在单词头

                e :将光标移动到下一个单词,光标在单词尾

                ge :将光标移动到上一个单词,光标字单词尾

                ctrl + u :将窗口向上移动到半个屏幕

                ctrl + d :将窗口向下移动半个屏幕

                ctrl + f :

                ctrl + b :

        可视操作 :

                v : 可视 = 多选

                shift + v :可视行

                ctrl + v :可视块

        移动操作 :

                ctrl + shift + > :右移

                ctrl + shift + <  :左移

编辑模式 :

        i I a A o O s S

        i :在当前光标位置编辑

        I :在行首第一位有效字符进行编辑

        a :在当前光标位置后编辑

        A :在当前光标所在行行尾编辑

        o :在当前光标所在行的下一行编辑

        O :在当前逛遍所在行的上一行编辑

        s :删除当前光标所在位置的字符,进行编辑

        S :把光标所在行清空,进行编辑,等同于cc

底行模式 :

        :w :保存

        :wq :保存退出

        :q :退出

        :q! :强制退出,已编辑但未保存的内容会消失

        :w! :强制保存,针对只读文件,只能由文件属主或者root用户才能进行强制保存

~/.vimrc :

        :set nu :显示行号,number

        :set nonu :不显示行号

        :set mouse=a :鼠标光标跟随

        :set ts=4 :制表符位设置为4,默认为8

        :set shiftwidth=4 :搭配自动对齐

        :set ai :自动对齐,缩进

        :set hlearch :设置搜索结果高亮显示

        :nnoremap <silent> \h :nohlsearch <CR>

        nmap ,d i #include <stdio.h><CR>#include <stdlib.h><CR>#include <string.h><CR><CR>int main(int argc,char **argv[])<CR>{<CR><CR><Tab>return 0;<CR>}<esc>==kkko<Tab>

        格式 :

                nmap :定义快捷键

                ,d :自定义的快捷按钮

                i :进入编辑模式

                <CR> :回车换行

                <Tab> :输入制表符

                <esc> :退出编辑模式,回到一般模式

                =kkko :光标移动

                :r :/etc/passwd :从其他文件读取(复制)内容到当前

                :sp filename :分屏显示,竖屏

                :vsp filename :分屏显示,横屏

                        在终端操作,vim -o file1 file2 ...       分屏显示,竖屏

                                              vim -o file1 file2...        分屏显示,横屏

                可以单个退出,也可以一起退出 :qall qa wqa

                :num :去到对应行

        查找 :/ ? + 查找内容

                / :从上往下查找

                ? :从下往上查找

                n :跳转到下一个查找内容

                N :跳转到下一个查找内容

                /< :开头 /\>

                /> :结尾 /\<

        替换 :

                :范围s/原内容/替换内容/ [option]

                1 :第一行

                $ :最后一行

                % :全文

                1,$ :从第一行到最后一行

                        没有指定范围则默认只替换一个

                1,$s/for/if/         把第一行到最后一行的for替换成if

                8,12s/for/if/        把第8行到12行的for替换成if

                %s/for/if             全文中的for替换成if

                %s/\$/r               把全文的$替换成r

        [option] 参数不带空格

                g :全局替换,可以修改到一行里面的多个替换内容 

                   :默认情况下每行只可以替换一个内容

                c :替换时需要手动确认

                i :不区分大小写

==================================================================

vim 文档加密 :

        vim -x filename

                输入密码两次

                给空密码则不加密

==================================================================

网络相关 :

        桥接

                NAT only

                NAT

                windows 下查看IP地址 :ipconfig

                linux 下查看IP地址 :ifconfig

 eth0      Link encap:Ethernet  HWaddr 00:0C:29:82:AF:F8
            inet addr:192.168.17.131  Bcast:192.168.17.255  Mask:255.255.255.0
            inet6 addr: fe80::20c:29ff:fe82:aff8/64 Scope:Link 
  lo        Link encap:Local Loopback
            inet addr:127.0.0.1  Mask:255.0.0.0
            inet6 addr: ::1/128 Scope:Host
      lo: 用作本地回环测试
IP地址  :

        点分十进制,一共32bit,192.168.17.131,分割成4个8bit二进制数,0~255,最大是255,0和255一般是不使用,255是广播,广播是专门用来同时给当前网段用户发送信息的地址。

网络配置 :

        无法查看网卡信息,可以重启网卡

                service network restart

        重启后还无法查看,则需要检查网络驱动

        网络设置图形界面

                system-config-network

        网络设置的配置文件

                /etc/sysconfig/network-scripts/ifcfd-eth0

       # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
       DEVICE=eth0
      设备名称
      BOOTPROTO=dhcp
      设置动态获取IP地址
      HWADDR=00:0C:29:82:AF:F8
      MAC码,前三组厂商号,后三组序列号
      ONBOOT=yes
      是否启用当前网卡
  
      -----------以上为动态获取情形-----------
      DEVICE=eth0
      设备名称
      BOOTPROTO=static
      设置静态获取IP地址
      HWADDR=00:0C:29:82:AF:F8
      MAC码,前三组厂商号,后三组序列号
      ONBOOT=yes
      否启用当前网卡
  
      IPADDR=192.168.0.155
      静态IP地址
      NATMASK=255.255.255.0
      子网掩码
      GATEWAY=192.168.0.1
      网关
      TYPE=Ethernet
      网络协议
      ------------以上为静态设置内容------------
  
      临时指定IP地址
          ifconfig eth0 192.168.0.12
          eth0        : 取决于需要修改的网卡,eth0   eth1 eth2.....
          192.168.1.2 : 临时指定的IP地址

==================================================================

Linux系统开机流程 :(以reh1为例)

        BIOS -- > MBR -- > kennel -- > Init

        1.电脑从按下电源键开始,就会进入到BIOS进行硬件检测

        2.检测完成,进入MBR,也就是Boot Loader

        MBR占据硬盘的第一个扇区,大小为512字节

        3.载入到kennel,载入电脑设备的驱动程序

        4.启动Init程序,Init进程号为1,是所有进程的祖先

        -------------------------------------------------------------------

        从进入到Boot Loader,到kennel,Init,这些过程由Grub这个多重开程序进行指引

        /boot/grub/grub.conf

        #        initrd /initrd-version.img

        #boot=/dec/sda

        default=0

        默认操作系统选项,指预设第一组title的系统开机,如果有多个title,多重启动,如果需要从第二个title启动,该值需要设置为1

        timeout=5

        指在进入grub界面的时候,会有5秒的等待时间让使用者选择开机的系统

        splashimage=(hd0,0)/grub/sp1ash.xpm.gz

        开机的grub界面的背景图,解压需要使用gunzip去执行

                图片查看 :eog iconame

        hiddenmenu -- > 开机菜单

        title Red Hat Enterprise Linux Server (2.6.18-194.e15)        root (hd0,0)

                Red Hat... 系统名称,会在grub界面显示  r.. - > boot

        title windows 10        -- > 要默认启动这个剧需要改成default=1

                kernel /vmlinuz-2.6.18-194.e15 ro root=LABEL=/ rhgb quiet

                        /vmlinuz-2.6.18-194.e15 -- > 镜像的名称

                        ro -- > 只读

                        root -- > 设定root的位置在根目录

                        rhgb -- >图形界面开机

                        quiet -- > 静默,在开机过程中不显示错误信息

                initrd /initrd-2.6.18-194.e15.img

                        把指定的文件放入到内存中,这个文件就是存放一些驱动程序

                -------------------------------------------------------------------

                Init 读取/etc/inittab配置文件

                        Init会根据运行级别来运行程序

                        /etc/rc.d/rc.sysinit

                        /etc/rc.d/rc

                        /etc/rc?.d/rc

                        /etc/rc.local

 # Default runlevel. The runlevels used by RHS are:
 #   0 - halt (Do NOT set initdefault to this)
 #   1 - Single user mode
 #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
 #   3 - Full multiuser mode
 #   4 - unused
 #   5 - X11
 #   6 - reboot (Do NOT set initdefault to this)
     0:关机,注意不要把启动级别设置为 0 ,否则系统无法正常启动
     1:单用户模式,在root用户下对系统进行维护
     2:多用户模式,把一些网络服务关闭了,如NFS
     3:完全的多用户模式
     4:未使用
     5:图形界面
     6:重启,不要把启动级别设置为6,系统无法正常启动
     #选择启动级别
     id:5:initdefault:
 
     # System initialization.
     #init会执行的初始作业系统程序
     si::sysinit:/etc/rc.d/rc.sysinit

     #init会根据运行级别执行对应目录里面的程序
     #选择5,则会把5参数传递给/etc/rc.d
     l0:0:wait:/etc/rc.d/rc 0
     l1:1:wait:/etc/rc.d/rc 1
     l2:2:wait:/etc/rc.d/rc 2
     l3:3:wait:/etc/rc.d/rc 3
     l4:4:wait:/etc/rc.d/rc 4
     l5:5:wait:/etc/rc.d/rc 5
     l6:6:wait:/etc/rc.d/rc 6
 
     # Trap CTRL-ALT-DELETE
     #设置组合键,按下ctrl+alt+del三秒就会重启系统
     ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
     # When our UPS tells us power has failed, assume we have a few minutes
     # of power left.  Schedule a shutdown for 2 minutes from now.
     # This does, of course, assume you have powerd installed and your
     # UPS connected and working correctly.
     #定义UPS不间断电源当电源断电后会执行哪些程序
     pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
 
     # If power was restored before the shutdown kicked in, cancel it.
     pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
 
     #产生6个虚拟终端
     # Run gettys in standard runlevels
     1:2345:respawn:/sbin/mingetty tty1
     2:2345:respawn:/sbin/mingetty tty2
     3:2345:respawn:/sbin/mingetty tty3
     4:2345:respawn:/sbin/mingetty tty4
     5:2345:respawn:/sbin/mingetty tty5
     6:2345:respawn:/sbin/mingetty tty6
 
     #启动级别为5时,初始化工作会启动X11
     # Run xdm in runlevel 5
     x:5:respawn:/etc/X11/prefdm -nodaemon
==================================================================

利用单用户模式进行密码破解 :

        前提条件 :grub 不加密

        在系统开机时出现的grub界面中,在读秒结束前,按下字母e,进入grub选项目录,再按一次e,进入grub具体目录,按上下方向键去选择相应的引导项,回车进入到引导项后,在出现命令行后输入空格,single或者1,回车,回退到grub引导项,按b重启进入单用户模式,进入系统后,通过passwd修改用户密码,达到修改密码的目的,修改密码后重启,回到正常图形界面。

        grub加密

        修改 /boot/grub/grub.conf

        timeout=5

        splashimage=(hd0,0)/grub/splash.xpm.gz

        hiddenmenu --- >开机菜单

                在hiddenmenu后添加一行

                password=123456

        titple Red Hat Enterprise Linux Server (2.6.18-194.el5)         root(hd0,0)

        不建议添加密码,后续出现密码丢失,就不能进行操作

        密码加密 :      
                 grub-md5-crypt  算法,直接在命令行输入,回车
                 [root@MiWiFi-R4A-srv learn]# grub-md5-crypt
                 Password:
                 Retype password:
                 $1$J2JDR$Cu4yk6Yg7ATEmzTDpbVMV0
                  grub-md5-crypt >> grub.conf

==================================================================

进程管理 :

        pstree :查看进程 -- > 进程树

                pstree | less

                -p :查看进程号

         top :

                表格方式查看

                h :help 帮助

                P :按CPU占用排序

                M :按内存占用排序

                shift + < or > :向下翻页或向右翻页

                q :退出

        ps :

                平铺方式查看

                -a :显示控制台进程

                -u :显示带用户名的进程

                -l :显示详细信息

                -x :显示所有进程

                ps -ef | ps -aux 显示所有信息

==================================================================

kill :杀死进程

        kill -l PID :查看发送进程的所有信号

        kill -9 PID :直接杀死进程

        kill PID :终止进程

        kill -19 PID :暂停进程

        kill -18 PID :继续进程

        killall sshd :杀死所有ssha的进程

        skill -9 pts/2 :杀死2号控制台所有的进程

==================================================================

cut :显示文本中的某一段

        格式 :

        cut + option + file 

        -d :指定一个分隔符

        -f :取字段,定义显示的段落序号

        -c :取字符,定义显示的字符区域1-10

        cut -d :-f1 /etc/passwd

        只显示passwd里面的用户名

        cut -c 1-10 /etc/passwd

        显示passwd里面每一行的投哦1-10个字符

sort :排序

        默认从低到高        升序排序         ascii

        -n :数字排序

        -t :指定分隔符

        -k :指定排列的段落序号

        -r :降序排列

        sort -n -t : -k3 /etc/passwd

        用 :把文件每一列分割出来,然后按第三列的UID进行升序排序

uniq :去除文件中的重复行

        -c :统计每一行连续重复的次数

        -u :去掉连续重复的行(不显示连续重复的行)

        -d :只显示连续重复的行

        -i :忽略大小写,并且连续重复的行只显示一次

        11:22:33

        22:33:11

        11:22:33         - > a.txt

        sort -t a.txt | uniq

        统计/etc/passwd 有几种shell

        cut -d : -f7 /etc/passwd | sort | uniq | wc -l

        先提取文件内第七列,然后排序,把连续重复行去掉,统计剩下的行

tr :

        字符替换

        head -n 5 :-f7 /etc/passwd | sort | uniq | wc -l

        把passwd的头五列的小写字符转换 成大写字符

        把passwd的前五行用大写的方式显示出来

        用来做简单加密

        abcdefg

        ^^^^^^^

        efghijk

         [root@MiWiFi-R4A-srv learn]# echo passwd | tr 'abcdefghijklmnopqrstuvwxyz'
         'hijklmnopqrstuvwxyzabcdefg'
 
         whzzdk
 
         [root@MiWiFi-R4A-srv learn]# echo whzzdk | tr 'hijklmnopqrstuvwxyzabcdefg'
         'abcdefghijklmnopqrstuvwxyz'
 
         passwd

==================================================================

shell :

        是一门语言,用作脚本维护

        主要是用来监(侦)听用户输入的指令,接收到指令后就执行相应操作。

        查看系统使用的shell -- > echo $SHELL \

        查看系统支持的shell -- > echo /bin/*sh

        编写shell 语言流程

        1.创建一个脚本

                touch filename.sh

        2.实现shell语言

                #!/bin/bash

        3.指定执行权限 chmod 755 file.sh

        4.执行 ./file.sh(相对路径下)         /learn/myshell/01_hello.sh(绝对路径)

变量 :

        varname=5

        局部变量 :只有当前的bash才能读取这个参数

        全局变量 :目前所在的bash和种子bash能读取

                export varname = 999

                echo $a

                echo ${a}

                echo "$a"

        符号 :

                $ :取值

               ' ' :单引号,会屏蔽特殊字符的特殊意义,当做 普通字符输出

               " " :双引号,不会屏蔽特殊字符

                { } :花括号,不会屏蔽特殊字符

                ` ` :反引号,把内部当做命令执行

                [ ] :方括号,运算符$[$a+$b]   $[a+b]

                        运算符  : +  - * / %

==================================================================

shell的输入输出 

        echo :输出

                -n :不换行

                -e :转义 与  printf 有同样的功能

        echo "hello" --- > echo 默认自带换行

        echo -n "hello" --- > 不带换行

        echo -e "hello\tworld" --- > 把特殊符号的功能体现出来

                \n 换行        \t tab标志         \c 不换行

        printf "hello4\n"        输出语句,默认不带换行,会识别特殊字符

        printf "\033[32mThis id a test !\033[0m\n" 全红色

        printf "\033[31mThis \033[32mis \033[33ma \033[34test!\033[0m\n" 五颜六色

        printf "033[31;42mThis \033[32mis \033[33ma \033[34mtest!\033[0m\n"

                加了底色 --- > \033[31;42m

                        31 -- > 前景色

                        42 -- > 背景色

                前景色 :30 - 37

                背景色  :40 -47

read :输入

        格式 :read [option] [var_name]

        read varname 没有提示,会让用户感觉莫名其妙

        -p :开头输入提示

        -s :关闭回显,不显示输入内容,常用于输入密码

                read -s -p "input paassword:"  varname

        -n n : 指定输入长度n,超出长度的字符不被识别,输入达到设定长度会自动结束,输入回车结束输入

        -t n :输入等待,n秒内没有输入则自动退出,没有输入会返回非零的退出状态(不成功)

外部传参 :

        将参数传递到固定的变量 $1 $2 $3 $4  ... ... $n

        ./xxx.sh 12 23 34 

        传递12到名称为1的变量里面去 -- > $1 === > 12           

        传递23到名称为2的变量里面去 -- > $2 === > 23

        传递34到名称为3的变量里面去 -- > $3 === > 34

        $1 :表示外部传入的第一个参数

        $2 :表示外部传入的第二个参数

        ...

        $# :表示外部传入参数的总数

        #? :表示上一条命令是否正常执行,0表示正常,其他数字表示不正常

        $$ :表示当前程序运行的进程号

                kill -9 PID 杀死进程

                ps -ef 查看进程

                        UID :创建进程的用户名

                        PID :进程号

                        PPID :父进程号

                        C :优先级

                        STIME :进程启动时间

                        TTY :终端,? -- >不受终端影响,pts/1 /2 /3 -- > 进程一来终端运行,终端关闭后进程也会关闭

                        TIME :进程运行总时间

==================================================================

流程控制 :

        if 语句:

        format 1 :

                if [ con ]         条件两边必须要空格

                then 

                        cmd_ok

                fi

        c语言 : > >= < <= == !=

        man test :

                数字比较 :

                        -eq :等于 

                        -ge :大于或等于

                        -gt :大于

                        -le :小于或等于

                        -lt :小于

                         -ne :不等于

                字符串比较 :

                        -n :表示字符串非空

                        -z :表示这是空字符串

                        str1 == str2 :字符串1等于字符串2

                        str1 != str2 :字符串1不等于字符串2

                注释 :

                        行注释 :#echo "hello"

                        块注释 :<< block_name 从此开始注释

                                                echo "hello"

                                                echo "hello"

                                        block_name 结束注释

                逻辑语句 :

                        && :逻辑与(-a)

                                [ con1 ] && [ con2 ] && [ con3 ] && ... && [ conn ]

                                [ [ con1 && con2 && con3 && ... && conn ]]

                                [ con1 -a  con2 -a con3 -a ... -a conn ]

                        || :逻辑或(-o)

                                [ con1 ] || [ con2 ] || [ con3 ] || ... || [ conn ]

                                [[ con1 || con2 || con3 || ... || conn ]]

                                [ con1 -o con2 -o con3 -o ... -o conn ]                                                                               format 2 :普通分支

                        if [ con1 ]

                        then 

                                cmd_ok

                        else 

                                cmd_false 

                        fi

                        判断con1,成立就执行cmd_ok,不成立则执行cmd_falsse.

                format 3 :多分支

                        if [ con1 ]

                        then 

                                cmd_1

                        elif [ con2 ]

                        then

                                cmd_2

                        elif [ con3 ]

                        then

                                cmd_3

                                ...

                        判断con1 是否成立,如果成立则执行cmd1,不成立再判断con2,成立执行cmd_2,不成立再判断con3,成立执行cmd_3,不成立再...

==================================================================

if 

        FILE :

                test  [option] filename

                -e :文件是否存在

                -G :判断当前是否属于文件属组成员         

                -r :判断文件是否有读的权限

                -w :判断文件是否有执行的权限

                -b :判断文件是否是块设备

                -c :判断文件是否是字符设备

                -d :判断文件是否是目录

                -f :判断文件是否是普通文件

        bc :超文本计算器

        quit  :退出

case :选择语句,一般可用于菜单选项的选择

        format :

                case var_name in 

                        val_1

                                cmd1

                                ;;

                        val_2

                                cmd2

                                ;;

                        val_3

                                cmd3

                                ;;

                        .

                        .

                        *)

                                default_cmd

                        esac

                        clear        -- > 清屏

                        ctrl + l         --- > clear

循环结构 :

        每一个循环都是有4个部分组成的

        1.初始化部分

        2.条件部分

        3.自增或自减部分

        4.执行部分,循环体

                1  >  2  >  4  >  3  >  2  >  4  >  3  ...  ...  break

for :

        格式一 : 

        for var_name in val_1 val_2 val_3 ... val_n

        do 

                cmd 

        done

        格式二 :

        for ((  var ;; con ; add )) 

        do 

                cmd 

        done

        格式三 :

        for var_name in `seq 1 1 10`

                seq :序列输出,第一个参数表示起始值

                第二个参数表示步长,也就是自增量

                第三个参数表示结束值

while :

        格式 :

        init

        while [ con ]

        do

                cmd

        done

        判断con是否成立,判定为真就执行cmd,再返回到con判断是否成立,假就结束循环。

死循环 :

        大多数情况下我们要避免死循环,只要在处理一些特定的目的(监控)才会使用死循环,如果要写死循环,就需要加上延时函数。

        sleep1 :延时函数,延时1秒,参数可以自定义

        break :退出循环,如果条件满足,会退出当前整个循环。

        continue :退出循环,如果条件满足,就会退出本次循环。

        for (( i =1; i <= 10; i++ )) 

        do

                if  [ $i -eq 5 ]

                then 

                        break;        到第五次循环 直接退出

                        continue;        跳过了第五次循环

                fi

                echo         "第 $i 次循环"

                done

                echo "hello"

==================================================================

函数 :

        把可以重复使用的代码独立出来,抽象出来,用一个名字将其封装起来,提高编程效率。

        定义 :

                function name() {

                        cmd

                }

                或

                name () {

                        cmd 

                }

        调用 :调用时,在函数名后面输入参数进行传参,传递到函数内部使用

        区分命令行传参 :执行命令时在命令后面输入参数,传递到函数内部使用

                命令行的$1和函数内的$1数据值不共享

随机数 :

        RANDOM

        产生一个随机数,echo        $RANDOM

        $[$RANDOM%101] 随机一个1006以内的数字

        $[$RANDOM%101+100] 随机一个100~200的数字

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值