Linux(Ubuntu)常用命令 & vim基本操作

Linux先知:

  Linux历史:

    关于这个我就不再多说了,其实是一个很有意思的故事串,网上找下一大堆。

  类Unix系统目录结构:

    ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面
   unix-tree

  Linux 目录

    • /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录
    • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
    • /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
    • dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
    • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
    • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~edu 表示用户 edu 的家目录。
    • /lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
    • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
    • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
    • /opt:给主机额外安装软件所摆放的目录。
    • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
    • /root:系统管理员root的家目录。
    • /sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
    • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
    • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
    • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
    • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

几个常用命令细讲:

  一个程序猿可能都听说过的笑话。说,一个二流程序猿带着电脑在咖啡馆,看到一个美女,就做到妹子眼睛看的到的地方打开ubuntu terminal,输入, $>tree / ,然后(懂得人肯定明白了,不懂的快去试试)......,新学一招和妹子搭讪的技术。

  linux commands一般都有几部分构成: commands [-options] [parameter1]... ,也就是:命令  选项  参数1...(可能有多个参数,选项也可能有多个)。

  pwd:显示当前路径。

  cd(change directory):改变当前目录。

  ls:显示当前文件夹下未被隐藏的文件或文件夹。

    

复制代码

ls -a                    显示所有文件和文件夹(包括隐藏的)。
ls -l                    以列表的方式显示(列表里有大小,无单位)。
ls -h                    大小自动显示为带有单位的,如3.6K。
ls -a -l -h
ls -h -l -a
ls -alh
ls -lha                  以上四个操效果一样。

复制代码

  

   commands --help/man commands :显示帮助手册。注意:man(Manuel)手册一共有8个。

   mkdir foldername :新建文件夹,后面加的是文件夹名。

   mkdir /A/B/C/D/E -p :自动创建依赖文件夹,若没有B,C,D的话就自动创建。 

 

   touch filename :创建文件。

   rmdir foldername :仅可以删除空文件夹。(rm表示 remove)

   rm -r foldername :可以递归删除文件夹,操作文件夹是被限制可以尝试加,“-r”:表示递归。

   mv filename 目标地址 :(mv:move,实际操作中是剪切的意思),移动文件到目标地址。

   mv filename newfilename :重命名。

   cp filename destAdd :(cp:copy,复制),复制文件到目标地址。

   cp foldername destAdd -r :复制文件夹到目标地址,操作文件夹是被限制可以尝试加,“-r”:表示递归。

   history :显示所有历史命令,并且前有命令标号。用 !number !+ 对应命令的标号,相当于运行该命令。

   cat filename :只能查看不可以编辑文件里面的内容,所以后面一定加的是文件名不是文件夹的名。

   more filename :同样也是查看文件内容,但是前者是一下显示到底,后者是分屏慢慢显示,可控制的慢慢查看。press “q” exit。

   管道符 | 应用: ls -alh /bin | more 这个举例就相当于将 ls 将要显示的先放到 | 管道中,然后在more 调用管道内容。其他命题也可调用。

 

    ln -s 对象名 目标名 :对目标建立软连接,删除对象,则连接失效。

    ln 对象名 目标名 :对目标建立硬连接,删除对象,连接仍有效。

              原理如图。

   grep "xxxx" xxx.txt :grep 查找内容 查找目标,显示所有含有"xxxx"的。

   grep "xxxx" xxx.txt -n :显示查找目标的行数。

   grep "xxxx" xxx.txt -v :显示出,除含有"xxxx"以外的所有目标内容。

   grep "^xxxx" xxx.txt :显示以"xxxx"开头的所有目标内容。

   grep "xxxx$" xxx.txt :显示以"xxxx"结尾的所有目标内容。

  find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。而grep 是在文件内查找。

常用用法:

    find ./ -name test.sh :查找当前目录下所有名为test.sh的文件。

   find ./ -name '*.sh' :查找当前目录下所有后缀为.sh的文件。

   find ./ -name "[A-Z]*" :查找当前目录下所有以大写字母开头的文件。

   find /tmp -size +2M :查找在/tmp 目录下大于2M的文件。

   find ./ -size +4k -size -5M :查找当前目录下大于4k,小于5M的文件。

   find ./ -perm 777 :查找当前目录下权限为 777 的文件或目录。

  通配符:通常通配符有?,*,[]。

       ls 2? :以“2”开头的并且唯一的提示。

       ls *2 : 显示出以“2”开头的所有文件和文件夹。

       ls 1[123456]3.txt :显示出所有113.txt,123.txt......

  重定向:符号">",">>"

       ls -alh > xxx.txt :把即将显示到屏幕的内容保存到xxx.txt(覆盖原有数据)。

       ls -alh >> xxx.txt :把即将显示到屏幕的内容保存到xxx.txt(以追加的方式)。

     

两个小快捷键分享:

  1.  首先进入“ctrl+alt+T”快捷进入终端。

  2.  可能会感觉字太小,按下“ctrl+shift” 再按 “+”放大字体,但是缩小字体是,按下“ctrl”再按“-”。

  3.  "ctrl+C"相当于不执行换行。再命令较长而且输入错误是方便使用。

归档管理:

  打包: tar -cvf xxx.tar 打包对象 (一般来说就是 -cvf 一起用)但这种不压缩的打包通常不用,接下来会说。

    -options:-c    生成档案文件,创建打包文件。

          -v  列出归档解档的详细过程,显示进度。

          -f   指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后。

          -t   列出档案中包含的文件。

          -x   解开档案文件。

  解包: tar -xvf xxx.tar :解包但保留源包。

  到这里要说下怎么记,大眼一看这么多字母其实不用怕,不管是哪种打包方式,记住只要是打包就是 -cvf ,解包是 -xvf,直是对应的压缩方式只要在前面加上对应的选项就OK了

  比如,bz2:-jcvf , -jcvf;gzip:-zcvf ,-zxcf。直是一定要对应起来,意思就是一套压缩规则对应的解压规则,弄混肯定解不开,就是这个道理。

  压缩打包:在这里就只说一种压缩效果最好的gzip,另外还有gz2,zip等,但他们压缩效果不如gz。

  gzip打包: tar -zcvf xxx.tar.gz filesname 

      解包: tar -zxvf xxx.tar.gz 

  看下图效果就知道为什么要压缩包了,tar包在gzip压缩之后这里机会是10倍左右,其实可以更大,文件越大节省空间约多。   

  

  有时需要查看命令地址时怎么办: which [commands] 

查看时间

   cal :显示当前日期。

   cal 2018 :显示全年日历。/ cal -y 显示当年日历。

   date :显示当前时间。

  这几个一般不会用到了解即可。

查看进程信息

   ps :显示当前进程。

    -options:-a--all,-u--details,-r--running。一般来说 ps -aux 。

    

    PID就是改程序的一个标号,或者说是进程号。

   top :动态显示进程。以一个新面板的形式,类似于vim,press “q”-->exit

   kill [pid] :杀死正在运行的程序,kill + 程序对应的pid。

   kill -9 [PID] :强制终止程序,在上条行不通时操作这条。“-9”表示强制。

检测磁盘空间:

   df -h :检测文件系统的磁盘空间占用和空余情况,也就是所有磁盘。“-h”表示选择合适的单位(M/G/K)。

   du :用于统计目录或文件所占磁盘空间的大小,当前目录下或者可以选择目录。

查看或配置网卡信息:

   ifconfig :只敲ifconfig,显示所有网卡的信息。

   ifconfig [网卡名] [new ip add] :修改网卡ip地址。

   ping [ip add]/[域名] :测试网络连通性。

用户,权限管理:

   whoami :显示当前用户。

   who :查看当前所有登录系统的用户信息。

   exit :如果是图形界面,退出当前终端;

      如果是使用ssh远程登录,退出登陆账户;

      如果是切换后的登陆用户,退出则返回上一个登陆账号。  

   useradd [username] -m :创建新用户,“-m”自动在/home文件夹下生成[username]的家目录。

   cat /etc/passwd :验证用户是否创建成功,标志:最后一行显示new user的信息即为创建成功。

  

   passwd [username] :create password for this user.

   passwd [uesrname] :change password for this user.

   userdel [username] :delete user.

   userdel -r [username] :delete user and relative folder together.

   ssh [username]@[ipadd] :远程登录到linux系统。windows上cmd没有,要想连接需要下载xshell。

   su [username] :切换到该用户,但不切换路径。  

   su - [username]:切换到该用户,并且切换到该用户的家文件夹。

   su -s :直接切换到超级管理员权限,不需要知道username。

   groupadd/groupdel :create or delete group.

权限修改:

  先知:

u user 表示该文件的所有者
g group 表示与该文件的所有者属于同一组( group )者,即用户组
o other 表示其他以外的人
a all 表示这三者皆是
r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

  

  首字母表示(-,文件;d,文件夹;l,链接;...)后面接着9个位置,每三个为一组,第一组是owner的权限,第二组是group的权限,第三组是others的权限。

子母法:

  

   chmod [u/g/o]=[r/w/x/ ] filename :可以一次改多个,权限选择为空时,即对应对象对该文件的操作权利为空。这种方法较为麻烦。

数字法:

字母 说明
r 读取权限,数字代号为 "4"
w 写入权限,数字代号为 "2"
x 执行权限,数字代号为 "1"
- 不具任何权限,数字代号为 "0"

  

  

  

  r,w,x,-,对应的权限值,4,2,1,0 每次只能选择3个不重复的组合,比如“7”就是r,w,x所有权限。4 就是只有读的权利。

  三个对象的权限就对应的三位数的每一位,百位就是 u 对应的,十位就是 g 对应,各位就是 w 的权限。

关于用户创建可以参照链接(点此处

vi/vim常用命令

  vim其实就是vi的升级版,vi里的所有命令vim里都可以用,一般使用来说几乎没什么差别。

  注:本篇文章区分大小写!

  

vi / vim三级模式的关系: 

  命令行模式

  任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

  编辑/插入/文本编辑模式

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。

  末行模式

  末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。

  

  ①:从命令模式进入到末行模式一般就是准备保存/不保存退出,输入“:”自动跳到终端此页的末尾。如图

    

  ②:从末行模式到命令模式,“Esc”。

  ③:命令模式到编辑模式可以有多种,通常 press “ i ”。

  ④:编辑模式到命令模式,“Esc”。

vi / vim命令:

   vi [filename] :打开文件,若文件不存在则新建文件并打开。

  插入内容:

    i: 插入光标前一个字符

    I: 插入行首

    a: 插入光标后一个字符

    A: 插入行未

    o: 向下新开一行,插入行首

    O: 向上新开一行,插入行首

  移动光标:

     h: 左移

    j: 下移 

    k: 上移 

    l: 右移

    M: 光标移动到屏幕中间行 

    L: 光标移动到屏幕最后一行行首 

    G: 移动到指定行,行号 -G

    w: 向后一次移动一个字 

    b: 向前一次移动一个字

    {: 按段移动,上移 

    }: 按段移动,下移

    Ctrl+d: 向下翻半屏 

    Ctrl+u: 向上翻半屏
  
    Ctrl+f: 向下翻一屏 

    Ctrl+b: 向上翻一屏

    gg: 光标移动文件开头 

    G: 光标移动到文件末尾

  删除命令:

    x: 删除光标后一个字符,相当于 Del 

    X: 删除光标前一个字符,相当于 Backspace

    dd: 删除光标所在行,n dd 删除指定的行数 

    D: 删除光标后本行所有内容,包含光标所在字符 

    d0: 删除光标前本行所有内容,不包含光标所在字符

    dw: 删除光标开始位置的字,包含光标所在字符

  撤销命令:

    u: 一步一步撤销 

    Ctrl+r: 反撤销

  重复命令:

    .: 重复上一次操作的命令

 

  文本行移动:

    >>: 文本行右移 
  
   <<: 文本行左移    


 复制粘贴:
    yy: 复制当前行,n yy 复制 n 行 

    p: 在光标所在位置向下新开辟一行,粘贴

  可视模式:

    v: 按字符移动,选中文本 
  
   V: 按行移动,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动

  替换操作:

    r: 替换当前字符 

    R: 替换当前行光标后的字符

  查找命令:

    /: str查找
    n: 下一个
    N:上一个

 VI/VIM行号显示:

   需要时启用:

    在vim命令行模式下输入  :set nu  取消显示:在vim命令行模式下输入:  set nonu

      永久自动显示:

          终端:vim   ~/.vimrc  打开后是一个空文件,添加 set nu,保存退出,重新启动vi/vim。

  替换命令(并不常用):

    把abc全部替换成123:     末行模式下,将当前文件中的所有abc替换成123  :%s/abc/123/g

    末行模式下,将第一行至第10行之间的abc替换成123    :1, 10s/abc/123/g

vi / vim的区别:

https://www.cnblogs.com/KiraEXA/p/5994078.html

作者:SmileHang

出处:https://www.cnblogs.com/SmileHang/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/Comet-Fei/p/11885220.html