Linux 对比 Windows
• 稳定且有效率;
• 免费(或少许费用);
• 漏洞少且快速修补;
• 多任务多用户;
• 更加安全的用户与文件权限策略;
• 适合小内核程序的嵌入系统;
• 相对不耗资源。
区分"根目录" 和 "家目
1.~ 代表是home目录,也就是家目录, / 代表的是根目录
2.用户登录后在 家目录 ,可用pwd命令查看,普通用户为 /home/用户名,root用户为/root
3.根目录是在最顶端的目录(因为已经不能cd …到上一级目录了 )
4.普通用户:一般来说,普通用户没有权限在根目录中进行写操作。他们只能在自己的主目录(如 /home/username
)或其他具有写权限的目录中创建和修改文件。
超级用户(root):超级用户具有对系统的完全控制权限,可以在根目录及其所有子目录中进行读写操作。使用 sudo
命令,普通用户也可以临时获得超级用户的权限来执行特定的命令。
5./home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
命令
• 命令行提示符
进入命令行环境以后,用户会看到 Shell 的提示符。提示符往往是一串前缀,最后以 一个美元符号 $ 结尾,用户可以在这个符号后面输入各种命令。
执行一个简单的命令 pwd :
[root@iZm5e8dsxce9ufaic7hi3uZ ~]# pwd
/root
命令解析:
root:表示用户名;
iZm5e8dsxce9ufaic7hi3uZ:表示主机名;
~:表示目前所在目录为家目录,其中 root 用户的家目录是 /root 普通用户的家目录在 /home
下;
#:指示你所具有的权限( root 用户为 # ,普通用户为 $ )。
whoami
查看当前用户名
hostname
查看当前主机名
快捷方式
Ctrl+U
Ctrl+K
通过上下方向键 ↑ ↓ 来调取过往执行过的 Linux 命令;
命令或参数仅需输入前几位就可以用 Tab 键补全;
Ctrl + R :用于查找使用过的命令(history 命令用于列出之前使用过的所有命令,然后输入 ! 命令加上编号( !2 )就可以直接执行该历史命令);
Ctrl + L:清除屏幕并将当前行移到页面顶部;
Ctrl + C:中止当前正在执行的命令;
Ctrl + U:从光标位置剪切到行首;
Ctrl + K:从光标位置剪切到行尾;
Ctrl + W:剪切光标左侧的一个单词;
Ctrl + Y:粘贴 Ctrl + U | K | Y 剪切的命令;
Ctrl + A:光标跳到命令行的开头;
Ctrl + E:光标跳到命令行的结尾;
Ctrl + D:关闭 Shell 会话;
文件和目录
文件的组织
pwd
查看路径
which
查看命令的可执行文件所在路径\
Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which 命令本身对应的程序也存在Linux 中。
总的来说一个命令就是一个可执行程序。
ej:
浏览和切换目录
ls
列出文件和目录,它是 Linux 最常用的命令之一。
ls -i
ls -t
【常用参数】
-a 显示所有文件和目录包括隐藏的
-l 显示详细列表
-h 适合人类阅读的
-t 按文件最近一次修改时间排序
-i 显示文件的 inode ( inode 是文件内容的标识)
cd
cd …
cd
cd / --> 跳转到根目录
cd ~ --> 跳转到家目录
cd .. --> 跳转到上级目录
cd ./home --> 跳转到当前目录的home目录下
cd /home/lion --> 跳转到根目录下的home目录下的lion目录
cd --> 不添加任何参数,也是回到家目录
du
du [目录/文件] #单位默认是 Kb
列举目录或文件大小信息。
【常用参数】
-h 适合人类阅读的;
-a 同时列举出目录下文件的大小信息;
-s 只显示总计大小,不显示具体信息。
浏览和创建文件
cat
一次性显示文件所有内容,更适合查看小的文件。
cat cloud-init.log
【常用参数】
-n 显示行号。
创建,写入,追加
创建 touch
写入 >
覆盖现有文件,如果目录中不存在上述名称的文件,则创建一个文件
sort 1.txt > 2.txt #排序1.txt并写入到2.txt中
追加 >>
追加现有文件,如果目录中不存在上述名称的文件,则创建一个文件
与 > 用法一致
less
分页显示文件内容,更适合查看大的文件。
less cloud-init.log
y : 后退一行;
= : 显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的 详细信息;
q : 停止读取文件,中止 less 命令;
【快捷操作】
空格键:前进一页(一个屏幕);
b 键:后退一页;
回车键:前进一行;
y 键:后退一行;
上下键:回退或前进一行;
d 键:前进半页;
u 键:后退半页;
q 键:停止读取文件,中止 less 命令;
= 键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;
h 键:显示帮助文档;
/ 键:进入搜索模式后,按 n 键跳到一个符合项目,按 N 键跳到上一个符合项目,同时也可以输入正则表达式匹配。
head
显示文件的开头几行(默认是10行)
head cloud-init.log
【参数】
-n 指定行数 head cloud-init.log -n 2
tail
显示文件的结尾几行(默认是10行)
tail cloud-init.log
【参数】
-n 指定行数 tail cloud-init.log -n 2
-f 会每过1秒检查下文件是否有更新内容,也可以用 -s 参数指定间隔时间 tail -f -s 4 xxx.log
touch
创建一个文件
touch new_file
mkdir
创建一个目录
mkdir new_folder
mkdir -p one/two/three //递归的常见目录结构
ej:mkdir -p 1/2/3
文件的复制和移动
cp
拷贝文件和目录
cp file file_copy --> file 是目标文件,file_copy 是拷贝出来的文件
cp file one --> 把 file 文件拷贝到 one 目录下,并且文件名依然为 file
cp file one/file_copy --> 把 file 文件拷贝到 one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所有 txt 文件拷贝到 folder 目录下
• -递归的拷贝,拷贝整个目录
mv
移动(重命名)文件或目录,与cp的用法相同
mv file one --> 将 file 文件移动到 one 目录下
mv new_folder one --> 将 new_folder 文件夹移动到one目录下
mv *.txt folder --> 把当前目录下所有 txt 文件移动到 folder 目录下
mv file new_file --> file 文件重命名为 new_file
rm
删除文件和目录,由于 Linux 下没有回收站,一旦删除非常难恢复,因此需要谨慎操作
rm new_file --> 删除 new_file 文件
rm f1 f2 f3 --> 同时删除 f1 f2 f3
• -i 向用户确认是否删除;
• -f 文件强制删除;
• -r 递归删除文件夹,著名的删除操作 rm -rf
rm +文件名
rm -r 文件夹
rm -rf 文件夹(f为root权限下强制删除)
rm -rf *(紧急状态下,使用通配符全删除)
ej:rm -rf *.txt
ej:rm -rf *.log(紧急删除日志)
用户权限
用户
Linux 是一个多用户的操作系统。在 Linux 中,理论上来说,我们可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个用户,名叫 root ,是一个很特殊的用户,它是超级用户,拥有最高权限。
自己创建的用户是有限权限的用户,这样大大提高了 Linux 系统的安全性,有效防止误操作或是病毒攻击,但是我们执行的某些命令需要更高权限时可以使用 sudo 命令。
sudo
以 root 身份运行命令
sudo ls/date --> 当然查看日期是不需要sudo的这里只是演示,sudo 完之后一般还需要输入用户密码的
$—>普通用户,只能查看文件,无法创建和sudo
useradd+passwd
useradd 添加新用户
passwd 修改用户密码
这两个命令需要 root 用户权限
useradd laowine --> 添加一个laowine用户,添加完之后在 /home 路径下可以查看
passwd laowine --> 修改laowine用户的密码
userdel
删除用户,需要 root 用户权限
userdel laowine --> 只会删除用户名,不会从/home中删除对应文件夹
userdel laowine -r --> 会同时删除/home下的对应文件夹
su
切换用户,需要root权限
sudo su --> 切换为root用户(exit 命令或 CTRL + D 快捷键都可以使普通用户切换为 root 用户)
su laowine --> 切换为普通用户
su - --> 切换为root用户
su 普通用户
群组的管理
Linux 中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。
groupadd
创建群组,用法和 useradd 类似。
groupadd friends
groupdel
删除一个已存在的群组
groupdel foo --> 删除foo群组
groups
查看用户所在群组
groups laowine --> 查看 laowine 用户所在的群组
charp
用于修改文件的群组。
chgrp laowine file.txt --> file.txt文件的群组修改为laowine
chown
改变文件的所有者,需要 root 身份才能运行。
chown laowine file.txt --> 把其它用户创建的file.txt转让给laowine用户
chown lion:laowine file.txt --> 把file.txt的用户改为lion,群组改为laowine
【常用参数】
-R 递归设置子目录和子文件, chown -R laowine:laowine /home/frank 把 frank 文件夹的用户和群组都改为 laowine 。
文件权限管理
chomd
修改访问权限。
chmod 740 file.txt
【常用参数】
-R 可以递归地修改文件访问权限,例如 chmod -R 777 /home/lion
修改权限的确简单,但是理解其深层次的意义才是更加重要的。下面我们来系统的学习 Linux 的文件权限。
[root@lion ~]# ls -l
drwxr-xr-x 5 root root 4096 Apr 13 2020 climb
lrwxrwxrwx 1 root root 7 Jan 14 06:41 hello2.c -> hello.c
-rw-r--r-- 1 root root 149 Jan 13 06:14 hello.c
其中 drwxr-xr-x 表示文件或目录的权限。让我们一起来解读它具体代表什么?
• d :表示目录,就是说这是一个目录,普通文件是 - ,链接是 l 。
• r : read 表示文件可读。
• w : write 表示文件可写,一般有写的权限,就有删除的权限。
• x : execute 表示文件可执行。
• - :表示没有相应权限。
数字分配权限
数字分配权限
r 4
w 2
x 1
因此要改变权限,只要做一些简单的加法就行:
chmod 640 hello.c
# 分析
6 = 4 + 2 + 0 表示所有者具有 rw 权限
4 = 4 + 0 + 0 表示群组用户具有 r 权限
0 = 0 + 0 + 0 表示其它用户没有权限
对应文字权限为:-rw-r-----
用字母来分配权限
• u : user 的缩写,用户的意思,表示所有者。
• g : group 的缩写,群组的意思,表示群组用户。
• o : other 的缩写,其它的意思,表示其它用户。
• a : all 的缩写,所有的意思,表示所有用户。
• + :加号,表示添加权限。
• - :减号,表示去除权限。
• = :等于号,表示分配权限。
chmod u+rx file --> 文件file的所有者增加读和运行的权限
chmod g+r file --> 文件file的群组用户增加读的权限
chmod o-r file --> 文件file的其它用户移除读的权限
chmod g+r o-r file --> 文件file的群组用户增加读的权限,其它用户移除读的权限
chmod go-r file --> 文件file的群组和其他用户移除读的权限
chmod +x file --> 文件file的所有用户增加运行的权限
chmod u=rwx,g=r,o=- file --> 文件file的所有者分配读写和执行的权限,群组其它用户分配读的权限,其他
查找文件
locate
搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。
• 安装 locate
yum -y install mlocate --> 安装包
apt install mlocate
updatedb --> 更新数据库
locate file.txt
locate fil*.txt
[注意] locate 命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行 updatedb 命令去更新数据库。
在此处我没下载locate, 下载的是plocate
find
用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续 操作,功能非常强大。
find <何处> <何物> <做什么>
• 何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
• 何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以
根据其最近访问时间来查找。
• 做什么:找到文件后,可以进行后续处理,如果不指定这个参数, find 命令只会显
示找到的文件。
• 根据文件名查找
find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find / -name "syslog" --> 整个硬盘下查找syslog
find /var/log -name "syslog" --> 在指定的目录/var/log下查找syslog文件
find /var/log -name "syslog*" --> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*" --> 查找包含syslog的文件
[注意] find 命令只会查找完全符合 “何物” 字符串的文件,而 locate 会查找所有包含关键字的文 件。
• 根据文件大小查找
find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k --> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G --> /var 目录下查找文件大小查过 1G 的文件
find /var -size 1M --> /var 目录下查找文件大小等于 1M 的文件
• 根据文件最近访问时间查找
find -name "*.txt" -atime -7 --> 近 7天内访问过的.txt结尾的文件
• 仅查找目录或文件
find . -name "file" -type f --> 只查找当前目录下的file文件
find . -name "file" -type d --> 只查找当前目录下的file目录
.表示当前目录下找
sort
对文件的行进行排序。
sort name.txt # 对name.txt文件进行排序
常用参数
• -o 将排序后的文件写入新文件, sort -o name_sorted.txt name.txt ;
• -r 倒序排序, sort -r name.txt ;
• -R 随机排序, sort -R name.txt ;
• -n 对数字进行排序,默认是把数字识别成字符串的,因此 138 会排在 25 前面,如果
添加了 -n 数字排序的话,则 25 会在 138 前面。
sort(对文件内容进行排序)
sort -r 1.txt
默认是字符串排序(ej:10只比较首字母)
进行排序前对比
wc
word count 的缩写,用于文件的统计。它可以统wc计单词数目、行数、字符数,字节数等。
wc name.txt # 统计name.txt
• 实例用法
[root@lion ~]# wc name.txt
13 13 91 name.txt
第一个13,表示行数;
第二个13,表示单词数;
第三个91,表示字节数。
• 常用参数
• -l 只统计行数, wc -l name.txt ;
• -w 只统计单词数, wc -w name.txt ;
• -c 只统计字节数, wc -c name.txt ;
• -m 只统计字符数, wc -m name.txt 。
wc 1.txt
行数 单词数(空格和换行分隔) 字节数
wc -w 1.txt
uniq
删除文件中的重复内容。
uniq name.txt # 去除name.txt重复的行数,并打印到屏幕上
uniq name.txt uniq_name.txt # 把去除重复后的文件保存为 uniq_name.txt
【注意】它只能去除连续重复的行数
常用参数
-c 统计重复行数, uniq -c name.txt ;
-d 只显示重复的行数, uniq -d name.txt 。
uniq(清除连续重复行,文件本身不变)
uniq -d 1.txt
shell命令
shell命令自行查找Gpt
管道|
把两个命令连起来使用,一个命令的输出作为另外一个命令的输入,英文是 pipeline ,可以想象 一个个水管连接起来,管道算是重定向流的一种。
cut -d , -f 1 name.csv | sort > sorted_name.txt
# 第一步获取到的 name 列表,通过管道符再进行排序,最后输出到sorted_name.txt
du | sort -nr | head
# du 表示列举目录大小信息
# sort 进行排序,-n 表示按数字排序,-r 表示倒序
# head 前10行文件
vim
vim 文件名
i–插入
home–行首 end–行尾
esc :wq --保存退出
esc :q! --不保存退出
vim的交互模式的删除可以撤销
打开 Vim
在终端命令行中输入 vim 回车后 Vim 就会被运行起来,也可以用 Vim 来打开一个文件,只需要 在 vim 后面再加文件名。如 vim file.name ,如果文件不存在,那么会被创建
插入
进入文件之后,此时处于交互模式,可以通过输入 i 进入插入模式。
移动
在 Vim 的交互模式下,我们可以在文本中移动光标。
h 向左移动一个字符
j 向下移动一个字符
k 向上移动一个字符
i 向右移动一个字符
当然也可以使用四个方向键进行移动,效果是一样的。
跳至行首和行末
行首:在交互模式下,为了将光标定位到一行的开始位置,只需要按下数字键 0 即可,键盘上的 Home 键也有相同效果。
行末:在交互模式下,为了将光标定位到一行的末尾,只需要按下美元符号键 $ 即可,键盘上的 End 键也有相同效果。
按单词移动
在交互模式下,按字母键 w 可以一个单词一个单词的移动。
退出文件
在交互模式下,按下冒号键 : 进入命令模式,再按下 q 键,就可以退出了。
如果在退出之前又修改了文件,就直接想用 :q 退出 Vim ,那么 Vim 会显示一个红字标明错误信
息。此时我们有两个选择:
保存并退出 :wq 或 :x ;
不保存且退出 :q! 。
标准操作
删除字符
在交互模式下,将光标定位到一个你想要删除的字符上,按下字母键 x 你会发现这个字符被删除 了。
也可以一次性删除多个字符,只需要在按 x 键之前输入数字即可。
删除(剪切)单词,行
删除一行:连按两次 d 来删除光标所在的那一行。
删除多行:例如先输入数字 2 ,再按下 dd ,就会删除从光标所在行开始的两行。
删除一个单词:将光标置于一个单词的首字母处,然后按下 dw 。
删除多个单词:例如先按数字键 2 再按 dw 就可以删除两个单词了。
从光标所在位置删除至行首: d0 。
从光标所在位置删除至行末: d$ 。
复制单词,行
复制行:按两次 y 会把光标所在行复制到内存中,和 dd 类似, dd 用于“剪切”光标所在行。
复制单词: yw 会复制一个单词。
复制到行末: y$ 是复制从光标所在处到行末的所有字符。
复制到行首: y0 是复制光标所在处到行首的所有字符。
粘贴
如果之前用 dd 或者 yy 剪切复制过来的,可以使用 p 来粘贴。同样也可以使用 数字+p 来表示复 制多次。
替换一个字符
在交互模式下,将光标置于想要替换的字符上。按下 r 键,接着输入你要替换的字符即可。
撤销操作
如果要撤销最近的修改,只需要按下 u 键,如果想要撤销最近四次修改,可以按下4,再按下 u 。
重做
取消撤销,也就是重做之前的修改使用 ctrl + r 。
跳转到指定行
Vim 编辑的文件中,每一行都有一个行号,行号从1开始,逐一递增。
行号默认是不显示,如果需要它显示的话,可以进入命令模式,然后输入 set nu ,如果要隐藏行 号的话,使用 set nonu 。
跳转到指定行: 数字+gg ,例如 7gg ,表示跳转到第7行。
要跳转到最后一行,按下 G 。
要跳转到第一行,按下 gg 。
高级操作
查找
处于交互模式下,按下 / 键,那么就进入查找模式,输入你要查找的字符串,然后按下回车。光 标就会跳转到文件中下一个查找到的匹配处。如果字符串不存在,那么会显示 “pattern not found” 。
n 跳转到下一个匹配项;
N 跳转到上一个匹配项。
[注意] 用斜杠来进行的查找是从当前光标处开始向文件尾搜索,如果你要从当前光标处开始,向 文件头搜索则使用 ? ,当然也可以先按下 gg 跳转到第一行在进行全文搜索。
什么是 vim?
vim 键盘图
vi/vim 的使用
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是普通模式常用的几个命令:
- i – 切换到输入模式,在光标当前位置开始输入文本。
- x – 删除当前光标所在处的字符。
- : – 切换到底线命令模式,以在最底一行输入命令。
- a – 进入插入模式,在光标下一个位置开始输入文本。
- o:在当前行的下方插入一个新行,并进入插入模式。
- O – 在当前行的上方插入一个新行,并进入插入模式。
- dd – 剪切当前行。
- yy – 复制当前行。
- p(小写) – 粘贴剪贴板内容到光标下方。
- P(大写)-- 粘贴剪贴板内容到光标上方。
- u – 撤销上一次操作。
- Ctrl + r – 重做上一次撤销的操作。
- :w – 保存文件。
- :q – 退出 Vim 编辑器。
- :q! – 强制退出Vim 编辑器,不保存修改。
若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。
命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。
输入模式
在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
:w
:保存文件。:q
:退出 Vim 编辑器。:wq
:保存文件并退出 Vim 编辑器。:q!
:强制退出Vim编辑器,不保存修改。
按 ESC 键可随时退出底线命令模式。
简单的说,我们可以将这三个模式想成底下的图标来表示:
vi/vim 使用实例
使用 vi/vim 进入一般模式
如果你想要使用 vi 来建立一个名为 runoob.txt 的文件时,你可以这样做:
$ vim runoob.txt
直接输入 vi 文件名 就能够进入 vi 的一般模式了。请注意,记得 vi 后面一定要加文件名,不管该文件存在与否!
按下 i 进入输入模式(也称为编辑模式),开始编辑文字
在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。
按下 ESC 按钮回到一般模式
好了,假设我已经按照上面的样式给他编辑完毕了,那么应该要如何退出呢?是的!没错!就是给他按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了!
在一般模式中按下 :wq 储存后离开 vi
OK,我们要存档了,存盘并离开的指令很简单,输入 :wq 即可保存离开!
OK! 这样我们就成功创建了一个 runoob.txt 的文件。
关于Linux基础命令的介绍今天就到这里啦,后续我会为大家继续介绍Linux的相关知识哦~
关注我,带你领略Linux的风采~😍😍😍