1. Linux简介与安装
1.1 Linux的基本介绍
- 操作系统
Unix→Max OS、Linux或(GNU/Linux)
MS-DOS→Windows -
Linux无处不在
大部分网站的服务器都是Linux系统
Android系统的底层用的是修改过的Linux内核
全球500台最快的超级计算机中,80%采用Linux系统 -
Linux特点
免费、更新频繁 - 不同
Linux发行版
RedHat:性能稳定,老牌的Linux发行版。收费的是RHEL(企业版)。
Fedora:RedHat的社区免费后继版。
CentOS:可以算是RHEL的克隆版,免费。
Mandriva:最早Mandrake的开发者是基于RedHat进行开发的。
SUSE:德国最著名的Linux发行版。
Debian:迄今为止,最遵循GNU规范的Linux系统。
Ubuntu:Debian的后继或一个分支。
Gentoo:高度的自定制性。
Slackware:历史最悠久的Linux发行版,创建于1992年。
Deepin:中国发行。对优秀的开源产品进行集成和配置,开发软件。
总结如下:
Linux→Mandriva、Red Hat、Debian、Slackware
Debian→Knoppix、Ubuntu、Skolelinux -
Ubuntu
简便易用、更新频繁、社区完善、标准化
有多个版本:桌面版、服务器版、嵌入式版、云版
官网、中文官网、优麒麟 -
Linux主流桌面管理器
Gnome、KDE、Unity、XFCE
1.2 Ubuntu系统的安装
- 华为云安装
Ubuntu系统
系统版本Ubuntu 18.04.4 LTS
密码Aa299*** - 第一次
root登录
命令行输入:ssh root@121.37.170.230
密码:Aa299***
报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! Host key verification failed.
由于更换了服务器的操作系统,导致之前配置的SSH免密登录失效。
解决:ssh-keygen -R 121.37.170.230
重新登录:ssh root@121.37.170.230 -
XFCE介绍
XFCE是一个精简的轻量化桌面,与Gnome和KDE相比更小巧,并且界面美观、对用户友好,适合云服务器远程连接场景下使用。
资料:Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较 - 安装
XFCE桌面并使用VNC Viewer连接
(1) 安装VNC Server
远程登录云服务器
ssh root@121.37.170.230
更新软件列表
sudo apt update
安装Xfce桌面环境。
sudo apt install xfce4 xfce4-goodies
安装TightVNC服务器
sudo apt install tightvncserver
初始化VNC Server
vncserver
输入密码、验证密码、输入n
(2) 配置VNC Server
停止第一个虚拟桌面
vncserver -kill :1
修改xstartup文件
vim ~/.vnc/xstartup
按i进入编辑模式,添加以下内容
#!/bin/sh
xrdb $HOME/.Xresources
startxfce4 &
配置可执行
sudo chmod +x ~/.vnc/xstartup
重启VNC Server
vncserver
回显信息中出现类似这样的一条信息:Log file is /root/.vnc/xxx:1.log。其中,1表示当前用户分配的是VNC的第一个虚拟桌面。
(3) 云服务器控制台配置
更改安全组规则,放行5901端口。
(4) 使用VNC Viewer连接云服务器
在本地PC打开VNC Viewer客户端,输入云服务器的弹性公网IP:5901,设置名称,单击OK。
注意:① 服务器重启后,需要重新执行vncserver重启VNC Server。②xxx:1.log日志中的1与5901端口中的1对应。 ③XFCE桌面配置重置命令rm -r ~/.config/xfce4④ 如果本地通过VNC Viewer连接时报错Too many authentication failures,则需要重启vncserver。即:sudo vncserver -kill :1和sudo vncserver :1
资料: 使用VNC Viewer连接Linux云服务器 - 安装
Gnome桌面(可选)
在Ubuntu Server 18.04上安装GNOME桌面
2. Linux中基本命令的使用
2.1 终端的基本操作
- 终端介绍
有些操作使用终端更方便快捷。
Linux和Unix终端命令大部分类似。
自从20世纪6,70年代开始,终端基本没变。一次学习,终身受用。
mac OS系统使用的是Unix终端。 - 命令行
Command Line提示符拆解
root@ecs-x-large-2-linux-20200315202744:~#
root: 当前用户名
ecs-x-large-2-linux-20200315202744:主机名。
~:当前用户的家目录
#:用户权限,其中$表示普通用户,#表示超级管理员。
// 切换到超级管理员
root@ecs-x-large-2-linux-20200315202744:~# sudo su
//查看用户
root@ecs-x-large-2-linux-20200315202744:~# whoami
root
//查看主机
root@ecs-x-large-2-linux-20200315202744:~# hostname
ecs-x-large-2-linux-20200315202744
- 命令介绍
(1) 格式
command parameters
命令区分大小写。
(2) 短参数
command -p、command -p -a、command -pa、command -p 10
一个横线、短参数可以合并、通过空格赋值。
(3) 长参数
command --para、command --para1 --para2、command --para=10
两个横线、长参数不可以合并、通过等号赋值。
(4) 其他参数
有些参数的形式没有绝对的准则。例如:ls 路径名
(5) 命令补全
按一次Tab键补全命令或路径。
按两次Tab键列出所有相关命令。
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Documents Downloads Music Pictures Public Templates Videos
root@ecs-x-large-2-linux-20200315202744:~# ls -a
. .bash_history .dbus .ssh Desktop Pictures
root@ecs-x-large-2-linux-20200315202744:~# ls --all
. .bash_history .dbus .ssh Desktop Pictures
root@ecs-x-large-2-linux-20200315202744:~# ls Desktop
root@ecs-x-large-2-linux-20200315202744:~# date
Fri Jul 31 08:30:38 CST 2020
root@ecs-x-large-2-linux-20200315202744:~# c
Display all 103 possibilities? (y or n)
c++ clear_console
c++filt cloud-init
c89 cloud-init-per
c89-gcc cmp
root@ecs-x-large-2-linux-20200315202744:~# logout
Connection to 121.37.170.230 closed.
➜ ~
注意:①按两次Tab列出所有相关命令。如果相关命令太多时,则只显示第一页。按空格显示下一页,按回车显示下一行,按Q退出显示。 ②logout关闭服务器连接。
- 查看命令历史记录
上下查找:↑、↓
搜索查找:Ctrl + R
(reverse-i-search)d': date
列出所有:history - 快捷键
清屏:Ctrl + L或者clear
Ctrl + D:退出连接或关闭命令行:
Ctrl + A:光标跳到一行命令起始位置
Ctrl + E:光标跳到一行命令结束位置
Ctrl + U:删除在光标左侧的所有命令字符
Ctrl + K:删除在光标右侧的所有命令字符
Ctrl + W:删除在光标左侧的一个单词
Ctrl + Y:粘贴用Ctrl + U、Ctrl + K或Ctrl + W删除的字符串。
注释:Ctrl + L和clear相当于滚动到新的一屏。而macOS中的command + K才是真正的清屏。
2.2 Linux下的文件操作
2.2.1 Linux文件系统
-
Linux中的文件目录组织形式
Linux有且只有一个根目录,就是/。
Linux用/来表示目录的层级与包含关系。
Linux的目录形式为:/usr/bin。
bin是usr目录的子目录,usr是/根目录的子目录。 -
/根目录的直属子目录介绍
(1)bin
binary二进制文件,包含用户的所有可执行程序。
(2)boot
boot启动,包含与Linux启动密切相关的文件。
(3)etc
包含系统的配置文件。
(4)home
用户的私人目录。在这个目录中,我们放置私人的文件。
Linux中的每个用户(除了root)都在home目录中有一个私人目录(家目录)。
例如:用户名是nmw,那么我的私人目录(家目录)就是/home/nmw。
(5)lib
library“库”,包含被程序所调用的库文件。
例如:.so结尾的文件。windows中这样的库文件是以.dll结尾的。
(6)media
媒体,当可移动的外设(例如USB盘、SD卡、DVD、光盘等)插入电脑时,Linux可以让我们通过media的子目录访问这些外设的内容。
(7)mnt
mount挂载,类似于media,但一般用于临时挂载一些装置。
(8)opt
optional application software package“可选的应用软件包”。
用于安装多数第三方软件和插件。
(9)root
根,超级管理员的root的家目录。
一般用户的家目录位于/home下,root用户例外。
(10)sbin
system binary系统二进制文件,比bin多了个system。
包含的是系统级的重要可执行程序。
(11)srv
service服务,包含一些网络服务启动后所需要取用到的数据。
(12)tmp
temporary临时,普通用户和程序存放临时文件的地方。
(13)usr
Unix Software Resource表示Unix操作系统软件资源(历史遗留命名)。
该目录是最庞大的目录之一,安装了大部分用户要调用的程序。
类似于Windows中的C:\Windows和C:\Program Files这两个文件夹的集合。
(14)var
包含程序的数据,例如log日志文件。
root@ecs-x-large-2-linux-20200315202744:~# pwd
/root
root@ecs-x-large-2-linux-20200315202744:~# cd /
root@ecs-x-large-2-linux-20200315202744:/# ls
CloudResetPwdUpdateAgent initrd.img.old sbin
CloudrResetPwdAgent lib snap
HostGuardAgent_Linux64_V1.12.50.deb.sha256 lib64 srv
bin lost+found swapfile
boot media sys
dev mnt tmp
etc opt usr
home proc var
hostguard_setup_config.dat root vmlinuz
initrd.img run vmlinuz.old
root@ecs-x-large-2-linux-20200315202744:/# cd root
root@ecs-x-large-2-linux-20200315202744:~#
注意:① pwd命令可以打印当前所在的绝对目录结构。② 以上目录列表形式不仅限于Linux系统,类Unix系统类似。
➜ ~ cd /
➜ / ls
Applications Users cores home sbin var
Library Volumes dev opt tmp
System bin etc private usr
➜ / cd ~
➜ ~ pwd
/Users/nimengwei
➜ ~
-
Linux文件系统结构图
/:bin、dev、home、lib、root、var
home:drew、nmw -
witch命令
获取命令的可执行文件的位置。
root@ecs-x-large-2-linux-20200315202744:~# pwd
/root
root@ecs-x-large-2-linux-20200315202744:~# which pwd
/bin/pwd
root@ecs-x-large-2-linux-20200315202744:~# which which
/usr/bin/which
注意:Windows命令中可执行程序一般以.exe为后缀,而Linux中一般没有后缀名。
-
ls命令
(1)--color=auto/none
开启/关闭颜色,默认开启。
其中:蓝色→目录;绿色→可执行文件;绿色→压缩文件;浅蓝色→链接文件;灰色→其他文件。
(2)-a
a是all,显示隐藏的文件。
以.开头的文件是隐藏文件。
.表示当前目录。
..表示上一级目录。
(3)-A
与-a的区别就是不列出.和..两个文件。
(4)-l
列出文件和目录详细信息的列表。
(5)-h
h是humain readable,表示适合人类阅读的。
(6)-t
按照文件最后一次修改时间排序。
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Documents Downloads Music Pictures Public Templates Videos
root@ecs-x-large-2-linux-20200315202744:~# ls -a
. .bash_history .dbus .ssh Desktop Pictures
.. .bashrc .gnupg .viminfo Documents Public
root@ecs-x-large-2-linux-20200315202744:~# ls .
Desktop Documents Downloads Music Pictures Public Templates Videos
root@ecs-x-large-2-linux-20200315202744:~# ls ..
bin lost+found swapfile
boot media sys
initrd.img run vmlinuz.old
root@ecs-x-large-2-linux-20200315202744:~# ls -l
total 32
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Desktop
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Documents
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Downloads
root@ecs-x-large-2-linux-20200315202744:~# ls -lh
total 32K
drwxr-xr-x 2 root root 4.0K Jul 30 09:49 Desktop
drwxr-xr-x 2 root root 4.0K Jul 30 09:49 Documents
drwxr-xr-x 2 root root 4.0K Jul 30 09:49 Downloads
root@ecs-x-large-2-linux-20200315202744:~# ls -lath
total 128K
-rw-r--r-- 1 root root 1.5K Aug 1 00:45 .bash_history
-rw------- 1 root root 35K Jul 31 21:15 .xsession-errors
drwx------ 17 root root 4.0K Jul 31 20:08 .
-rw------- 1 root root 1.3K Jul 31 20:08 .ICEauthority
注释::① total 32:该层文件/文件夹大小之和。
② drwxr-xr-x 2 root root 4096 Jul 30 09:49 Desktop:drwxr-xr-x文件权限,2对于目录表示目录中文件个数,对于文件则表示链接数目,root文件所有者名称,root文件所在的群组,4096文件大小,Jul 30 09:49最近修改的时间,Desktop文件/目录名。
-
cd命令
可以使用相对路径和绝对路径(/开头)。
回到家目录:cd ~或者cd
root@ecs-x-large-2-linux-20200315202744:~# cd /
root@ecs-x-large-2-linux-20200315202744:/# cd usr
root@ecs-x-large-2-linux-20200315202744:/usr# pwd
/usr
root@ecs-x-large-2-linux-20200315202744:/usr# cd ..
root@ecs-x-large-2-linux-20200315202744:/# cd usr/games
root@ecs-x-large-2-linux-20200315202744:/usr/games# cd ../..
root@ecs-x-large-2-linux-20200315202744:/# cd ~
root@ecs-x-large-2-linux-20200315202744:~# cd /usr/games
root@ecs-x-large-2-linux-20200315202744:/usr/games# cd ~
root@ecs-x-large-2-linux-20200315202744:~# cd ../usr/games
root@ecs-x-large-2-linux-20200315202744:/usr/games#
注意:两次tab可以自动补全命令。
-
du命令
du是disk usage的缩写,表示磁盘使用/占用。
可以查看文件和目录所占的空间大小。
(1)-h
表示适合人类阅读的。
(2)-a
默认du目录只显示目录大小。加上-a,则会显示目录和文件的大小。
(3)-s
只显示目录总大小,不显示目录和文件列表。
root@ecs-x-large-2-linux-20200315202744:~# du -ah
4.0K ./Pictures
4.0K ./.viminfo
4.0K ./.dbus/session-bus/90234ee485824633a7d7fa2e6f70265b-1
8.0K ./.dbus/session-bus
12K ./.dbus
.....
644K .
root@ecs-x-large-2-linux-20200315202744:~# du -sh
644K .
注意:ls -l只会统计文件或目录本身的大小。du命令会遍历目录内部的目录和文件,统计所有文件大小。
2.2.2 Linux文件操作
- 显示文件内容
(1)cat命令
一次性显示文件所有内容。
-n参数表示显示行号。
(2)less命令
分页显示文件内容。
显示内容之后的快捷键如下:
①q-中止读取文件 ② 空格-读取下一屏内容 ③ 回车-读取下一行
④d- 前进半个页面 ⑤u-后退半页 ⑥b或者↓-后退一页
⑦y或者↑-后退一行 ⑧=-显示你在文件中的位置 ⑨h- 显示帮助文档
⑩/- 进入搜索模式。n-跳转到下一个搜索结果。N-跳转到上一个搜索结果。
root@ecs-x-large-2-linux-20200315202744:/var/log# less syslog
root@ecs-x-large-2-linux-20200315202744:/var/log# cat syslog
Aug 1 06:25:01 ecs-x-large-2-linux-20200315202744 rsyslogd: [origin software="rsyslogd" swVersion="8.32.0" x-pid="685" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
...
- 显示文件的首位
(1)head命令
显示文件的开头几行
-n- 显示几行,默认显示10行。
(2)tail命令
显示文件的结尾几行
①-n- 显示几行,默认显示10行。
②-f- 实时追踪文件的更新。
默认每过1s检查一次文件是否有更新。
可以用-s参数指定间隔检查的秒数,例如:tail -f -s 4 syslog
Ctrl + c终止查看。
root@ecs-x-large-2-linux-20200315202744:/var/log# head -n 1 syslog
Aug 1 06:25:01 ecs-x-large-2-linux-20200315202744 rsyslogd: [origin software="rsyslogd" swVersion="8.32.0" x-pid="685" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
root@ecs-x-large-2-linux-20200315202744:/var/log# tail -n 2 syslog
Aug 1 09:42:54 ecs-x-large-2-linux-20200315202744 systemd[1]: Started Session 26 of user root.
Aug 1 09:47:00 ecs-x-large-2-linux-20200315202744 systemd[1]: Started Session 27 of user root.
root@ecs-x-large-2-linux-20200315202744:/var/log# tail -f syslog
Aug 1 09:05:10 ecs-x-large-2-linux-20200315202744 org.freedesktop.thumbnails.Cache1[1764]: Registered thumbailer /usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
Aug 1 09:05:10 ecs-x-large-2-linux-20200315202744 org.freedesktop.thumbnails.Cache1[1764]: Registered thumbailer /usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
Aug 1 09:05:10 ecs-x-large-2-linux-20200315202744 dbus-daemon[1764]: [session uid=0 pid=1764] Successfully activated service 'org.freedesktop.thumbnails.Cache1'
...
^C
注意:Ctrl + c可以终止大部分终端命令。
-
touch命令
创建一个空白文件。
该命令的设计初衷是修改文件的时间戳。如果文件不存在,就会新建一个新的。
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Documents Downloads Music Pictures Public Templates Videos
root@ecs-x-large-2-linux-20200315202744:~# touch new_file
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Downloads Pictures Templates new_file
Documents Music Public Videos
root@ecs-x-large-2-linux-20200315202744:~# ls -l
total 32
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Public
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Templates
drwxr-xr-x 2 root root 4096 Jul 30 09:49 Videos
-rw-r--r-- 1 root root 0 Aug 1 10:00 new_file
...
root@ecs-x-large-2-linux-20200315202744:~# touch new_file2 new_file3
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Downloads Pictures Templates new_file new_file3
Documents Music Public Videos new_file2
-
mkdir命令
创建一个目录。
(1) 创建单层目录
mkdir 目录
(2) 创建多层目录
mkdir -p 目录1/目录2/目录3
root@ecs-x-large-2-linux-20200315202744:~# mkdir new_folder
root@ecs-x-large-2-linux-20200315202744:~# mkdir new_folder2 new_folder3
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Downloads Pictures Templates new_file new_file3 new_folder2
Documents Music Public Videos new_file2 new_folder new_folder3
root@ecs-x-large-2-linux-20200315202744:~# mkdir -p dir1/dir2/dir3
root@ecs-x-large-2-linux-20200315202744:~# cd dir1/dir2
root@ecs-x-large-2-linux-20200315202744:~/dir1/dir2# ls
dir3
-
cp命令
拷贝文件或目录。
(1) 拷贝文件
cp 文件 备份文件:拷贝文件到当前目录为一个新的文件名。
cp 文件 目录:拷贝文件到其他目录。
cp 文件 目录/备份文件:拷贝文件到其他目录为一个新的文件名。
root@ecs-x-large-2-linux-20200315202744:~# cp new_file new_file_copy
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Music Templates new_file new_file_copy new_folder3
Documents Pictures Videos new_file2 new_folder
Downloads Public dir1 new_file3 new_folder2
root@ecs-x-large-2-linux-20200315202744:~# cp new_file new_folder
root@ecs-x-large-2-linux-20200315202744:~# cd new_folder
root@ecs-x-large-2-linux-20200315202744:~/new_folder# ls
new_file
root@ecs-x-large-2-linux-20200315202744:~/new_folder# cd ..
root@ecs-x-large-2-linux-20200315202744:~# cp new_file new_folder/new_file_copy
root@ecs-x-large-2-linux-20200315202744:~# cd new_folder
root@ecs-x-large-2-linux-20200315202744:~/new_folder# ls
new_file new_file_copy
(2) 拷贝目录
添加-r参数,表示recursive递归拷贝。
目录中的所有内容(子目录和文件)都会被拷贝。
root@ecs-x-large-2-linux-20200315202744:~# cp -r new_folder new_folder_copy
root@ecs-x-large-2-linux-20200315202744:~# cd new_folder_copy
root@ecs-x-large-2-linux-20200315202744:~/new_folder_copy# ls
new_file new_file_copy
root@ecs-x-large-2-linux-20200315202744:~/new_folder_copy#
- 使用通配符
*
例如:cp *.txt folder把当前目录下所有txt文件拷贝到folder目录中。
cp ha* folder:把当前目录以ha开头的文件都拷贝到folder目录中。
root@ecs-x-large-2-linux-20200315202744:~# cp new_file* new_folder2
root@ecs-x-large-2-linux-20200315202744:~# cd new_folder2
root@ecs-x-large-2-linux-20200315202744:~/new_folder2# ls
new_file new_file2 new_file3 new_file_copy
-
mv命令
mv表示move移动。mv命令有两个功能。
(1) 移动文件/目录
移动目录也不需要添加新的参数(-r)。
root@ecs-x-large-2-linux-20200315202744:~# mv new_file2 new_folder3 new_folder
root@ecs-x-large-2-linux-20200315202744:~# cd new_folder
root@ecs-x-large-2-linux-20200315202744:~/new_folder# ls
new_file new_file2 new_folder3 new_file_copy
(2) 重命名文件/目录
移动到当前目录则相当于重命名。
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Music Templates new_file new_folder2
Documents Pictures Videos new_file_copy new_folder_copy
Downloads Public dir1 new_folder
root@ecs-x-large-2-linux-20200315202744:~# mv new_folder2 new_folder2_rename
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Music Templates new_file new_folder2_rename
Documents Pictures Videos new_file_copy new_folder_copy
Downloads Public dir1 new_folder
root@ecs-x-large-2-linux-20200315202744:~#
注意:拷贝、移动等命令都可以使用通配符*。
-
rm命令
删除文件和目录。
-i:询问是否删除。
-f:不询问强制删除。
-r:递归删除,用来删除目录。
root@ecs-x-large-2-linux-20200315202744:~# rm new_file_copy
root@ecs-x-large-2-linux-20200315202744:~# rm -i new_file
rm: remove regular empty file 'new_file'? n
root@ecs-x-large-2-linux-20200315202744:~# rm -r new_folder2_rename
root@ecs-x-large-2-linux-20200315202744:~# ls
Desktop Downloads Pictures Templates dir1 new_folder
Documents Music Public Videos new_file new_folder_copy
注意:① rm -rf的含义是强制递归删除文件夹,很危险。② 超级管理员运行rm -rf /*或者rm -rf /命令会删除你的整个Linux系统。
-
rmdir
只能用来删除一个空的目录,不常用。
root@ecs-x-large-2-linux-20200315202744:~# mkdir aaa
root@ecs-x-large-2-linux-20200315202744:~# rmdir aaa
- 文件的存储
文件名、权限和文件内容。
每个文件的文件内容被分配一个标识号码,即inode。
每个文件名都绑定到它的文件内容,用inode标识。
ls -i- 查看文件的inode
root@ecs-x-large-2-linux-20200315202744:~# ls -i
1843494 Desktop 1843495 Downloads 1843500 Pictures 1843496 Templates
1843498 Documents 1843499 Music 1843497 Public 1843501 Videos
-
ln命令
创建链接(快捷方式)。
分类:Physical link物理链接/硬链接、Symbolic link符号链接/软链接
硬链接只能够指向文件。软链接既能够指向文件,又能够指向目录。软链接应用更广泛。
(1)Physical link物理链接/硬链接
创建文件1的硬链接文件2
命令:ln 文件1 文件2
原理:文件1→inode文件内容,文件2→inode文件内容
介绍:文件2和文件1的inode相同。修改文件1和文件2,则修改的是同一块内容。文件1和文件2都删除,文件内容才会删除。
root@ecs-x-large-2-linux-20200315202744:~# mkdir test
root@ecs-x-large-2-linux-20200315202744:~# cd test
root@ecs-x-large-2-linux-20200315202744:~/test# touch f1
root@ecs-x-large-2-linux-20200315202744:~/test# ln f1 f2
root@ecs-x-large-2-linux-20200315202744:~/test# ls -l
total 0
-rw-r--r-- 2 root root 0 Aug 1 12:02 f1
-rw-r--r-- 2 root root 0 Aug 1 12:02 f2
root@ecs-x-large-2-linux-20200315202744:~/test# ls -i
1843520 f1 1843520 f2
root@ecs-x-large-2-linux-20200315202744:~/test#
注意:2表示指向该文件内容的文件数为2。f1和f2指向的文件内容inode相同(1843520)。
(2) Symbolic link符号链接/软链接
创建文件1的软链接文件2
命令:ln -s 文件1 文件2 。其中,s是symbolic符号的缩写。
原理:文件1 → inode文件内容,文件2 → 文件1
介绍:文件2和文件1的inode不同。如果删除文件1,则文件2会变成死链接。
root@ecs-x-large-2-linux-20200315202744:~/test# touch f1
root@ecs-x-large-2-linux-20200315202744:~/test# ls
f1
root@ecs-x-large-2-linux-20200315202744:~/test# ln -s f1 f2
root@ecs-x-large-2-linux-20200315202744:~/test# ls
f1 f2
root@ecs-x-large-2-linux-20200315202744:~/test# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 1 12:15 f1
lrwxrwxrwx 1 root root 2 Aug 1 12:16 f2 -> f1
root@ecs-x-large-2-linux-20200315202744:~/test# ls -i
1843520 f1 1843521 f2
注意:第一个字符-表示普通文件,l表示软链接。 1表示指向该文件内容的文件数为1。f1和f2指向的文件内容inode不同。
2.3 Linux下的权限管理
2.3.1 用户权限
-
Linux中的用户组织
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户 账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。 -
sudo与su相关命令
sudo:暂时切换到超级用户模式以执行超级用户权限,需要输入当前用户密码。有时间限制,Ubuntu默认为一次时长15分钟。
su:切换到某某用户模式,需要输入切换后账户的密码。如果不加账户默认为root账户。没有时间限制。
sudo su:运行sudo命令给su命令提权,运行su命令,切换到root模式。
注意:普通用户切换到root用户模式有两种方式。一种是su命令,需要输入root密码,一种是sudo su命令,需要输入当前用户密码。 - 创建用户
adduser nmw
root@ecs-x-large-2-linux-20200315202744:~# adduser nmw
Adding user `nmw' ...
Adding new group `nmw' (1000) ...
Adding new user `nmw' (1000) with group `nmw' ...
Creating home directory `/home/nmw' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for nmw
Enter the new value, or press ENTER for the default
Full Name []: nimengwei
Room Number []:
Work Phone []: 17626186618
Home Phone []:
Other []:
Is the information correct? [Y/n] y
创建用户后会默认在/home目录中添加nmw用户的家目录。
root@ecs-x-large-2-linux-20200315202744:~# cd /home
root@ecs-x-large-2-linux-20200315202744:/home# ls
nmw
- 修改密码
passwd nmw - 删除用户
删除用户:deluser nmw
删除用户及对应家目录:deluser --remove-home nmw
注意:adduser和deluser只是Debian一族(包括Ubuntu)才有的命令。其他Linux发行版,添加用户和删除用户一般用useradd和userdel。 - 用户群组管理
(1) 创建用户如果不设置群组,则会创建一个和用户名相同的群组,并将用户划归到这个群组。
(2) 查看家目录
root@ecs-x-large-2-linux-20200315202744:~# ls -l /home
total 4
drwxr-xr-x 2 nmw nmw 4096 Aug 1 17:39 nmw
其中,第三列nmw表示文件/目录的所有者,第四列nmw表示文件或/目录所在的群组。
(3) 创建群组
addgroup friends
root@ecs-x-large-2-linux-20200315202744:~# addgroup friends
Adding group `friends' (GID 1001) ...
Done.
(4) 删除群组
delgroup happy
root@ecs-x-large-2-linux-20200315202744:~# delgroup happy
Removing group `happy' ...
Done.
- 修改用户群组
(1)usermod 用户名
-l对用户重命名。/home中的家目录名不变,需要手动修改。
-g修改用户所在群组。原群组剔除此用户。
-G将用户添加到多个群组。原群组剔除此用户。
-aG追加到新的群组。原群组不剔除此用户。
注意:使用usermod命令修改用户组时,很容易被剔除原有组,因此尽量不要使用。可以使用gpasswd命令。
(2)gpasswd -a 用户名 组名
一次从一个组中添加(或删除)一个用户。
(3)groups 用户名
可以查看该用户所在的群组
root@ecs-x-large-2-linux-20200315202744:~# usermod -g friends nmw
root@ecs-x-large-2-linux-20200315202744:~# usermod -G friends,happy nmw
root@ecs-x-large-2-linux-20200315202744:~# usermod -aG friends,happy nmw
root@ecs-x-large-2-linux-20200315202744:~# groups nmw
nmw : friends happy
root@ecs-x-large-2-linux-20200315202744:~# groups root
root : root
root@ecs-x-large-2-linux-20200315202744:~# gpasswd -a nmw sudo
Adding user nmw to group sudo
2.3.2 文件权限
- 文件访问权限符
-:如果在第一个字符,表示普通文件;否则,表示没有权限。
d:目录;
l:链接;
r:读;
w:写
x:执行/运行 - 三种基本权限
(1)r读 数值表示为4
(2)w写 数值表示为2
(3)x可执行 数值表示为1 - 文件权限介绍
例如:drwxrwxr-x
一共十个字符,分成四段。
(1) 第1个字符d表示目录,-表示普通文件,l表示链接。
(2) 第2-4个字符rwx表示当前所属用户的权限,用数值表示为4+2+1=7。
(3) 第5-7个字符rwx表示当前所属组的权限,用数值表示为4+2+1=7。
(4) 第8-10个字符r-x表示其他用户权限,用数值表示为4+1=5。
此文件的权限用数值表示为775。 - 使用数字分配权限
chmod 765 filename
参数:-R递归修改文件访问权限。
chmod是change和mode的缩写。
只要你是此文件的所有者,就可以用chmod来修改文件的访问权限。
root@ecs-x-large-2-linux-20200315202744:/home/nmw# touch 1.txt
root@ecs-x-large-2-linux-20200315202744:/home/nmw# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 1 20:06 1.txt
root@ecs-x-large-2-linux-20200315202744:/home/nmw# chmod 600 1.txt
root@ecs-x-large-2-linux-20200315202744:/home/nmw# ls -l
total 0
-rw------- 1 root root 0 Aug 1 20:06 1.txt
- 使用字母分配权限
范围:u用户、g群组、o其他、a所有
分配:+添加权限、-移除权限、=分配权限。
chmod u+rx file:所属用户添加读和运行的权限。
chmod g+r file:群组其他用户增加读的权限。
chmod o-r file:其他用户移除读的权限。
chmod g+r o-r file:群组其他用户增加读的权限,其他用户移除读的权限。
chmod go-r file:群组其他用户和其他用户移除读的权限。
chmod a+x file:所属用户增加运行的权限。
chmod u=rwx,g=r,o=- file:所属用户分配读写和执行权限,群组其他用户分配读的权限,其他用户分配无权限。
注意:使用字母分配权限不需要一次设置三组。
3. Linux中的文本编辑和软件安装
3.1 Nano文本编辑器
-
Linux终端文本编辑器
Nano、Vim、Emacs等 -
nano介绍
nano:毫微、十亿分之一。
功能强大,适合入门。
Ubuntu和macOS系统都默认安装了Nano和Vim。
注释:pico的含义是万亿分之一。 -
nano组合快捷键
Ctrl + G显示帮助文档、Ctrl + O保存文件、Ctrl + R打开其他文件
Ctrl + Y上一个屏幕、Ctrl + V下一个屏幕、Ctrl + K剪切当前一行
Ctrl + U粘贴剪切的内容、Ctrl + X退出、Ctrl + W查找
Ctrl + \替换、Ctrl + F向前移动一格光标、Ctrl + B向后移动一格光标
Ctrl + P向上移动一行、Ctrl + N向下移动一行 -
nano的参数
nano 文件:如果有文件且有写的权限,则打开。如果没有文件,则创建文件。
(1)-m
激活鼠标控制光标位置。
(2)-i
激活自动缩进的功能。
(3)-A
激活智能Home键的功能。
nano -miA file_nano
- 单个用户配置
.nanorc
每个Linux用户都可以在自己的家目录创建.nanorc文件。
每次nano启动前,都会读取此配置文件。
语法:通过set和unset进行配置。
例如:set mouse激活鼠标,set autoindent激活自动缩进,set smarthome激活只能Home键。
root@ecs-x-large-2-linux-20200315202744:/home/nmw# nano .nanorc
root@ecs-x-large-2-linux-20200315202744:/home/nmw# cat .nanorc
set mouse
set autoindent
set smarthome
注释:vim的配置文件是.vimrc,bash shell的配置文件是.bashrc。可以通过nano ~/.nanorc进行单用户nano配置。
- 配置全局
nanorc
全局nano配置文件只能被root用户修改。
位置:/etc/nanorc。
命令:sudo nano /etc/nanorc
优先级:家目录下的.nanorc配置优先级更高。
总结:单用户配置文件在~/,全局配置文件在/etc/。单用户配置文件起始为点.,全局配置文件没有。 -
bash配置
shell是用户和操作系统之间的命令解释器。Ubuntu和大部分常见的Linux发行版默认的shell程序就是bash。
单个用户配置文件:nano ~/.bashrc
全局配置文件:nano /etc/bash.bashrc
优先级:家目录下.bashrc配置优先级更高。
配置别名: 配置文件中添加alias 别名='命令' -
profile配置
单个用户配置文件:nano ~/.profile
全局配置文件:nano /etc/profile
.bashrc与.profile对比如下:
(1) 登录的shell:用户名/密码 → 使用.profile配置的shell→调用.bashrc
(2) 不登录的shell:使用.bashrc配置的shell - 使配置文件立即生效
修改.bashrc和.profile文件后,默认在用户下次登录系统时才生效。
可使用source命令使改动立即生效:
source .bashrc
3.2 Ubuntu中的软件安装
- 本章节软件安装相关知识点是基于
Debian的Linux发行版。不是Debian一族的Linux发行版软件安装方式稍有不同,例如:Fedora、Redhat、CentOS。 - 软件包
包的后缀:.deb
软件仓库:repository全球有很多软件仓库。
软件仓库列表文件:nano /etc/apt/sources.list - 软件仓库列表信息
deb http://archive.ubuntu.com/ubuntu/ bionic universe
deb:Debian
http://archive.ubuntu.com/ubuntu/:仓库地址
bionic:Ubuntu 18.04代号
universe:软件仓库的区域
如果要切换到其他软件仓库,只需要修改仓库地址。 - 包管理工具
apt-get:常用。
aptitude:卸载软件时可以卸载不同的依赖。默认没有安装。 - 常用命令介绍
以下命令都需要root权限,非root用户需要加sudo。
更新可安装的软件列表:apt-get update
升级所有已安装软件:apt-get upgrade
在软件列表里搜索可用软件:apt-cache search
安装软件:apt-get install XXX
卸载软件:apt-get autoremove XXX -
dpkg命令
dpkg是apt-get和aptitude两个命令的基础命令。
dpkg可以安装本地的.deb软件包。
安装:dpkg -i XXX.deb
卸载:dpkg -r XXX
3.3 RTFM阅读那该死的手册
-
Read The Fucking Manual
可执行程序或shell命令
系统调用(Linux内核提供的函数)
库调用(程序库中的函数)
特殊文件(通常在/dev下)
文件格式和惯例(例如/etc/passwd)
游戏
杂项(包括宏包和惯例,比例man(7),groff(7))
系统管理命令(通常只能被root用户使用)
内核子程序 -
man命令
查看相关命令或函数:man 数字 命令/函数
如果不加数字,man默认从数字较小的手册中寻找相关命令和函数。
↑和↓实现上一行和下一行跳转,空格键实现下一页跳转,/斜杠实现搜索,q退出。
root@ecs-x-large-2-linux-20200315202744:~# man ls
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
...
注释:NAME名字,SYNOPSIS摘要,DESCRIPTION描述,AUTHOR作者,REPORTING BUGS报告故障,COPYRIGHT版权,SEE ALSO另见。
-
SYNOPSIS区域介绍
示例1
root@ecs-x-large-2-linux-20200315202744:~# man mkdir
SYNOPSIS
mkdir [OPTION]... DIRECTORY...
(1) 字段介绍
[OPTION]:可选,添加参数,例如:-m、-p、-v等。
DIRECTORY:必选,目录。
...:表示可以指定多个参数和多个目录
(2) 字体介绍
粗体:表示要原封不动的输入。例如:mkdir
下划线:表示要用实际内容替换。例如:[OPTION]和DIRECTORY
示例2
root@ecs-x-large-2-linux-20200315202744:~# man cp
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
(1) 拷贝一个源文件到目标文件
cp [OPTION]... [-T] SOURCE DEST
例如:cp file.txt file_copy.txt
(2) 拷贝一个或多个源文件到目录
cp [OPTION]... SOURCE... DIRECTORY
例如:cp file.txt file_copy.txt photo/
(3) 拷贝一个或多个源文件到目录
cp [OPTION]... -t DIRECTORY SOURCE...
不常用。与(2)效果相同,但是把目录名放在了前面。-t必须加。
示例3
root@ecs-x-large-2-linux-20200315202744:~# man apt-get
SYNOPSIS
apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file]
[-t=target_release] [-a=architecture] {update | upgrade |
dselect-upgrade | dist-upgrade |
install pkg [{=pkg_version_number | /target_release}]... |
remove pkg... | purge pkg... |
source pkg [{=pkg_version_number | /target_release}]... |
build-dep pkg [{=pkg_version_number | /target_release}]... |
download pkg [{=pkg_version_number | /target_release}]... |
check | clean | autoclean | autoremove | {-v | --version} |
{-h | --help}}
该命令区域只有一行,只是显示在了多行。
(1) [-asqdyfmubV]
可以使用-a、-s、-q、-d等参数中的一个或多个。
(2) [-o=config_string] [-c=config_file] [-t=target_release] [-a=architecture]
这几个参数如果使用,必须加上参数值。
(3) {update | upgrade | ... | {-v | --version} | {-h | --help}}
必须且只能使用|(或)隔开的某一项。
例如:apt-get install XXX、apt-get update、apt-get autoclean
错误用法:apt-get update install XXX
- 查找命令
语法:apropos 关键字
在手册中查找所有含有此关键字的相关命令。
root@ecs-x-large-2-linux-20200315202744:~# apropos sound
default.pa (5) - PulseAudio Sound Server Startup Script
pacat (1) - Play back or record raw or encoded audio streams on a PulseA...
pacmd (1) - Reconfigure a PulseAudio sound server during runtime
pactl (1) - Control a running PulseAudio sound server
pamon (1) - Play back or record raw or encoded audio streams on a PulseA...
paplay (1) - Play back or record raw or encoded audio streams on a PulseA...
parec (1) - Play back or record raw or encoded audio streams on a PulseA...
parecord (1) - Play back or record raw or encoded audio streams on a PulseA...
pavucontrol (1) - A volume control for the PulseAudio sound server
pulseaudio (1) - The PulseAudio Sound System
start-pulseaudio-x11 (1) - PulseAudio Sound Server X11 Startup Script
-
-h和--help参数
显示命令的帮助文档。
root@ecs-x-large-2-linux-20200315202744:~# apt-get -h
apt 1.6.12 (amd64)
Usage: apt-get [options] command
apt-get [options] install|remove pkg1 [pkg2 ...]
apt-get [options] source pkg1 [pkg2 ...]
...
Most used commands:
update - Retrieve new lists of packages
upgrade - Perform an upgrade
install - Install new packages (pkg is libc6 not libc6.deb)
...
注释:-h没有man命令详细,但比man命令可读性更强。
-
whatis命令
whatis命令是man命令的精简版。只会显示man命令显示手册的开头部分。
root@ecs-x-large-2-linux-20200315202744:~# whatis ls
ls (1) - list directory contents
-
locate命令
搜索包含关键字的所有文件和目录。
语法:locate 文件/目录
特点:从文件数据库中查找,速度快。对于刚创建的文件,还没有被收录到文件数据库,因此locate目录就查不到。模糊查询。
文件数据库更新:Linux系统一般每天会更新一次文件数据库。我们可以使用updatedb命令强制系统立即更新文件数据库。
root@ecs-x-large-2-linux-20200315202744:~# locate nmw
/home/nmw
/home/nmw/.bash_logout
/home/nmw/.bashrc
root@ecs-x-large-2-linux-20200315202744:~# touch new_file
root@ecs-x-large-2-linux-20200315202744:~# locate new_file
root@ecs-x-large-2-linux-20200315202744:~# updatedb
root@ecs-x-large-2-linux-20200315202744:~# locate new_file
/root/new_file
root@ecs-x-large-2-linux-20200315202744:~#
-
find命令
搜索包含关键字的所有文件和目录。
语法:find [path] what [do]
含义:path指定在哪个目录内查找,默认从当前目录开始查找。what要查找的文件名、大小、最近访问时间等。do对查找到的文件做后续操作。
what参数:-name文件名,-size文件大小,-atime最近访问时间,-type文件类型
特点:与locate命令不同,find命令不会在文件数据库中查找文件记录,而是实际遍历你的硬盘。因此可以查找到刚创建的文件。精准查询,可以使用*通配符实现模糊查询。 -
find命令参数
(1)-name根据文件名查找
root@ecs-x-large-2-linux-20200315202744:~# find -name new_file
./new_file
root@ecs-x-large-2-linux-20200315202744:~# find -name syslog
root@ecs-x-large-2-linux-20200315202744:~# find /var/log -name syslog
/var/log/syslog
/var/log/installer/syslog
root@ecs-x-large-2-linux-20200315202744:~# find /var/log -name syslog*
/var/log/syslog.1
/var/log/syslog.2.gz
/var/log/syslog
/var/log/syslog.4.gz
/var/log/syslog.3.gz
/var/log/installer/syslog
(2) -size根据文件大小查找
root@ecs-x-large-2-linux-20200315202744:~# find /var -size +50M
/var/cache/apt/srcpkgcache.bin
/var/cache/apt/pkgcache.bin
root@ecs-x-large-2-linux-20200315202744:~# find -size 2k
./.ICEauthority
./.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
root@ecs-x-large-2-linux-20200315202744:~# find -size 10k
./.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
(3) -atime根据文件最近访问时间查找
root@ecs-x-large-2-linux-20200315202744:~# find / -name *.log -atime -7
/root/.vnc/ecs-x-large-2-linux-20200315202744:1.log
/usr/local/hostguard/log/daemon.log
/usr/local/hostguard/log/hostguard.log
...
注释:-atime -7表示最近7天访问过。
(4) -type根据类型查找
-type d只查找目录,-type f只查找文件。
root@ecs-x-large-2-linux-20200315202744:~# find -name file1
./file1
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -type d
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -type f
./file1
10.find命令操作查找结果
(1) -printf格式化打印
%p文件名,%u文件所有者、\n换行。
(2) -delete删除
(3) -exec 无提示操作
{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
(4) -ok 提示操作
与-exec参数作用相同,但会对每一个文件操作做确认提示。
root@ecs-x-large-2-linux-20200315202744:~# find -name file1
./file1
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -print
./file1
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -printf "%p - %u\n"
./file1 - root
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -exec chmod 600 {} \;
root@ecs-x-large-2-linux-20200315202744:~# ls -l file1
-rw------- 1 root root 0 Aug 4 21:04 file1
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -ok chmod 600 {} \;
< chmod ... ./file1 > ? y
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -ok chmod 600 {} \;
< chmod ... ./file1 > ? y
root@ecs-x-large-2-linux-20200315202744:~# find -name file1 -delete
root@ecs-x-large-2-linux-20200315202744:~# find -name file1
注释:find -name file1等价于find -name file1 -print
资料:find命令














网友评论