zoukankan      html  css  js  c++  java
  • Linux命令入门教程

    Linux入门教程

    ls 命令

    • ls -l 显示当前目录下的文件夹及文件的详细信息(drwxr-xr-x d开头的是文件夹,-rwxr-xr-x -开头的是文件)

      ericdai@ericdai-virtual-machine:~$ ls -l
      total 36
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Desktop
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Documents
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Downloads
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Music
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Pictures
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Public
      drwxr-xr-x 3 ericdai ericdai 4096 8月  19 22:53 snap
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Templates
      drwxr-xr-x 2 ericdai ericdai 4096 8月  19 22:51 Videos
      

      4096 是文件或文件夹的大小;8月 19 22:51 文件或文件夹的创建时间。

    • ls 显示当前目录下的文件夹名及文件名(若存在),不显示其它信息。

    clear 命令

    • clear 清空当前终端窗口的内容

    cd 命令

    • cd .. 往前退一个目录路径(进入上层文件目录)

    操作文件夹命令

    • mkdir tutorial/ 在当前目录下创建文件夹 tutorial,/可有可无。

    • rmdir tutorial/ 删除当前目录下的 tutorial 文件,/可有可无。

    • pwd 查看当前文件路径。例如:

      ericdai@ericdai-virtual-machine:~/Desktop$ pwd
      /home/ericdai/Desktop
      

    操作文件命令

    • cp sydney.txt file2.txt 复制 sydney.txt 文件,副本重命名为 file2.txt

    • cat sydney.txt 查看文件 sydney.txt 的内容

    • diff file1.txt file2.txt 对比两个文件内容的差异

      file1.txt 内容:

      aa
      bb
      cc
      
      aa
      dd
      cc
      
      aa
      ee
      ff
      

      file2.txt 内容:

      aa
      
      cc
      
      aa
      bb
      cc
      
      aa
      cc
      gg
      

      命令执行结果:

      ericdai@ericdai-virtual-machine:~/Desktop$ diff file1.txt file2.txt
      2c2
      < bb
      ---
      >
      6c6
      < dd
      ---
      > bb
      10,11c10,11
      < ee
      < ff
      ---
      > cc
      > gg
      

      有差异的行是2、6、10、11

    • head file1.txt -n 5 查看文件 file1.txt 前5行的内容;

      tail file1.txt -n 5 查看文件 file1.txt 最后5行的内容。

    • wc file1.txt 查看文件 file1.txt 单词数(wc是word count的缩写。我们以题号9的file1文件内容为例)

      ericdai@ericdai-virtual-machine:~/Desktop$ wc file1.txt
      11  9 29 file1.txt
      

      11 9 29 表示 file1.txt 一共有11行,9个单词,29个字符。

    • wc -l file1.txt 只统计file1.txt有多少行

      ericdai@ericdai-virtual-machine:~/Desktop$ wc -l file1.txt
      11 file1.txt
      
    • wc -c file1.txt 只统计file1.txt的大小(有多少个字符)

      ericdai@ericdai-virtual-machine:~/Desktop$ wc -c file1.txt
      29 file1.txt
      
    • rm file1.txt 删除文件file1.txt

    • mv file1.txt helloword.txt 将文件file1.txt重命名为helloword.txt;

      mv file1.txt Tutorial/ 将文件file1.txt移动到Tutorial文件夹下(/可加可不加)。

    查看系统时间命令

    • date 查看系统时间

      ericdai@ericdai-virtual-machine:~$ date
      2020年 09月 17日 星期四 11:57:42 CST
      
    • cal 打印本月日历

      ericdai@ericdai-virtual-machine:~$ cal
            九月 2020
      日 一 二 三 四 五 六
             1  2  3  4  5
       6  7  8  9 10 11 12
      13 14 15 16 17 18 19
      20 21 22 23 24 25 26
      27 28 29 30
      
      
    • cal 2020 打印2020年全年日历

    • cal 1 2020 打印2020年1月份日历

    less more 命令

    • less Main.java 当Main.java文件的内容在终端不能全部显示时,可以使用less命令,配合键盘上下左右方向键即可。推出按键盘字母q即可。
    • more Main.java 类似less,可以自己测试。

    chmod 命令

    ericdai@ericdai-virtual-machine:~/Desktop$ ls -l
    total 12
    -rw-r--r-- 1 ericdai ericdai   27 9月  17 10:51 file2.txt
    -rw-r--r-- 1 ericdai ericdai  886 9月  15 16:56 Main.java
    drwxrwxr-x 2 ericdai ericdai 4096 9月  17 12:10 Tutorial
    

    我们看到当前用户ericdai有读Main.java文件的权限。

    类型 user(作者) group(小组) other(其他)
    -表示文件;d表示文件夹 rwx rwx rwx
    • chmod u-r Main.java 去掉当前用户读Main.java文件内容的权限(若有)

      ericdai@ericdai-virtual-machine:~/Desktop$ ls -l
      total 12
      -rw-r--r-- 1 ericdai ericdai   27 9月  17 10:51 file2.txt
      -rw-r--r-- 1 ericdai ericdai  886 9月  15 16:56 Main.java
      drwxrwxr-x 2 ericdai ericdai 4096 9月  17 12:10 Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ chmod u-r Main.java
      ericdai@ericdai-virtual-machine:~/Desktop$ ls -l
      total 12
      -rw-r--r-- 1 ericdai ericdai   27 9月  17 10:51 file2.txt
      --w-r--r-- 1 ericdai ericdai  886 9月  15 16:56 Main.java
      drwxrwxr-x 2 ericdai ericdai 4096 9月  17 12:10 Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ cat Main.java
      cat: Main.java: Permission denied
      

      执行完修改权限命令后,用户再次尝试读取Main.java文件内容,系统提示没有权限。

    • chmod u+r Main.java 可以把读权限加回来。

    • chmod go-r Main.java 除了ericdai用户(作者)外,其他人都没有读Main.java文件的权限。

    • 当然也可用二进制数修改u、g、o的权限。比如:chmod 444 Main.java 等价于把文件Main.java的权限修改为:r--r--r--

    grep 命令

    • grep new Main.java 查看Main.java文件是否包含new这个字符串。如下:

      ericdai@ericdai-virtual-machine:~/Desktop$ grep void Main.java
          public static void main(String[] args) throws IOException {
      ericdai@ericdai-virtual-machine:~/Desktop$ grep new Main.java
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
              File f = new File("/Users/ericdai/Desktop/aa");
          private static int[] a = new int[N];
          private static int[] b = new int[N];
          private static int[][] f = new int[N][N];
      

      注:new字符串会标红高亮显示。

    • grep ^H sydney.txt 找出所有以H开头的字符串。

    • grep ^Ho sydney.txt 找出所有以Ho开头的字符串。还有很多,可以查看正则表达式。

    • grep ^Ho sydney.txt | wc 找出所有以Ho开头的字符串并统计。这里是搭配的 wc ,你也可以使用其它命令,记得用 | 分割即可。

    编写脚本

    一些Linux命令或者其它一些命令,我们把它们写到一起,打包成一个文件,这个文件就是Linux脚本文件。Linux脚本文件以.sh后缀结尾。

    • > < 大于小于号是Linux的重定向符号

    • 实例演示:

      ericdai@ericdai-virtual-machine:~/Desktop$ ls
      file2.txt  Main.java  Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ ls > 1.txt
      ericdai@ericdai-virtual-machine:~/Desktop$ ls
      1.txt  file2.txt  Main.java  Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ cat 1.txt
      1.txt
      file2.txt
      Main.java
      Tutorial
      
    • 创建脚本文件 vim test.sh,写入以下内容:

      ls
      cal
      date
      

      执行脚本命令 sh test.sh

      ericdai@ericdai-virtual-machine:~/Desktop$ ls
      test.sh  Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      test.sh  Tutorial
            九月 2020
      日 一 二 三 四 五 六
             1  2  3  4  5
       6  7  8  9 10 11 12
      13 14 15 16 17 18 19
      20 21 22 23 24 25 26
      27 28 29 30
      
      2020年 09月 17日 星期四 13:02:50 CST
      
    • 打印变量和字符串。test.sh脚本文件中我们写入以下内容:

      a=10
      echo $a
      
      echo "hello world"    $a
      

      注意a=10等于号前后不能有空格;空行不输出,"hello world"$a之间若有超过一个空格,只输出一个空格。字符串"hello world"的双引号可以省略不写,不过为了易读建议加双引号。

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      10
      hello world 10
      
    • 计算。test.sh脚本文件中我们写入以下内容:

      a=10
      b=3
      c=`expr $a + $b`
      echo $c
      d=`expr $a * $b`
      echo $d
      

      注意Linux脚本语言中*号的含义与正则表达式保持一致,若要实现乘法,需要加转义字符。另外想要输出()也需要转义,即()。再次强调,赋值运算符=左右两边一定不能写空格;+等运算符左右两边一定要写空格。

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      13
      30
      
    • 控制语句。

      等于 不等于 大于 大于等于 小于 小于等于
      -eq -ne -gt -ge -lt -le
      equal not equal greater than greater equal less than less equal

      test.sh脚本文件中我们写入以下内容(输出a和b中较大的那个):

      a=10
      b=3
      if [ $a -gt $b ]
      then
      	echo $a
      else
      	echo $b
      fi
      

      注意[ $a -gt $b ]之间一定要有空格。执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      10
      
    • for 循环。test.sh脚本文件中我们写入以下内容:

      #输出数字1~10
      for x in 1 2 3 4 5 6 7 8 9 10
      do
      	echo $x
      done
      

      注意Linux脚本语言中#号后边的内容是注释。

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
    • while 循环。test.sh脚本文件中我们写入以下内容:

      #输出数字1~10
      x=1
      while [ $x -le 10 ]
      do
      	echo $x
      	x=`expr $x + 1`
      done
      

      注意Linux脚本语言中#号后边的内容是注释。

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
    • 前面我们介绍了定义变量。现在我们再来介绍怎么定义字符串。test.sh脚本文件中我们写入以下内容:

      a="hello"
      b="world"
      
      #两个单词独立成行
      echo $a
      echo $b
      
      #两个单词显示在一行
      echo $a $b
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      hello
      world
      hello world
      
    • 与用户进行交互。test.sh脚本文件中我们写入以下内容:

      echo "Please enter a:"
      read a
      
      echo "Please enter b:"
      read b
      
      c=`expr $a + $b`
      echo $a + $b = $c
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      Please enter a:
      3
      Please enter b:
      5
      3 + 5 = 8
      
    • shell脚本语言中,比较两个字符串=!=。test.sh脚本文件中我们写入以下内容:

      password="hello123"
      
      echo "Please enter a password:"
      read userPassword
      
      if [ $password = $userPassword ]
      then
      	echo "密码正确"
      else
      	echo "密码错误"
      fi
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      Please enter a password:
      nicai
      密码错误
      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      Please enter a password:
      hello123
      密码正确
      
    • 字符串拼接和判空。-z 字符串空返回真,否则返回假;-n字符串非空返回真,否则返回假。test.sh脚本文件中我们写入以下内容:

      str1="hello"
      str2="world"
      str3=""
      
      echo "$str1 $str2"	#字符串拼接
      
      if [ -z $str3 ]
      then
      	echo "str3 是空的"
      else
      	echo "str3 不是空的"
      fi
      

      z是zero的缩写;n是not zero的缩写。执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      hello world
      str3 是空的
      
    • 数组。test.sh脚本文件中我们写入以下内容:

      arr=(7 8 9 10)
      echo ${arr[1]}	#打印数组的单个元素
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ sh test.sh
      test.sh: 1: Syntax error: "(" unexpected
      

      报错。sh是最传统的脚本语言处理程序,1979年有过一次升级,如果你的脚本代码中有使用数组,使用bash来运行脚本。

      ericdai@ericdai-virtual-machine:~/Desktop$ bash test.sh
      8
      

      那如何遍历数组元素呢?修改上边的test.sh脚本文件为:

      arr=(7 8 9 10)
      
      for i in ${arr[@]}
      do
      	echo $i
      done
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ bash test.sh
      7
      8
      9
      10
      

      进一步我们来求数组和。修改上边的test.sh脚本文件为:

      arr=(7 8 9 10)
      
      sum=0
      for i in ${arr[@]}
      do
      	sum=`expr $sum + $i`
      done
      
      echo $sum
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ bash test.sh
      34
      

      进一步我们求最大值。修改上边的test.sh脚本文件为:

      arr=(7 8 9 10)
      
      max=${arr[0]}
      for i in ${arr[@]}
      do
      	if [ $i -gt $max ]
      	then
      		max=$i
      	fi
      done
      
      echo $max
      

      执行上边的脚本:

      ericdai@ericdai-virtual-machine:~/Desktop$ bash test.sh
      10
      
    • Linux脚本语句也拆分直接在终端运行。例如:

      ericdai@ericdai-virtual-machine:~/Desktop$ a=10
      ericdai@ericdai-virtual-machine:~/Desktop$ echo $a
      10
      

    Linux中的全局变量

    • USER 记录当前登陆系统的用户的用户名。

      ericdai@ericdai-virtual-machine:~/Desktop$ echo $USER
      ericdai
      
    • HOME 当前用户的主目录。

      ericdai@ericdai-virtual-machine:~/Desktop$ echo $HOME
      /home/ericdai
      ericdai@ericdai-virtual-machine:~/Desktop$ echo ~ #等价写法
      /home/ericdai
      

      进入用户的主目录。方法如下:

      ericdai@ericdai-virtual-machine:~/Desktop$ cd $HOME
      ericdai@ericdai-virtual-machine:~$
      ericdai@ericdai-virtual-machine:~/Desktop$ cd ~ #等价写法
      ericdai@ericdai-virtual-machine:~$
      

    Linux中的环境变量PATH

    ericdai@ericdai-virtual-machine:~/Desktop$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    

    例如我们在Desktop文件夹(/home/ericdai/Desktop)下创建C文件example.c,写入以下内容:

    #include <stdio.h>
    
    int main() {
    	printf("Hello World
    ");
    	return 0;
    }
    

    gcc编译运行:

    ericdai@ericdai-virtual-machine:~/Desktop$ gcc example.c -o example
    ericdai@ericdai-virtual-machine:~/Desktop$ ls
    example  example.c  Tutorial
    ericdai@ericdai-virtual-machine:~/Desktop$ ./example
    Hello World
    

    若我们换到其它路径下,再运行编译好的example程序:

    ericdai@ericdai-virtual-machine:~/Desktop$ cd .. #返回到上级目录
    ericdai@ericdai-virtual-machine:~/Desktop$ example
    bash: example: command not found
    

    因为当前路径是/home/ericdai

    ericdai@ericdai-virtual-machine:~$ pwd
    /home/ericdai
    

    不是example所在目录/home/ericdai/Desktop。那么如果我想在当前路径不是/home/ericdai/Desktop路径情况下的任意路径都能运行example。我们只需要将example所在的路径/home/ericdai/Desktop放到PATH这个变量里面

    ericdai@ericdai-virtual-machine:~/Desktop$ PATH=$PATH:/home/ericdai/Desktop #PATH尾部追加":/home/ericdai/Desktop"
    ericdai@ericdai-virtual-machine:~/Desktop$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ericdai/Desktop
    ericdai@ericdai-virtual-machine:~/Desktop$ cd .. #返回到上级目录
    ericdai@ericdai-virtual-machine:~$ example
    Hello World
    

    多个路径用冒号:分割(windows用分号;)。意思是这些路径下的文件在任意路径下都能运行。注意给PATH赋值不要写成PATH=/home/ericdai/Desktop,这样会覆盖PATH中原有的内容,而是要在尾部追加即可。

    Linux环境变量总结

    压缩和解压

    • zip CProgram.zip *将当前文件夹压缩(首先进入要压缩的文件夹)。例如,我们这里要压缩Tutorial文件夹:

      ericdai@ericdai-virtual-machine:~/Desktop$ ls
      example  example.c  Tutorial
      ericdai@ericdai-virtual-machine:~/Desktop$ cd Tutorial/
      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ ls
      file1.txt #Tutorial文件夹下只有一个文件,没有文件夹
      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ zip CProgram.zip *
        adding: file1.txt (deflated 17%)
      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ ls
      CProgram.zip  file1.txt
      

      另外一种Linux里的压缩格式是tar,有些地方也叫tar.gz。使用tar压缩命令为(功能同上):

      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ ls
      file1.txt
      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ tar -zcvf CProgram.tar.gz ./
      ./
      ./file1.txt
      ./CProgram.tar.gz
      tar: .: file changed as we read it
      ericdai@ericdai-virtual-machine:~/Desktop/Tutorial$ ls
      CProgram.tar.gz  file1.txt
      
      • -z : Compress archive using gzip program(使用gzip压缩算法进行压缩);
      • -c : Create archive(创建目标。解压时替换c为x即可);
      • -v : Verbose i.e display progress while creating archive(显示压缩过程);
      • -f : Archive File name(重命名压缩文件,即可以给压缩文件起一个名字)。
    • zip CProgram.zip -r Tutorial/* 将当前文件夹Tutorial及其子文件夹压缩为CProgram.zip。

    • unzip CProgram.zip 解压CProgram.zip;

      tar -zxvf CProgram.tar.gz 解压CProgram.tar.gz(-x : Extract files)。

    • wget https://xxx/download/file.tar.gz 从网址下载file.tar.gz压缩文件;

      wget https://xxx/download/file.tar.gz -O file2.tar.gz 从网址下载file.tar.gz压缩文件并重命名为file2.tar.gz。大写字母O。

  • 相关阅读:
    vim编辑器入门
    线程概念
    forkJoin
    join()方法跟踪
    mybatis 注解和xml 优缺点
    sql 索引 sql_safe_updates
    spirngcloud文件
    springCloud com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
    创建线程池的四种方式
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/hacker-x/p/13684259.html
Copyright © 2011-2022 走看看