本文用于更新学习Linux和shell命令的笔记。也许会进一步更新。

Windows与Linux的区别

windows下面有盘符的概念,C盘,D盘,E盘等等。但是在Linux没有盘符的概念。

Linux的目录结构:所有的目录都是从根目录“/”开始,是我们的根目录。

在Linux下查询命令的功能

$ man 命令

用户

  • Linux是多用户的系统,一个用户可以多次(同时)登录一个Linux系统,多个用户也可以(同时)登录一个Linux系统。(与Windows桌面版本不一样)
  • 为了节约空间,操作在保存用户和组信息的时候,只保存两个整型数字,称为用户ID和组ID。用户ID和组ID和用户名和组名是一一对应的

初次登录配置root密码

$ sudo passwd root

注意:为了保证系统的安全性,不允许root用户直接进行登录。(root用户都是有的,就知道账号)

显示所有用户

$ cat /etc/passwd

显示的其中一条如下:

ubuntu:x:500:500:ubuntu,,,:/home/ubuntu:/bin/bash

冒号是分隔符
用户名 密码(x替代) uid(用户id) gid(group id,组id)注释字段 用户的home路径  shell类型
0           root用户
1~1000      系统用户
1000之后    普通用户

添加用户

$ sudo useradd test3  //创建的用户属于三无产品,没有密码,在/home目录下面没有对应的文件夹,shell不一样
$ sudo useradd -m test4 -s /bin/bash  
//-m指定了在/home目录创建对应文件夹,-s指定shell类型
$ sudo passwd test4  //给test4创建密码

切换用户

$ su  //切换到root
$ su usrname  //切换到usrname用户

退出当前用户

$ exit

需要注意的是,当嵌套使用su指令来依次进入多个用户时候,多个用户是使用栈结构来管理的。执行su指令相当于将新用户压入栈顶,执行exit指令相当于弹出栈顶。

当用户在上述的栈结构中存在的时候,那个用户是不能被删除。

删除用户

//-r选项可以删除用户以及用户对应的在/home下的文件夹,如果不加-r,就只会在/etc/passwd下面删除账号,不会删除/home的文件夹
$ sudo userdel test5 -r
userdel: test5 mail spool (/var/mail/test5) not found

文件

Linux下一切皆文件。

文件夹相关

$ mkdir test  //创建test文件夹
$ mkdir -p dir3/dir4/dir5 //创建多级目录可以加上-p,或者可以一级一级的创建
$ rmdir       //删除空目录
$ cd test     //切换工作目录至test
$ pwd         //显示当前的绝对路径
$ cd ..         //切换到上一级目录
$ cd .         //切换到当前目录
$ cd -         //回到上一次的目录
$ ls         //列出目录内容
$ tree         //以树形显示目录内容(需要提前安装tree)

文件的创建

touch (常用)

change file timestamps 改变时间戳1970.1.1 0:0:0

$ touch file    //可以创建空文件
$ date    //用于查看Linux下的时间和日期

echo命令

display a line of text

$ echo "hello,world" > file2  //创建file2文件,并且将“hello,world”存到file2中
$ echo -n > file2  //创建空文件

>  重定向,重新指定方向  

cat命令

$ cat > file3   //使用ctrl + d进行正常退出,ctrl + c异常退出,中断

vi/vim(常用)

文件内容的查看

cat命令

用于查看文件内容,对于小文件好用,当文件内容特别多时,cat起不到应有的作用

head命令

  • 默认输出文档的前10行
  • 可以通过-n+数字输出指定行数

tail命令

  • 输出文档的后10行
  • 可以通过-n+数字输出指定行数

more命令

  • 可以按行查看文件内容
  • 只能向下翻,不能回退

less命令

  • 类似于more,但是可以回退

文件的拷贝、删除、移动

cp命令

copy files and directories

普通文件的拷贝
$ cp srcFile destFile   //cp 源文件 目的文件

//源文件与目的文件都存在时,最好加-i选项,避免误操作(安全性问题)
$ cp -i srcFile destFile
普通文件拷贝给目录
$ cp srcFile dir
//如果dir中有file文件,就会直接覆盖;如果dir中没有file文件,就会创建一个file文件;如果dir中的file与源文件file的内容不一样,最好还是继续加上-i选项。
目录拷贝的目录
$ cp  -r  dir1  dir2  //-r表名是递归拷贝的含义

mv命令

$ mv srcFile destFile
//mv进行移动的时候,源文件会删除。mv也有常用-i和-f选项

rm命令

rm - remove files or directories 删除文件或者目录

删除普通文件
$ rm file    
删除目录文件
$ rm -rf dir   //-f是强制的意思,-r是递归的意思
删除所有的文件(普通文件、目录文件)
$ rm -rf *  //*星号是一个通配符,代表的是所有类型的文件,包括普通文件、目录文件

注意:rm命令在使用的时候,最好加上-i选项,可以有一个提示作用。

ls命令详解

-a选项,可以显示文件夹下面的所有文件,包括隐藏文件。

在Linux线面,所有以‘.’(点)开头的文件都是隐藏文件。

-l选项,可以显示文件夹下的文件的具体信息

-h选项,可以将文件大小进行换算成人可读的

-i选项,可以将文件对应的结点号展示出来

drwxrwxr-x  2 ubuntu ubuntu 4.0K Jan  5 11:35 code/
drwxrwxr-x  8 ubuntu ubuntu 4.0K Nov 14  2020 vimplus-master/

对于以上结果:

第一个字母表示文件类型

字母文件类型
-普通文件
d目录文件
l链接文件(软链接)
b块文件
c字符设备文件
s套接字文件
p管理文件

后面的三组rwx表示权限,rwx的含义如下:

字母含义
r
w
x可执行
-没有权限

三组分别表示:

本用户组用户其他用户

数字对于普通文件为链接数,对于目录文件是第一级子目录数(这里的子目录包括了...

软链接和硬链接

硬链接

ln - make links between files 创建文件链接

$ ln srcFile destFile  //源文件是已经存在的文件,目的文件是新创建的
  • 创建硬链接之后,相当于多创建了一个指向文件的指针

    • 表现为:硬链接文件的节点号相同
    • 修改任何一个文件,所有文件发生改变
    • 删除任何一个文件对其他文件无影响

软链接

$ ln -r srcFile destFile
  • 创建软链接之后,相当于对源文件创建了一个快捷方式

    • 表现为:源文件与目的文件结点号不同
    • 目的文件的大小是源文件的名字(路径名)的大小
    • 删除源文件的时候,软链接失效;删除软链接文件,源文件不受影响

文件权限的变更

文字设定法

$ chmod u=r, g+r, o=x file  //本用户赋予读权限,组用户增加读权限,其他用户赋予写权限

在此处各符号/字母代表的含义如下:

字母/符号含义
u本用户
g组用户
o其他用户
a所有用户
+增加权限
-去掉权限
=赋予权限

数字设定法

rwx rwx r-x
111 111 101
7   7   5
2^2 + 2^1 + 2^0 = 7
r = 4
w = 2
x = 1
- = 0
普通文件的权限就是664  rw-rw-r--

举例:r-x -wx --x 531

文件的查找

find命令

$ find 路径(可以是绝对路径或者相对路径) -name "文件名字"    //按名字查找

文件名字可以使用通配符
* 代表任意多个字符
? 代表任意一个字符
[] 代表一个范围,中括号中可以是数字,也可以是字母,可以数字与字母结合在一起的使用

grep命令

$ grep 选项 模式 文件/路径
$ grep -rn "wangdao" ./      //在当前目录下递归的(-r)查找含有wangdao的文件,返回时显示行号(-n)
$ grep -nE "e" test      //在test文件中正则查找(-E)含有e的内容并返回行号

可以用正则表达式进行字符串匹配。

重定向

普通

重定向输入<,就是stdin

重定向输出 >,就是stdout

重定向的错误输出 2>,就是stderr

追加模式

>>  标准输出的追加,在原有的基础上,继续添加
2>> 标准错误的追加