Linux基础手册
Linux简介#
Linux具有非常优良的血统,具有相当良好的多人多工环境。
与Windows比较,Win面向非专业用户,Linux面向专业人员;Windows的宗旨是让不会电脑的人也可以操作电脑,Linux的宗旨是最大化精简系统。因此Win在大众领域受欢迎,而Linux在专业和速度领域大放异彩。
Linux开源,易于移植。奇数版本为发展中版本,偶数版本为稳定版本。
操作界面#
Linux预设的情况下会提供六个Terminal来让使用者登入。
Linux有两种操作界面,纯文字界面和图形用户界面。
[Ctrl] + [Alt] + [F2] ~ [F6] :文字界面登入 tty2 ~ tty6 终端机;
[Ctrl] + [Alt] + [F1] :图形界面桌面。
图形界面只能有一个,如果没有tty1-tty6都没有开启图形界面,可以使用命令startx
开启图形界面。
命令行介绍#
[dmtsai@study ~]$
dmtsai是用户名,study是电脑名,~是home
语系支持#
1.显示当前支持的语系
# LANG 代表当前语系,LC_ 代表可支持的语系。
locale
LANG="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_ALL=
2.修改当前语系为英语
LANG=en_US.utf8
时间#
1.显示当前日期
date
2019年12月 1日 星期日 13时43分38秒 CST
2.格式化输出时间
date +%Y/%m/%d
2019/12/01
3.显示日历
cal
十二月 2019
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
4.显示整年日历
cal 2019
快捷键#
【TAB】按键:补全代码和命令;
【ctrl+c】:终止当前程序;
【ctrl+d】:相当于输入 exit
文件操作#
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 *
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属性之后:只能查看文件,不能修改(权限,内容等但是可以刷新时间)和删除;i属性就是将文件完全锁定,只能查看。
# 查看i属性
lsattr test.txt
# 增加i属性
chattr +i test.txt
文件搜索#
which#
查找 PATH 路径中的命令,并返回该命令位置。
which python
/usr/bin/python
whereis#
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。
whereis python
/usr/bin/python
find#
查找文件
# 在路径中查找文件
find 查找路径 -name 文件名
支持正则表达式。
locate#
ocate 可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的索引数据库,当寻找时就只需查询这个索引数据库而不必实际深入档案系统之中。locate 因为是只去检索索引数据库,所以在比 find 全盘检索要快很多。
locate 文件名
支持正则表达式。
文件查看#
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地址:文件名
文件解压#
zip#
zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。
# 压缩,将文件B压缩为A.zip
zip -r A.zip B
# 解压,解压A.zip
unzip A.zip
tar#
Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。
# 打包,将文件B打包为A.tar
tar -cvf A.tar B
# 解包,将A.tar解包到当前目录
tar -xvf A.tar
# 解包,将A.tar解包到指定目录
tar -xvf A.tar -C 指定目录
tar.gz#
这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。
# 压缩,将文件B压缩为A.tar.gz
tar -zcvf A.tar.gz B
# 解压,将A.tar.gz解压到当前目录
tar -zxvf A.tar.gz
# 解压,将A.tar.gz解压到指定目录
tar -zxvf A.tar.gz -C 指定目录
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 -f sudoers
修改内容如下:
# 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) |
apt#
apt是Debian系列的Linux操作系统的包管理工具,最近的项目中使用了stretch Linux,它也是使用apt来进行包管理的。
apt工作原理#
apt采用集中式的软件仓库机制,将各式各样的软件分门别类的放在软件仓库之中,从而进行有效的组织和管理。然后,将软件仓库放置在许多镜像服务器中,并保持基本一致。这样一来,所有的用户都能获取最新的软件安装包。对用户而言,这写镜像就是软件源。
由于用户所处网络的不同,无法随意的访问各个镜像站点。为了能让用户有选择的访问镜像站点,使用了软件源配置文件/etc/apt/sources.list
列出最合适访问的镜像站点的地址。
apt-get update#
在执行了apt-get update命令后,apt会自动联网寻找source.list.d文件中的list对应的Package/Sources/Release列表文件,如果存在则下载,存放在/var/lib/apt/lists目录中。
然后看一下容器中的/var/lib/apt/lists目录。然后apt-get install相应的包。
apt-get install#
apt-get install是下载命令,下载的软件都会存到/var/cache/apt/archives下。
apt还会检查Linux系统的包依赖关系,简化了用户安装和卸载包的过程。
要下载一个软件包时,大概需要4步:
1.扫描本地存放的软件包更新列表,找到最新版本的软件包。
2.进行软件包依赖关系检查,找到支持该软件的所有软件包。
3.从镜像站点中下载相关软件包(包含所依赖的软件包),并存放在/var/cache/apt/archive
4.解压软件包,并自动完成应用程序的安装和配置。
apt-get update#
正如前面说的,要想使用apt-get下载安装软件,需要去/etc/apt/source/list中的镜像源地址中去下载,那么我们仅仅是知道去哪里下载,镜像源地址中有什么软件,我们并不清楚,所以需要使用apt-get update来刷新软件的索引,从而确定我们要的软件在镜像站点中是否存在。
apt-get update会扫描每个镜像站点,并为该站点所具有的软件包资源建立索引文件,存放在本地的/var/lib/apt/list中。在使用apt-get命令执行安装或者更新操作时都会依赖这些索引文件,所以在每次更新或者安装前应该使用apt-get update命令来刷新索引,从而获取最新的软件资源。
apt-get upgrade#
将系统中所有的软件包一次性升级到最新版本。
提示:如果你和我一样,创建了一个docker镜像文件,建议不要使用apt-get upgrade命令,因为镜像其实就是系统的一个“快照”,这个镜像刚好满足了我们程序的需求,如果使用了apt-get upgrade命令后将会使得镜像变得很大,而且每次构建镜像时也会耗费更多时间。一个优秀的镜像的原则是,在满足程序需求的同时,体积越小越好。
另外,在下载完成后可以删除/var/lib/apt/lists/中索引文件,从而减小镜像的体积。
apt命令#
命令 | 作用 |
---|---|
sudo dpkg -i xxxx.deb | 安装.deb软件包 |
sudo apt-get -f install | 安装依赖 |
sudo apt-get install XXXXX | 安装软件库的软件 |
sudo apt-get remove XXXXX | 卸载软件库的软件 |
sudo apt-get purge XXXXX | 卸载并清除配置 |
sudo apt autoremove | 删除没用的依赖包 |
sudo apt-get update | 更新软件列表,在文件 /etc/apt/sources.list 中列出 |
sudo apt-get upgrade | 更新软件 |
sudo apt-get install -f | 修复安装依赖问题 |
dpkg -l | 查看所有安装的软件 |
apt search XXXXX | 搜索软件库中的软件 |
sudo apt 默认下载位置及安装位置#
下载的软件的存放位置:/var/cache/apt/archives
安装后软件的默认位置:/usr/share
可执行文件位置:/usr/bin
配置文件位置:/etc
lib文件位置:/usr/lib
参考链接:
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 主机为例 (先回到第零章计算机概论看看相关的硬件常识喔), 当你按下电源按键后电脑硬件会主动的读取 BIOS 或 UEFI BIOS 来载入硬件资讯及进行硬件系统的自我测试,之后系统会主动的去读取第一个可开机的装置 (由 BIOS 设定的) ,此时就可以读入开机管理程式了。
主机系统开始运作后,此时 Linux 才会呼叫外部程式开始准备软件执行的环境,并且实际的载入所有系统运作所需要的软件程式哩! 最后系统就会开始等待你的登入与操作啦!简单来说,系统开机的经过可以汇整成底下的流程的:
- 载入 BIOS 的硬件资讯与进行自我测试,并依据设定取得第一个可开机的装置;
- 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub2, spfdisk 等程式);
- 依据 boot loader 的设定载入 Kernel ,Kernel 会开始侦测硬件与载入驱动程式;
- 在硬件驱动成功后,Kernel 会主动呼叫 systemd 程式,并以 default.target 流程开机;
- systemd 执行 sysinit.target 初始化系统及 basic.target 准备作业系统;
- systemd 启动 multi-user.target 下的本机与服务器服务;
- systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 档案;
- systemd 执行 multi-user.target 下的 getty.target 及登入服务;
- systemd 执行 graphical 需要的服务
终端快捷键#
命令 | 作用 |
---|---|
ctrl+alt+t | 打开终端 |
Ctrl+a | 移动到当前行的开头 |
Ctrl+l | 刷新屏幕 |
Ctrl+c | 终止当前正在运行的程序。 |
ctrl+shift+c | 复制 |
ctrl+shift+v | 粘贴 |
ctrl+shift+t | 新建标签页 |
ctrl+shift+w | 关闭标签页 |
Ctrl+PageUp | 前一标签页 |
Ctrl+PageDown | 后一标签页 |
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 + 右方向键 - | 往后(右)移动一个单词 |
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行 |
配置自定义设置,打开 ~/.vimrc
,写入命令即可设置自定义配置。
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 等等,都是很重要的, 为了区别与自订变数的不同,环境变数通常以大写字元来表示呢!
1.显示变量
显示变量使用 echo $ 方式。
echo ${PATH}
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
2.设置变量
使用等号 =
myname=ala
变量设定规则:
1.变数与变数内容以一个等号‘=’来连结,如下所示:
‘myname=VBird’
2.等号两边不能直接接空白字元,如下所示为错误:
‘myname = VBird’或‘myname=VBird Tsai’
3.变数名称只能是英文字母与数字,但是开头字元不能是数字,如下为错误:
‘2myname=VBird’
4.变数内容若有空白字元可使用双引号‘"’或单引号‘'’将变数内容结合起来,
但双引号内的特殊字元如 等,可以保有原本的特性,如下所示:‘var="langis等,可以保有原本的特性,如下所示:‘var="langisLANG"’则‘echo var′可得‘langiszhTW.UTF−8′单引号内的特殊字元则仅为一般字元(纯文字),如下所示:var=′langisvar′可得‘langiszhTW.UTF−8′单引号内的特殊字元则仅为一般字元(纯文字),如下所示:var=′langisLANG'’则‘echo var′可得‘langisvar′可得‘langisLANG’
5.可用跳脱字元‘ \ ’将特殊符号(如 [Enter], ,空白字元,′等)变成一般字元,如:‘myname=VBird Tsai′6.在一串指令的执行中,还需要借由其他额外的指令所提供的资讯时,可以使用反单引号‘‘指令‘′或‘,空白字元,′等)变成一般字元,如:‘myname=VBird Tsai′6.在一串指令的执行中,还需要借由其他额外的指令所提供的资讯时,可以使用反单引号‘‘指令‘′或‘(指令)’。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设定:
‘version=$(uname -r)’再‘echo version′可得‘3.10.0−229.el7.x8664′7.若该变数为扩增变数内容时,则可用"version′可得‘3.10.0−229.el7.x8664′7.若该变数为扩增变数内容时,则可用"变数名称" 或 变数累加内容,如下所示:‘PATH="变数累加内容,如下所示:‘PATH="PATH":/home/bin’或‘PATH=${PATH}:/home/bin’
8.若该变数需要在其他子程序执行,则需要以 export 来使变数变成环境变数:
‘export PATH’
9.通常大写字元为系统预设变数,自行设定变数可以使用小写字元,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10.取消变数的方法为使用 unset :‘unset 变数名称’例如取消 myname 的设定:
‘unset myname’
环境变量与软链接#
绝对路径与相对路径
绝对路径:路径的写法一定由根目录 /
写起,例如: /usr/share/doc
相对路径:路径的写法不是由 /
写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd ../man 这就是相对路径的写法啦!相对路径意指 相对于目前工作目录的路径!
环境变量
我们知道查阅档案属性的指令ls完整档名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:为什么我可以在任何地方执行/bin/ls这个指令呢? ’为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变数 PATH 的帮助所致呀!
Linux是一个多用户的操作系统,每个用户登录系统,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,默认环境实际上是一组环境变量的定义。通过相应的系统环境变量,用户可以对自己的运行环境进行个性化设置。
通俗的讲,环境变量就是告诉电脑去哪几个目录寻找可执行程序.环境变量也是全局变量,即在任何界面输入命令都生效.
其中包括:变量HOME(明确定义了用户登录目录的路径名)、变量PATH(指明了用户输入命令后,shell查找与之相应程序时所搜索的目录列表)。
批注:如果一个程序需要引用多个环境变量,那么可以类似于java一样建立一个JAVA_HOME环境变量,后续其他环境变量基于这个环境变量修改。这样做的好处是以后更改时,只需要更改JAVA_HOME环境变量就可以了,非常方便。
显示环境变量
# 显示PATH环境变量
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
即计算机将在以上目录中寻找可执行程序,其中:
是分隔符.
# 显示HOME变量
echo $HOME
/Users/abc
# 显示所有环境变量
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 <== 上一次使用的指令的最后一个参数(或指令本身)
设置环境变量#
如新添加的环境变量为/home/xxx/test/bin
,则在~/.bashrc
中填写:
export PATH=$PATH:/home/xxx/test/bin
然后source
一下就可以使用了:
source ~/.bashrc
这样就将 /home/xxx/test/bin 也添加为了搜索目录,其中 是引用变量,是引用变量,PATH 即引用PATH变量, : 即分隔符.
整句的意思是:设置环境变量为,原PATH路径以及/home/xxx/test/bin
例程:设置java环境变量
export JAVA_HOME=/home/xxx/soft/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
source ~/.bashrc
测试:
$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
软链接
软链接即Win的快捷方式.因此只要把要搜做的目录做成软链接(快捷方式)放进统一管理的bin目录下即可.
语法:
ln [-sf] 来源档 目标档
-s :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标档 存在时,就主动的将目标档直接移除后再建立!
栗子:
将 /opt/cmake-3.12.2/bin/ 下的所有文件建立软链接放在 /usr/bin/ 目录下.这样计算机就可以在 /usr/bin/ 下搜索到 /opt/cmake-3.12.2/bin/* 了.
ln -sf /opt/cmake-3.12.2/bin/* /usr/bin/
输入 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 操作系统的版本。
source#
读入环境设定档的指令
由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的设定档,所以, 如果你将自己的偏好设定写入上述的档案后,通常都是得登出再登入后,该设定才会生效。那么,能不能直接读取设定档而不登出登入呢? 可以的!那就得要利用 source 这个指令了!
source ~/.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
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
进行测试。
参考链接:
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