在旧电脑上安装了 Ubuntu ,把 Windows 和其他文件一整个扬了的那种,有一种毁天灭地的美。

文件系统

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

Linux 的目录结构:所有的目录都是从根目录/开始。

60-1.png

cd、pwd、cat

查看命令的方式,可以使用 man 命令

pwd命令:print name of current/working directory, 打印当前目录的名字。

.代表当前目录,..代表上一级目录。

回到上一次的目录 cd -

cat命令:concatenate files and print on the standard output, 查看文件内容。
对于读小文件而言,是没有问题的,但是当文件的内容非常多的时候,cat起不到应有的作用。

useradd、userdel

useradd命令:create a new user or update default new user information, 添加用户的命令

1
2
3
4
5
6
7
8
9
10
11
sudo useradd test3  //创建的用户属于三无产品,没有密码,在/home目录下面没有对应的文件夹,shell不一样

sudo useradd -m test4 -s /bin/bash //-m指定了在/home目录创建对应文件夹 -s指定shell类型

//给test4创建密码
sudo passwd test4

//账号切换的命令
su test4 #su + 账号名字

用户切换的时候,展现出来的就是一个栈结构,先进后出。

60-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
wangdao@wangdao:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
.....
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
wangdao:x:1000:1000:wangdao,,,:/home/wangdao:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
mysql:x:123:127:MySQL Server,,,:/nonexistent:/bin/false
test:x:1001:1001::/home/test:/bin/bash
test2:x:1002:1002::/home/test2:/bin/sh
test3:x:1003:1003::/home/test3:/bin/sh


wangdao:x:1000:1000:wangdao,,,:/home/wangdao:/bin/bash
test3:x:1003:1003::/home/test3:/bin/sh

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

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

userdel命令:delete a user account and related files, 删除用户以及用户所对应的文件

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

目录的创建与删除、tree

mkdir命令:make directories, 创建文件夹

1
2
mkdir 20221230   //创建目录
mkdir -p dir3/dir4/dir5 //创建多级目录可以加上-p,或者可以一级一级的创建

rmdir命令:remove empty directories, 删除空目录

1
2
3
//如果目录不是空的,可以先进到内层目录,然后一级一级空目录的进行删除
rmdir dir1 //是空目录就可以直接删除
rmdir dir1 //如果dir1里面还有目录就需要先进去,在一级一级删除

tree命令:打印目录的结构(安装与使用):

60-3.png

文件的创建

文件的创建命令:touchechocatvi/vim

touch:change file timestamps 改变时间戳(1970.1.1 0:0:0) :

1
touch file   //可以创建空文件

echo: display a line of text 回音命令

60-4

创建空文件:

60-5.png

cat:使用 ctrl+d 进行正常退出,ctrl+c 异常退出(中断)。

60-6

vi/vim

1
vim file4  //执行以下步骤,键盘左上角Esc,再按shift + :,再输入wq,再按enter

文件内容的查看

catheadtailmoreless

  • head - output the first part of files 查看文件的前面一部分内容
  • tail - output the last part of files 查看文件的尾部内容
  • more - file perusal filter for crt viewing 查看文件里面的内容,可以一行行的查阅。
  • less - opposite of more

文件的拷贝、移动、删除

cp - copy files and directories 拷贝文件或者文件夹(目录)

普通文件的拷贝:

1
2
3
4
5
6
cp  srcFile  destFile  //cp  源文件   目的文件
cp file1 file2

//源文件与目的文件都存在的时候,最好加上-i选项,
//可以进行提示,以免误操作(安全性的问题)
cp -i file1 file2

普通文件拷贝给目录文件:

1
2
3
4
5
cp  file  dir

如果dir中有file文件,就会直接覆盖;
如果dir中没有file文件,就会创建一个file文件;
如果dir中的file与源文件file的内容不一样,最好还是继续加上-i选项。

目录拷贝给目录:

1
cp  -r  dir1  dir2  // -r 表明这个拷贝过程是递归的

mv - move (rename) files

可以移动普通文件,也可以移动目录文件。
“文件”是泛指。在 Linux 中,一切皆文件。

1
2
3
mv  源文件  目的文件   
// mv进行移动的时候,源文件会被删除
// mv也有常用的 -i -f 选项

rm - remove files or directories

删除普通文件:

1
rm  file

删除目录文件:

1
2
rm  -fr dir
//-f 是强制的意思,-r 是递归的意思

删除所有的文件(普通文件、目录文件):

1
2
rm -fr  *
//*星号是一个通配符,代表的是所有类型的文件,包括普通文件、目录文件

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

ls

-a选项,显示文件夹下面的所有文件,包括隐藏文件。在 Linux 中,以.开头的文件是隐藏文件。

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

-h选项,将文件大小换算成人类可读的。

60-7.png

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
drwxrwxr-x 3 wangdao wangdao 4.0K 12月 31 10:58 .
drwxrwxr-x 4 wangdao wangdao 4.0K 12月 30 21:13 ..
drwxrwxr-x 2 wangdao wangdao 4.0K 12月 31 10:54 dir1
-rw-rw-r-- 1 wangdao wangdao 12 12月 31 09:00 file
-rw-rw-r-- 1 wangdao wangdao 12 12月 31 11:05 file2
-rw-rw-r-- 1 wangdao wangdao 0 12月 31 10:58 .file3
-rw-rw-r-- 1 wangdao wangdao 4.2M 12月 30 21:17 The_Holy_Bible.txt

/*----------------------
d rwx rwx r-x
- rw- rw- r--
第一列代表的是文件类型 d目录文件 -普通文件 等等
r 读
w 写
x 可执行
本用户 组用户 其他用户
-----------------------*/

硬链接与软链接

ln - make links between files

硬链接的创建:

1
2
ln  源文件   目的文件
//源文件是已经存在的文件,目的文件是新创建的

60-8

创建硬链接之后,相当于多创建了一个指向文件的指针。硬链接文件的 inode 号是一样的。修改任何一个文件,都会导致文件的内容发生改变。

软链接的创建:

1
ln -s  源文件  目的文件

创建软链接之后,相当于对源文件创建了一个快捷方式,源文件与目的文件 inode 号不一样。删除源文件则快捷方式会失效,但删除软链接文件,源文件不受影响。

chmod、umask

chmod - change file mode bits 改变文件的访问权限

60-9.png

文字设定法:

1
2
3
4
u代表本用户   g代表组用户  o代表其他用户  a代表所有用户
权限:r读权限 w写权限 x执行权限 -代表没有权限
权限的增删 +代表增加权限 -代表去掉权限 =代表赋予某种权限
chmod u=r,g+r,o=x file7

例子:

60-10

数字设定法:

1
2
3
4
5
6
7
8
9
10
// 以下为注释
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--

用法示例:

1
2
3
4
5
6
7
8
9
10
11
12
[asdf@www.masswerk.at:2]$ pwd
/home/asdf
[asdf@www.masswerk.at:2]$ echo "hello" > file1
[asdf@www.masswerk.at:2]$ ls
file1
[asdf@www.masswerk.at:2]$ cat file1
hello
[asdf@www.masswerk.at:2]$ ll file1
-rw-r----- 1 asdf users 5 2024/01/05 23:12:07 file1
[asdf@www.masswerk.at:2]$ chmod 775 file1
[asdf@www.masswerk.at:2]$ ll file1
-rwxrwxr-x 1 asdf users 5 2024/01/05 23:12:07 file1

以下关于 umask 的内容转载自 https://www.coorw.com/3210.html

在 linux 系统中,我们创建一个新的文件或者目录的时候,这些新的文件或目录都会有默认的访问权限,umask命令与文件和目录的默认访问权限有关。

umask为 Shell 内建命令,用于设置创建文件时的权限掩码。权限掩码由 3 个八进制数字组成,将 777(八进制)减掉权限掩码后,即可得到新建文件的默认权限。

命令格式:

1
umask [-p] [-S] [MODE]

后不跟任何选项与参数单独执行 umask,则以八进制格式显示当前权限掩码。

选项说明:

1
2
3
4
5
6
-p [MODE]
// 以八进制数字形式显示或设置权限掩码。
// 当 MODE 没有提供时,显示当前权限掩码,为默认选项

-S [MODE]
// 以字符形式显示或设置新建文件的默认权限。

注意:出于安全的考虑,文件的执行权限不能通过权限掩码来设置,必须手工修改。

常用示例:

1
2
3
4
5
6
7
8
// 设置权限掩码并查看

#设置权限掩码
umask 044

#查看权限掩码
umask
044
1
2
3
4
// 以字符形式显示新建文件的默认权限

umask -S
u=rwx,g=rx,o=rx

find

find命令:查找文件。

60-11.png

按照名字进行查找:

1
2
3
4
5
6
find  路径(绝对路径或相对路径) -name  "文件名字"

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

60-12

重定向

重定向输入<,就是 stdin
重定向输出>1>,就是 stdout
重定向的错误输出2>,就是 stderr

60-13.png

linux 一切皆文件
文件句柄(门把手)
文件描述符 fd
可以将文件描述符看成是操作文件的指针

60-14

追加模式:

1
2
3
4
>>
标准输出的追加,在原有基础上继续追加。
示例:
echo "Fischl" >> file1
1
2
2>>
标准错误的追加

例外:

60-15.png

grep、正则表达式

例子:

1
2
3
4
5
6
7
8
9
wanko@wanko:~$ cat file1
spider223man
batman
wanko@wanko:~$ cat file2
super223man
spider223man
wanko@wanko:~$ grep -rn "spider223man" .
./file2:2:spider223man
./file1:1:spider223man

-r递归;-n显示行号。

正则表达式:

60-16.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wanko@wanko:~$ cat filetst
grep
Grep
sleep
how
what
how are you

wanko@wanko:~$ grep -nE "e" filetst
1:grep
2:Grep
3:sleep
6:how are you

wanko@wanko:~$ grep -nE "ee" filetst
3:sleep
1
2
3
4
5
6
7
8
9
10
11
12
13
wanko@wanko:~$ grep -nE "e*" filetst
1:grep
2:Grep
3:sleep
4:how
5:what
6:how are you

wanko@wanko:~$ grep -nE "ee*" filetst
1:grep
2:Grep
3:sleep
6:how are you
1
2
3
4
wanko@wanko:~$ grep -nE "^s" filetst
3:sleep
wanko@wanko:~$ grep -nE "t$" filetst
5:what

60-17

vim 的使用

参考: https://oi-wiki.org/tools/editor/vim/

插入模式 (insert)

从普通模式进到编辑模式:

  • 小写i,光标前插入
  • 小写a,光标后插入
  • 大写I,行首插入
  • 大写A,行尾插入
  • 小写o,下一行插入
  • 大写O,上一行插入

普通模式 (normal)

u是撤销的快捷键,作用是撤销上一次对文本的更改。

x用于删除光标后的一个字符。

dd删除一行。

gg跳转到文本首行。

G跳转到文本尾行。

$移动到行尾,^移动到行首。

yy+pyy复制光标当前所在行,p将内容粘贴到光标的下一行去。

6+G,跳转到第 6 行。

3+j,向下移动 3 行。

ndG:(n是数字)删除第n行到当前行的内容,左闭右闭。

命令行模式

/待查单词n下一个,N上一个。

set nu:显示行号。

s/待查找项/替换项:默认单行第一个匹配项。

s/待查找项/替换项/g:替换一行里所有的匹配项。

num1,num2s/待查找项/替换项/g:将num1到num2(包含)行的匹配项进行替换。

  • 例子:2,4s/and/kkk/g

%s/待查找项/替换项/g:全文替换。

可视模式 (visual)

v进入可视模式,多用于选中区域。按 V进入行可视模式,用于选中行。

Ctrl+vCtrl+q进入块可视模式 (visual block)。

进入块可视模式后,按IA进入插入模式(相当于 i 和 a),退出插入模式后对本行所做的改动将被应用到选中的每一行同一位置。常用于批量添加注释。

安装 vimplus

没什么好说的: https://github.com/chxuan/vimplus

字体下载链接: https://www.nerdfonts.com/font-downloads

感觉不咋地,最后还是卸了。