Linux基础知识手册
Linux简介
Linux具有非常优良的血统,具有相当良好的多人多工环境。
与Windows比较,Win面向非专业用户,Linux面向专业人员;Windows的宗旨是让不会电脑的人也可以操作电脑,Linux的宗旨是最大化精简系统。因此Win在大众领域受欢迎,而Linux在专业和速度领域大放异彩。
Linux开源,易于移植。奇数版本为发展中版本,偶数版本为稳定版本。d
输出重定向
操作界面
Linux预设的情况下会提供六个Terminal来让使用者登入。
Linux有两种操作界面,纯文字界面和图形用户界面。
[Ctrl] + [Alt] + [F2] ~ [F6] :文字界面登入 tty2 ~ tty6 终端机;
[Ctrl] + [Alt] + [F1] :图形界面桌面。
图形界面只能有一个,如果没有tty1-tty6都没有开启图形界面,可以使用命令startx
开启图形界面。
命令行介绍
[dmtsai@study ~]$
dmtsai是用户名,study是电脑名,~是home
快捷键
【TAB】按键:
- 补全代码和命令;
- 连按两次tab键,会列举出所有相关项。
【ctrl+c】:终止当前程序;
【ctrl+d】:相当于输入 exit
查看内核版本
$ uname -r
5.4.0-58-generic
#第一项(5):当前内核主版本号;
#第二项(4):当前内核次版本号;
#第三项(0-58):0 表示为当前内核更新次数,58表示当前内核修补次数;
$ uname -a
Linux parallels-Parallels-Virtual-Platform 5.4.0-58-generic #64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
查看发行版本号
$ cat /etc/issue
Ubuntu 20.04.1 LTS \n \l
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
查看CPU个数及每个CPU内核数
$ cat /proc/cpuinfo | grep "cores"
cpu cores : 2
cpu cores : 2
设置时间日期
timedatectl [commamd]
选项与参数:
list-timezones :列出系统上所有支持的时区名称
set-timezone :设定时区位置
set-time :设定时间
set-ntp :设定网络校时系统
修改主机名
# 查看主机信息
hostnamectl
# 修改主机名
hostnamectl set-hostname 主机名
#查看主机名
cat /etc/hostname
辅助手册
# 查询指令
--help
# 详细操作手册
man page
# 以超链接形式组织的操作手册
info page
文件操作
LINUX下不同的文件类型有不同的颜色:
蓝色 表示目录;
蓝绿 色表示可执行文件,可执行的程序;
红色 表示压缩文件或包文件;
浅蓝色 表示链接文件;
灰色 表示其它文件;
ls 列出目录
# 显示当前目录
ls
# 显示所有文件
ls -a
# 显示所有文件及细节
ls -l
# 筛选文件,可用正则表达式
ls -d xxx*
# 按时间排序
ls -t
cd 切换目录
#切换到根目录
cd /
#切换到home
cd ~
#切换到上一级
cd ..
#切换到上一次目录
cd -
#切换到绝对路径
cd /目录1/目录2/目录3
#切换到相对路径
cd ../目录
pwd 显示当前目录
#显示当前路径
pwd
#显示出确实的路径,而非使用连结 (link) 路径
pwd —P
mkdir 创建目录
#创建文件夹
mkdir test
#创建多级目录
mkdir test1/test2/test3/test4
#建立权限为rwx--x--x的目录
mkdir -m 711 test2
rmdir 删除空的目录
#删除文件夹
rmkdir 目录
#连同上一级『空的』目录也一起删除
rmdir -p 目录1/目录2/目录3/目录4
cp 复制文件/目录
# 复制文件A到B
cp A B
# 强制复制,若目标存在,则移除后再复制
cp -f A B
# 若目标已存在,则询问
cp -i A B
# 连同档案的属性(权限、用户、时间)一起复制过去,而非使用预设属性
cp -p A B
# 递归复制,复制文档及其以内全部内容
cp -r A B
使用正则表达式
cp test*.* TEST/
rm 删除文件/目录
# 删除文档A
rm A
# 强制删除,不进行询问
rm -f A
# 删除前询问
rm -i A
# 递归删除,删除文档及其以内全部内容
rm -r A
# 直接删除且不询问
rm -rf A
# 删除所有文件
rm -rf *
# 反向删除,这里用到^反选,反引号``将结果作为前边命令的输入
rm -rf `ls | grep ^ "test"`
mv 移动/重命名
# 将A移动到B
mv A B
# 重命名,其中B应该是新文件名称
mv A B
# 覆盖移动
mv -f A B
# 询问移动
mv -i A B
文件权限
文件属主
Linux是多人多工系统,因此为了保护每个人的隐私,创建了健全的保护机制。
创建者:档案拥有者,即这个新建这个文档的人。
群组:作用是让非创建者拥有和创建者一样的权利。
文档权限:读写权和执行权。
以上权限可以用如下命令修改:
chown :改变档案拥有者
chgrp :改变档案所属群组
chmod :改变档案的权限, SUID, SGID, SBIT等等的特性
chown
chown username:username 文件名
chgrp
TODO:)
文件权限解析
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
-----------------------------------------------
12 3 4 5 6 7 8 9 10 11
属性1:代表这个文件是目录、文件或链接文件等等.
[ d ]是目录;[ - ]是文件;[ l ]是链接文档;[ b ]是装置文件里面的可供储存的接口设备(可随机存取装置);[ c ]是装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
属性2-4:用户权限,rwx分别为读、写和执行权.
属性2是创建者(拥有者),属性3是群组,属性4是其他用户的权限,-表示没有此权限
各权限的数字代表:
权限 | 数字代表 | 作用 |
---|---|---|
r | 4 | 读 |
w | 2 | 写 |
x | 1 | 执行 |
- | 0 | 无此权限 |
如:超级权限777代表所有人都具有读写执行权
chmod
chmod用于设定文件属性,有两种方式:一种是数字方式,另一种是字母方式.
1.数字方式
# 给予文件夹内所有用户(root用户,管理员,普通用户)所有权限。
chmod 777 -R 文件夹
2.字母方式
# 赋予文件A执行权.
chmod +x A
i属性
设置了i属性之后:只能查看文件,不能修改(权限,内容等但是可以刷新时间)和删除,包括root也无权限。
# 查看i属性
lsattr test.txt
# 增加i属性
chattr +i test.txt
a属性
设置a属性后,该文件就只能增加内容不能修改和删除。
chattr +a 文件名
文件搜索
which
查找 PATH 路径中的 可执行文件,并返回该命令位置。
which python
# /usr/bin/python
whereis
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。
该指令会在特定目录中查找符合条件的文件,一般文件的定位需使用locate命令。如果想看whereis搜索了哪些目录,可以使用whereis -l
查看。
whereis python
# /usr/bin/python
locate/updatedb
locate搜索时,只要文件名中包含关键字,就都会列举出来。
locate使用的是由『已建立的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,因此搜索起来很快。
但是由于该数据库是定期建立一次,因此有时可能在数据库建立数据之前去搜索数据的话,会出现搜索不到的情况,这时就需要手动更新数据库。
locate 文件名
#手动更新数据库
updatedb
支持正则表达式。
find
查找文件
# 在路径中查找文件
find 查找路径 -name 文件名
# 在/var目录下查找passwd这个文件
find /var -name passwd
# 在/var目录下查找含有passwd关键字的文件
find /var -name "*passwd*"
支持正则表达式。
文件查看
cat
# 正序显示文件内容
cat 文件名
# 显示行号
cat -b 文件名
# 显示标记符
cat -v 文件名
head
# 显示文件前面几行,默认的情况下,显示前 10 行!
head 文件名
# 显示文件前20行
head -n 20 文件名
tail
# 显示文件前面几行,默认的情况下,显示前 10 行!
tail 文件名
# 显示文件后20行
tail -n 20 文件名
文件传输
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
# 传输远程文件到本地
scp 用户名@ip地址:文件名 本地目录
# 递归传输本地文件到远程
scp 本地文件 用户名@ip地址:文件名
硬链接和软链接
硬链接和软链接又叫实体链接和符号链接。
硬链接是别名,是透过文件系统的 inode 连结来产生新档名,而不是产生新文件!即同一数据,但是有两个名字。需要注意的是,硬链接只能在当前目录下进行。
软链接是Win下的快捷方式,其内容记录的是真实文件的地址。
# 硬链接
ln /etc/crontab .
# 软链接
ln -s /etc/crontab .
文件解压
tar.gz
这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。
# 压缩,将文件B压缩为A.tar.gz
tar -zcvf 压缩文件名.tar.gz 被压缩文件名
# 解压,将A.tar.gz解压到当前目录
tar -zxvf A.tar.gz
# 解压,将A.tar.gz解压到指定目录
# tar -zxvf A.tar.gz -C 指定目录
zip
zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。
# 压缩,将文件B压缩为A.zip
zip -r A.zip B
# 解压,解压A.zip
unzip A.zip
rar
# 解压,将A.rar解压到指定目录
unrar x A.rar 指定目录
用户和组
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
创建新用户
进入root
su
创建名为 db 的新用户:
adduser db
正在添加用户"db"…
正在添加新组"db" (1006)…
正在添加新用户"db" (1006) 到组"db"…
创建主目录"/home/db"…
正在从"/etc/skel"复制文件…
输入新的 UNIX 口令:
重新输入新的 UNIX 口令:
两次输入db的初始密码,出现的信息如下
passwd: password updated successfully
Changing the user information for db
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Full Name []:
一路回车,然后y,
到此,用户添加成功。
添加root权限:
使用 visudo 打开 sudoers
sudo visudo
修改内容如下:
# User privilege specification
root ALL=(ALL) ALL
db ALL=(ALL) ALL
保存退出,db用户就拥有了root权限。
:wq 退出,
或者
ctrl+o,回车,ctrl+x退出
删除用户
删除用户
userdel 用户名
把用户的主目录一起删除。
userdel -r 用户名
修改用户
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
用法:
usermod 参数 用户名
参数:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
指定新账号的登录名。
修改密码
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
如果默认用户名,则修改当前用户的口令。
# 修改密码
passwd
添加组
groupadd 参数 用户组
参数
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
删除组
groupdel 用户组
修改组
groupmod 参数 用户组
参数
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
切换组
newgrp 组名
系统目录
├── bin 存放普通用户可以执行的命令.
├── boot 启动项信息.
├── dev 外部设备信息.
├── etc 系统配置信息.
├── home 普通用户的主目录.
├── lib 动态库目录.
├── media U盘、光驱等识别后,会挂载到这个目录下。
├── mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在`/mnt`/上,然后进入该目录就可以查看光驱里的内容了。
├── opt 软件安装目录.
├── proc 虚拟目录,可以通过直接访问这个目录来获取系统信息。
├── root root用户主目录。
├── run 是一个临时文件系统,存储系统启动以来的信息。
├── sbin 存放root用户可以执行的命令.
├── srv 该目录存放一些服务启动之后需要提取的数据。
├── sys 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:`针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
├── tmp 这个目录是用来存放一些临时文件的。
├── usr Unix Software Resource,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
├── /usr/bin 系统用户使用的应用程序。
├── /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序。
├── /usr/src 内核源代码默认的放置目录。
├── var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
bin:
bin为binary的简写,主要放置系统的必备执行文件,例如:
cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
/usr/bin:
主要放置应用程序工具的必备执行文件,例如:
c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等。
/sbin:
主要放置系统管理的必备程序,例如:
cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。
/usr/sbin:
主要放置网路管理的必备程序,例如:
dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等.
进程管理
在 Linux 系统当中:‘触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设定。’ 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!
查看进程
# 显示所有进程
ps -e
# 筛选进程
ps -e | grep 关键字
杀死进程
kill -signal PID
其中,PID是进程号,signal有:
1 SIGHUP 启动被终止的程序,可让该 PID 重新读取自己的设定档,类似重新启动
2 SIGINT 相当于用键盘输入 [ctrl]-c 来中断一个程序的进行
9 SIGKILL 代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有‘半产品’产生,类似 vim会有 .filename.swp 保留下来。
15 SIGTERM 以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。
19 SIGSTOP 相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行
杀死进程1234
kill -9 1234
gcc编译流程
https://www.cnblogs.com/chendeqiang/p/12861616.html
软件管理
- dpkg:
这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。 - RPM:
这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。
代表 | 软件管理机制 | 使用指令 | 线上升级机制(指令) |
---|---|---|---|
Red Hat/Fedora | RPM | rpm, rpmbuild | YUM (yum) |
Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
dpkg命令
命令 | 作用 |
---|---|
dpkg -l | 查看所有被安装的包 |
dpkg -L 包名 | 查看包的安装位置信息 |
apt命令
命令 | 作用 |
---|---|
sudo dpkg -i xxxx.deb | 安装.deb软件包 |
sudo apt-get install XXXXX | 安装软件库的软件 |
sudo apt-get install -f | 修复安装依赖问题 |
sudo apt-get remove XXXXX | 卸载软件库的软件 |
sudo apt-get purge XXXXX | 卸载并清除配置 |
sudo apt autoremove | 删除没用的依赖包 |
sudo vim /etc/apt/sources.list | 修改软件库 |
sudo apt-get update | 更新软件库列表,在文件 /etc/apt/sources.list 中列出 |
sudo apt-get upgrade | 更新所有软件 |
apt search 关键字 | 搜索可用软件包 |
apt-cache show 包名 | 查看软件包信息 |
apt list --installed | 列出所有已安装的软件 |
apt-get source | 获取源码而非编译好的二进制 |
apt-get clean | 清除缓存 |
add-apt-repository | 添加仓库 |
apt默认下载位置及安装位置
下载的软件的存放位置:/var/cache/apt/archives
安装后软件的默认位置:/usr/share
可执行文件位置:/usr/bin
配置文件位置:/etc
lib文件位置:/usr/lib
dpkg和apt区别
apt是会解决和安装模块的依赖问题,并会咨询软件仓库,是在线安装
dpkg只能安装本地的deb文件,不会关心ubuntu软件仓库的软件,不会解决模块的依赖关系
dpkg是本地包安装,apt是在线包安装
参考链接:
https://www.jianshu.com/p/c6936efe5b58
磁盘管理
# 以阅读形式显示所有磁盘信息
df -hl
文件系统 容量 已用 可用 已用% 挂载点
/dev/root 30G 25G 3.3G 89% /
devtmpfs 434M 0 434M 0% /dev
tmpfs 438M 0 438M 0% /dev/shm
tmpfs 438M 17M 421M 4% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 438M 0 438M 0% /sys/fs/cgroup
/dev/mmcblk0p1 43M 23M 21M 52% /boot
tmpfs 88M 4.0K 88M 1% /run/user/1000
以上面的输出为例,表示的意思为:
HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被挂载到根分区目录上(/)。
在 Linux 底下如果 df 没有加任何选项,那么预设会将系统内所有的
(不含特殊内存内的档案系统与 swap) 都以 1 Kbytes 的容量来列出来!
关机命令
由于Linux是多人多工操作系统,所以关机还是需要注意一些问题。
命令 | 作用 |
---|---|
sync | 将数据由内存同步到硬盘中。 |
shutdown | 关机指令,1分钟后关机。 |
shutdown -h now | 立刻关机 |
shutdown –h | 10分钟后关机,并且会显示在登陆用户的当前屏幕中。 |
shutdown –h now | 立马关机 |
shutdown –h 20:25 | 系统会在今天20:25关机 |
shutdown –h +10 | 十分钟后关机 |
shutdown –r now | 系统立马重启 |
shutdown –r +10 | 系统十分钟后重启 |
reboot | 重启,等同于 shutdown –r now |
halt | 关闭系统,等同于shutdown –h now 和 poweroff |
系统资源
查看cpu使用率 top
top
查看内存使用率 free
free -m
total used free shared buff/cache available
Mem: 874M 178M 301M 11M 395M 632M
Low: 874M 573M 301M
High: 0B 0B 0B
Swap: 99M 0B 99M
total:总内存
used:已使用的内存(包含 shared、buffers、cached)
free:未分配的内存
shared:共享内存
buffers:块设备的读写缓冲区
cached:文件系统的cache
查看系统信息 uname
uname -a
Linux study.centos.vbird 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015
x86_64 x86_64 x86_64 GNU/Linux
系统,主机名,版本号,时间,架构
查看系统启动时间 uptime
uptime
02:35:27 up 7:48, 3 users, load average: 0.00, 0.01, 0.05
开机流程
开机自启脚本
过去用过 Linux 的朋友大概都知道,当系统完成开机后,还想要让系统额外执行某些程序的话,可以将该程序指令或脚本的绝对路径名称写入到 /etc/rc.d/rc.local
这个文件去!新的 systemd 机制中,它建议直接写一个 systemd 的启动脚本配置文件到 /etc/systemd/system
底下,然后使用systemctl enable 的方式来设定启用它,而不要直接使用 rc.local 这个文件啦!
透过这个 chmod a+x /etc/rc.d/rc.local
的步骤,你的许多脚本就可以放在 /etc/rc.d/rc.local
这个文件内,系统在每次开机都会去执行这文件内的指令喔!
开机菜单
/boot/grub2/grub.cfg
menuentry 'CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64' --class rhel fedora\
...
修改开机配置
/etc/default/grub
[root@study ~]# cat /etc/default/grub
GRUB_TIMEOUT=5 # 指定预设倒数读秒的秒数,0不等待,-1一直等待
GRUB_DEFAULT=saved # 指定预设由哪一个选单来开机,预设开机选单之意,使用的设定值包括有『 saved, 数字, title 名, ID 名』等等,通过开机选单中的ID设置最好。
GRUB_DISABLE_SUBMENU=true # 是否要隐藏次选单,通常是藏起来的好!
GRUB_TERMINAL_OUTPUT="console" # 指定数据输出的终端机格式,默认是透过文字终端机
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet" # 就是在 menuentry 括号内的 linux16 项目后续的核心参数
GRUB_DISABLE_RECOVERY="true" # 取消救援选单的制作
重建grub
grub2-mkconfig -o /boot/grub/grub.cfg
# grub2-install /dev/vda
vim命令
vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
一般流程:
vi runoob.txt
,打开文档
进入一般模式.
按下 i 进入输入模式(也称为编辑模式),开始编辑文字,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入。
按下 ESC 按钮回到一般模式
在一般模式中按下:wq
储存后离开 vi
命令 | 作用 |
---|---|
:q | 是离开而不保存 |
:wq | 是保存并离开 |
:q! | 不保存退出 |
:set nu | 显示行号 |
vim . | 使用vim打开当前目录 |
:%d | 全部删除 |
:u | 撤销 |
gg | 光标回到首行 |
n回车 | 光标跳到n行 |
Ctrl+f | 向下翻一页 |
Ctrl+b | 向上翻一页 |
0 | 移动到这一行最前面的字符 |
$ | 移动到这一行最后面的字符 |
G | 移动到这个档案的最后一行 |
gg | 移动到这个档案的第一行 |
ggVG | 全选 |
/word |
向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! |
:1,$s/word1/word2/g 或 :%s/word1/word2/g |
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 ! |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc |
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代! |
x | 删除当前字符 |
yy | 复制当前行 |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行 |
dd | 删除当前行 |
ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 |
u | 复原前一个动作。 |
配置自定义设置,打开 /etc/vim/vimrc
,写入命令即可设置自定义配置,如:
#设置tab键为4格
set tablestop=4
块选择
在一般模式下,按v或者ctrl+v进行块选择,
y 复制
d 删除
p 粘贴
在所选行的行首添加字符
- ctrl+v 按方向键选中多行
- shift+i 插入字符
- ESC 完成所有行字符插入
多文件编辑
vim FileA FileB
使用:file
来选择需要编辑的文件。
多窗口
:sp FileName
切换窗口:
Ctrl+W+上下左右
关闭窗口:
quit
only
Bash Shell
shell简介
shell用于用户和操作系统内核进行交互。
由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为‘ Bourne Again SHell (简称 bash) ’,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
1.查看可用shell
gedit /etc/shells
/bin/sh (已经被 /bin/bash 所取代)
/bin/bash (就是 Linux 预设的 shell)
/bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已经被 /bin/tcsh 所取代)
2.查看预设的shell
gedit /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
如上所示,在每一行的最后一个资料,就是你登入后可以取得的预设的 shell 啦!那你也会看到, root 是 /bin/bash ,不过,系统账号 bin 与 daemon 等等,就使用那个怪怪的 /sbin/nologin 啰~
Bash Shell简介
Bash Shell是Linux预设的shell,优点有:
历史命令查找;Tab补全功能;alias别名;工作控制、前景背景控制;程式化脚本;正则表达式等。
变量
在进入 shell 之前,也正如同上面提到的,由于系统需要一些变数来提供他资料的存取 (或者是一些环境的设定参数值, 例如是否要显示彩色等等的) ,所以就有一些所谓的‘环境变数’ 需要来读入系统中了!这些环境变数例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的, 为了区别与自订变数的不同,环境变数通常以大写字元来表示呢!
显示变量
显示变量使用 echo $ 方式。
echo ${PATH}
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
设置变量
# 设置变量
myname=ala
# 取消变量
unset myname
bash脚本的内置变量
$0 : 本文件名
$1 : 第一个参数
$2 : 第二个参数
$3: 第三个参数
$4 : 第四个参数
$# : 参数个数
$@ : “$1”“$2”“$3”“$4”
$* : “$1 $2 $3 $4”
环境变量
显示环境变量
# 显示PATH环境变量
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
其中:
是分隔符.
# 显示所有环境变量
export
HOSTNAME=study.centos.vbird <== 这部主机的主机名称
TERM=xterm <== 这个终端机使用的环境是什么类型
SHELL=/bin/bash <== 目前这个环境下,使用的 Shell 是哪一个程式?
HISTSIZE=1000 <== ‘记录指令的笔数’在 CentOS 预设可记录 1000 笔
OLDPWD=/home/dmtsai <== 上一个工作目录的所在
LC_ALL=en_US.utf8 <== 由于语系的关系,鸟哥偷偷丢上来的一个设定
USER=dmtsai <== 使用者的名称啊!
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:
or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
*.tar=01... <== 一些颜色显示
MAIL=/var/spool/mail/dmtsai <== 这个使用者所取用的 mailbox 位置
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
PWD=/home/dmtsai <== 目前使用者所在的工作目录 (利用 pwd 取出!)
LANG=zh_TW.UTF-8 <== 这个与语系有关,底下会再介绍!
HOME=/home/dmtsai <== 这个使用者的家目录啊!
LOGNAME=dmtsai <== 登入者用来登入的账号名称
_=/usr/bin/env <== 上一次使用的指令的最后一个参数(或指令本身)
设置环境变量
export可以将普通变量变为环境变量,但只能在当前bash中生效,为了每次都会生效,可以写在~/.bashrc
中:
CDQ=hellocdq!
export CDQ
输入 read
read -p "Please keyin your name: " -t 30 named
Please keyin your name:
输出 echo
echo "hello"
别名 alias
alias lm='ls -al | more'
bash欢迎信息
还记得在终端机界面 (tty1 ~ tty6) 登入的时候,会有几行提示的字串吗?那就是进站画面啊! 那个字串写在哪里啊?呵呵!在 /etc/issue 里面啊!
cat /etc/issue
\S
Kernel \r on an \m
issue 内的各代码意义:
\d 本地端时间的日期;
\l 显示第几个终端机界面;
\m 显示硬件的等级 (i386/i486/i586/i686...);
\n 显示主机的网络名称;
\O 显示 domain name;
\r 操作系统的版本 (相当于 uname -r)
\t 显示本地端时间的时间;
\S 操作系统的名称;
\v 操作系统的版本。
bash执行方式
如果直接执行bash脚本,那其实是在子bash中执行的程序;
如果使用source执行脚本,那么其实是将脚本中内容导入到该bash中,就不会开子bash。
bash的环境配置文件
login shell即首次登录需要输入密码那次的shell;
nologin shell即输入过密码,下次不需要再输入密码的shell。
login shell
/etc/profile
即每个使用者登入取得 bash 时一定会读取的配置文件!
/etc/profile.d/*.sh
其实这是个目录内的众多文件!只要在 /etc/profile.d/ 这个目录内且扩展名为 .sh ,另外,使用者能够具有 r 的权限, 那么该文件就会被 /etc/profile 呼叫进来。在 CentOS 7.x 中,这个目录底下的文件规范了 bash 操作接口的颜色、 语系、ll 与 ls 指令的命令别名、vi 的命令别名、which 的命令别名等等。如果你需要帮所有使用者设定一些共享的命令别名时, 可以在这个目录底下自行建立扩展名为 .sh 的文件,并将所需要的数据写入即可喔!
/etc/locale.conf
这个文件是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 预设使用何种语系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL 这些个变量的设定啦!
/usr/share/bash-completion/completions/*
记得我们上头谈过 [tab] 的妙用吧?除了命令补齐、档名补齐之外,还可以进行指令的选项/参数补齐功能!那就是从这个目录里面找到相对应的指令来处理的! 其实这个目录底下的内容是由/etc/profile.d/bash_completion.sh
这个文件载入的啦!
反正你只要记得,bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile
,但是/etc/profile
还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善啦!
~/.bash_profile
bash 在读完了整体环境设定的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:
~/.bash_profile
~/.bash_login
~/.profile
其实 bash 的 login shell 设定只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。
non-login shell
~/.bashrc
source
source的作用是读入配置文件的内容到目前的shell环境中来。以下两种方式是相同的:
source ~/.bashrc
. ~/.bashrc
管道命令 pipe
管线命令使用的是‘ | ’这个界定符号! 另外,管线命令与‘连续下达命令’是不一样的呦!
假设我们想要知道 /etc/ 底下有多少档案,那么可以利用 ls /etc 来查阅,不过, 因为 /etc 底下的档案太多,导致一口气就将屏幕塞满了~不知道前面输出的内容是啥?此时,我们可以透过 less 指令的协助,利用:
ls -al /etc | less
如此一来,使用 ls 指令输出后的内容,就能够被 less 读取,并且利用 less 的功能,我们就能够前后翻动相关的资讯了!
筛选命令 grep
就是将一段资料经过分析后,取出我们所想要的。或者是经由分析关键字,取得我们所想要的那一行!
# 在文件中查找关键字
grep 关键字 文件
其他管道命令
cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs
输出重定向
标准输出重定向
# 覆盖源文件
echo "hello" > ~/test.txt
# 续写源文件
echo "hello" >> ~/test.txt
标准错误输出重定向
echo "hello" 2> ~/test.txt
echo "hello" 2>> ~/test.txt
联合输出重定向
# 标准输出和错误输出写到相同文件
echo "hello" 1> ~/richedit.log 2>&1
bash快捷键
命令 | 作用 |
---|---|
ctrl+alt+t | 打开终端 |
Ctrl+a | 移动到当前行的开头 |
Ctrl+l | 刷新屏幕 |
Ctrl+c | 终止当前正在运行的程序。 |
ctrl+shift+c | 复制 |
ctrl+shift+v | 粘贴 |
ctrl+shift+t | 新建标签页 |
ctrl+shift+w | 关闭标签页 |
Ctrl+PageUp/Ctrl+f | 前一标签页 |
Ctrl+PageDown/Ctrl+b | 后一标签页 |
F11 | 全屏 |
ctrl + l | 清屏 |
ctrl + c | 终止命令 |
ctrl + d | 退出 shell |
ctrl + z | 将当前进程置于后台,fg 还原 |
ctrl + r | 从命令历史中找 |
ctrl + u | 清除光标到行首的字符(还有剪切功能) |
ctrl + w | 清除光标之前一个单词 (还有剪切功能) |
ctrl + k | 清除光标到行尾的字符(还有剪切功能) |
ctrl + y | 粘贴 Ctrl+u 或 Ctrl+k 剪切的内容 |
ctrl + t | 交换光标前两个字符 |
Alt + d | 由光标位置开始,往行尾删删除单词 |
Alt + . | 使用上一条命令的最后一个参数 |
Alt – b || ctrl + 左方向键 | 往回(左)移动一个单词 |
Alt – f || ctrl + 右方向键 - | 往后(右)移动一个单词 |
ip配置
Ubuntu16.04 ip配置
sudo gedit /etc/network/interfaces
auto eth0 #设置自动启动eth0接口
iface eth0 inet static #配置静态IP
address 192.168.11.88 #IP地址
netmask 255.255.255.0 #子网掩码
gateway 192.168.11.1 #默认网关
重启网络:
sudo /etc/init.d/networking restart
Ubuntu 18.04 ip配置
Ubuntu 18.04的网络管理程序改为netplan了,因此配置方式也需要改喽!
查看ip
ifconfig -a
设置静态ip
sudo gedit /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp0s3:
addresses: [192.168.199.101/24, ]
dhcp4: no
dhcp6: no
gateway4: 192.168.199.1
nameservers:
addresses: [8.8.8.8, 9.9.9.9]
version: 2
其中,把dhcp4/dhcp6都设为no予以关闭,设上自己的ip地址、网关和域名服务器。
应用网络:
netplan apply
代理配置
bash代理
sudo gedit ~/.bashrc
export http_proxy=https://127.0.0.1:8000
export https_proxy=https://127.0.0.1:8000
# export http_proxy=https://邮箱用户名:邮箱密码@proxy.xxx.com:8080/
source ~/.bashrc
apt代理
sudo gedit /etc/apt/apt.conf
Acquire::https::proxy "https://127.0.0.1:8000/";
Acquire::https::proxy "https://127.0.0.1:8000/";
# Acquire::http::proxy "https://邮箱用户名:邮箱密码@proxy.xxx.com:8080/";
Shell脚本
www.purethought.cn/40027.html
Ubuntu开机自动登录
右上角 -> System Settings... -> User Accounts -> Automatic Login -> ON
网线直连
将两台电脑的静态ip设置为相同频段即可。如:
A电脑
ip地址:192.168.0.2
子关掩码:255.255.255.0
默认网关:192.168.0.1
B电脑
ip地址:192.168.0.3
子关掩码:255.255.255.0
默认网关:192.168.0.1
然后可以使用ping
进行测试。
磁盘与分区
磁盘的物理结构
磁盘接口模式有SATA,USB,SCSI等。
磁盘为盘状,其上由扇区和磁道组成,扇区通过被磁化或未被磁化来记录1和0,每一圈的磁道和扇区组成磁柱,磁柱是分区槽的最小单位。
为什么要分区呢?
- 数据分离,格式化就只格式化某个分区的数据;
- 系统效能。
分区表分为MSDOS(MBR)和GPT两种格式。
由于MBR的历史原因,只在磁盘的第一扇区做开机管理程序,这个扇区通常是 512bytes 的大小(旧的磁盘扇区都是 512bytes 喔!),所以说,第一个扇区 512bytes 会有这两个数据:
- 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
- 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes。
由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。64/4=16bytes,16/2=8bytes,所以每个磁柱号占用8字节?
为了存储效率,通常以一组扇区的大小为一个block,作为数据记录的最小单位,因为记录数据的最小单位太大和太小都不合适,所以通常block为4k(1k,2k,4k)。
MSDOS (MBR) 分区表格式与限制
由于第一扇区会记录四笔分区信息,因此逻辑分区是从/dev/sda5
开始的。
MBR 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义啰:
- 主要分区与延伸分区最多可以有四笔(硬盘的限制)
- 延伸分区最多只能有一个(操作系统的限制)
- 逻辑分区是由延伸分区持续切割出来的分区槽;
- 能够被格式化后,作为数据存取的分区槽为主要分区与逻辑分区。延伸分区无法格式化;
- 逻辑分区的数量依操作系统而不同,在 Linux 系统中 SATA 硬盘已经可以突破 63 个以上的分区限制;
GUID partition table, GPT 磁盘分区表
与 MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!
- LBA0 (MBR 相容区块)
与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个兼容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息,进一步保护了此磁盘喔!
-LBA1 (GPT 表头纪录)
这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以透过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作! - LBA2-33 (实际纪录分区信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512bytes,因此每笔纪录用到 128 bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对于单一分区槽来说, 他的最大容量限制就会在『 264 * 512bytes = 263 * 1Kbytes = 2^33TB = 8 ZB 』,要注意 1ZB = 30TB 啦! 你说有没有够大了?
查看磁盘容量
df会去搜索超级块区中所记录的磁盘信息。
df -ah
查看当前目录容量
du
查看硬盘信息
parted
sudo parted /dev/sda print
查看硬盘序列号
lsblk --nodeps -no serial /dev/nvme0n1
挂载iso
mkdir /mnt/cdq
mount abc.iso /mnt/cdq -o loop
cd /mnt/cdq
卸载iso
cd
umount /mnt/cdq
结束
参考链接:
https://www.runoob.com/linux/linux-shell.html
https://www.cnblogs.com/nyist-xsk/p/7929859.html
https://www.cnblogs.com/sunyllove/p/9772053.html
https://linux.vbird.org/linux_basic/centos7/0220filemanager.php
https://blog.csdn.net/politefish/article/details/4729551