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#

Copy
chown username:username 文件名

chgrp#

TODO:)

文件权限解析#

Copy
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.数字方式

Copy
# 给予文件夹内所有用户(root用户,管理员,普通用户)所有权限。
chmod 777 -R 文件夹

2.字母方式

Copy
# 赋予文件A执行权.
chmod +x A

i属性#

设置了i属性之后:只能查看文件,不能修改(权限,内容等但是可以刷新时间)和删除;i属性就是将文件完全锁定,只能查看。

Copy
# 查看i属性
lsattr test.txt
# 增加i属性
chattr +i test.txt

文件搜索#

which#

查找 PATH 路径中的命令,并返回该命令位置。

Copy
which python
Copy
/usr/bin/python

whereis#

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

Copy
whereis python
Copy
/usr/bin/python

find#

查找文件

Copy
# 在路径中查找文件
find 查找路径 -name 文件名

支持正则表达式。

locate#

ocate 可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的索引数据库,当寻找时就只需查询这个索引数据库而不必实际深入档案系统之中。locate 因为是只去检索索引数据库,所以在比 find 全盘检索要快很多。

Copy
locate 文件名

支持正则表达式。

文件查看#

cat#

Copy
# 正序显示文件内容
cat 文件名
# 显示行号
cat -b 文件名
# 显示标记符
cat -v 文件名

head#

Copy
# 显示文件前面几行,默认的情况下,显示前 10 行!
head 文件名
# 显示文件前20行
head -n 20 文件名

tail#

Copy
# 显示文件前面几行,默认的情况下,显示前 10 行!
tail 文件名
# 显示文件后20行
tail -n 20 文件名

文件传输#

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

Copy
# 传输远程文件到本地
scp 用户名@ip地址:文件名 本地目录
# 递归传输本地文件到远程
scp 本地文件  用户名@ip地址:文件名

文件解压#

zip#

zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。

Copy
# 压缩,将文件B压缩为A.zip
zip -r A.zip B
# 解压,解压A.zip
unzip A.zip

tar#

Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。

Copy
# 打包,将文件B打包为A.tar
tar -cvf A.tar B
# 解包,将A.tar解包到当前目录
tar -xvf A.tar
# 解包,将A.tar解包到指定目录
tar -xvf A.tar -C 指定目录

tar.gz#

这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。

Copy
# 压缩,将文件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#

Copy
# 解压,将A.rar解压到指定目录
unrar x A.rar 指定目录

用户和组#

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

创建新用户#

进入root

Copy
su

创建名为 db 的新用户:

Copy
adduser db
Copy
正在添加用户"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

Copy
sudo visudo -f sudoers

修改内容如下:

Copy
# User privilege specification
root ALL=(ALL) ALL
db ALL=(ALL) ALL

保存退出,db用户就拥有了root权限。
:wq 退出,
或者
ctrl+o,回车,ctrl+x退出

删除用户#

删除用户

Copy
userdel 用户名

把用户的主目录一起删除。

Copy
userdel -r 用户名

修改用户#

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
用法:

Copy
usermod 参数 用户名
Copy
参数:
    -c comment 指定一段注释性描述。
    -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    -g 用户组 指定用户所属的用户组。
    -G 用户组,用户组 指定用户所属的附加组。
    -s Shell文件 指定用户的登录Shell。
    -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
    指定新账号的登录名。

修改密码#

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
如果默认用户名,则修改当前用户的口令。

Copy
# 修改密码
passwd

添加组#

Copy
groupadd 参数 用户组

参数

Copy
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

删除组#

Copy
groupdel 用户组

修改组#

Copy
groupmod 参数 用户组

参数

Copy
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字

切换组#

Copy
newgrp 组名

系统目录#

Copy
├── 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 的权限有关了!

查看进程#

Copy
# 显示所有进程
ps -e
# 筛选进程
ps -e | grep 关键字

杀死进程#

Copy
kill -signal PID

其中,PID是进程号,signal有:

Copy
1	SIGHUP	启动被终止的程序,可让该 PID 重新读取自己的设定档,类似重新启动
2	SIGINT	相当于用键盘输入 [ctrl]-c 来中断一个程序的进行
9	SIGKILL	代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有‘半产品’产生,类似 vim会有 .filename.swp 保留下来。
15	SIGTERM	以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。
19	SIGSTOP	相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行

杀死进程1234

Copy
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

磁盘管理#

Copy
# 以阅读形式显示所有磁盘信息
df -hl
Copy
文件系统        容量  已用  可用 已用% 挂载点
/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#

Copy
top

查看内存使用率 free#

Copy
free -m
Copy
              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#

Copy
uname -a
Copy
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#

Copy
uptime
Copy
02:35:27 up  7:48,  3 users,  load average: 0.00, 0.01, 0.05

开机流程#

假设以个人电脑架设的 Linux 主机为例 (先回到第零章计算机概论看看相关的硬件常识喔), 当你按下电源按键后电脑硬件会主动的读取 BIOS 或 UEFI BIOS 来载入硬件资讯及进行硬件系统的自我测试,之后系统会主动的去读取第一个可开机的装置 (由 BIOS 设定的) ,此时就可以读入开机管理程式了。

主机系统开始运作后,此时 Linux 才会呼叫外部程式开始准备软件执行的环境,并且实际的载入所有系统运作所需要的软件程式哩! 最后系统就会开始等待你的登入与操作啦!简单来说,系统开机的经过可以汇整成底下的流程的:

  1. 载入 BIOS 的硬件资讯与进行自我测试,并依据设定取得第一个可开机的装置;
  2. 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub2, spfdisk 等程式);
  3. 依据 boot loader 的设定载入 Kernel ,Kernel 会开始侦测硬件与载入驱动程式;
  4. 在硬件驱动成功后,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,写入命令即可设置自定义配置。

vim命令

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

Copy
gedit /etc/shells
Copy
/bin/sh (已经被 /bin/bash 所取代)
/bin/bash (就是 Linux 预设的 shell)
/bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已经被 /bin/tcsh 所取代)

2.查看预设的shell

Copy
gedit /etc/passwd
Copy
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 $ 方式。

Copy
echo ${PATH}
echo $PATH
Copy
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin

2.设置变量
使用等号 =

Copy
myname=ala

变量设定规则:
1.变数与变数内容以一个等号‘=’来连结,如下所示:
‘myname=VBird’
2.等号两边不能直接接空白字元,如下所示为错误:
‘myname = VBird’或‘myname=VBird Tsai’
3.变数名称只能是英文字母与数字,但是开头字元不能是数字,如下为错误:
‘2myname=VBird’
4.变数内容若有空白字元可使用双引号‘"’或单引号‘'’将变数内容结合起来,
但双引号内的特殊字元如 var="langis等,可以保有原本的特性,如下所示:‘var="langisLANG"’则‘echo varlangiszhTW.UTF8()var=langisvar′可得‘langiszhTW.UTF−8′单引号内的特殊字元则仅为一般字元(纯文字),如下所示:var=′langisLANG'’则‘echo varlangisvar′可得‘langisLANG’
5.可用跳脱字元‘ ’将特殊符号(如 [Enter], ,,)myname=VBird Tsai6.使,空白字元,′等)变成一般字元,如:‘myname=VBird Tsai′6.在一串指令的执行中,还需要借由其他额外的指令所提供的资讯时,可以使用反单引号‘‘指令‘′或‘(指令)’。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设定:
‘version=$(uname -r)’再‘echo version3.10.0229.el7.x86647."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环境变量就可以了,非常方便。

显示环境变量

Copy
# 显示PATH环境变量
echo $PATH
Copy
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

即计算机将在以上目录中寻找可执行程序,其中:是分隔符.

Copy
# 显示HOME变量
echo $HOME
Copy
/Users/abc
Copy
# 显示所有环境变量
export
Copy
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中填写:

Copy
export PATH=$PATH:/home/xxx/test/bin

然后source一下就可以使用了:

Copy
source ~/.bashrc

这样就将 /home/xxx/test/bin 也添加为了搜索目录,其中 ,是引用变量,PATH 即引用PATH变量, : 即分隔符.
整句的意思是:设置环境变量为,原PATH路径以及/home/xxx/test/bin

例程:设置java环境变量

Copy
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
Copy
source ~/.bashrc

测试:

Copy
$ 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目录下即可.

语法:

Copy
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/* 了.

Copy
ln -sf /opt/cmake-3.12.2/bin/*  /usr/bin/

输入 read#

Copy
read -p "Please keyin your name: " -t 30 named
Copy
Please keyin your name:

输出 echo#

Copy
echo "hello"

别名 alias#

Copy
alias lm='ls -al | more'

bash欢迎信息#

还记得在终端机界面 (tty1 ~ tty6) 登入的时候,会有几行提示的字串吗?那就是进站画面啊! 那个字串写在哪里啊?呵呵!在 /etc/issue 里面啊!

Copy
cat /etc/issue
Copy
S
Kernel 
 on an m

issue 内的各代码意义:
d 本地端时间的日期;
l 显示第几个终端机界面;
m 显示硬件的等级 (i386/i486/i586/i686...);
显示主机的网络名称;
O 显示 domain name;
操作系统的版本 (相当于 uname -r)
显示本地端时间的时间;
S 操作系统的名称;
v 操作系统的版本。

source#

读入环境设定档的指令

由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的设定档,所以, 如果你将自己的偏好设定写入上述的档案后,通常都是得登出再登入后,该设定才会生效。那么,能不能直接读取设定档而不登出登入呢? 可以的!那就得要利用 source 这个指令了!

Copy
source ~/.bashrc

管道命令 pipe#

管线命令使用的是‘ | ’这个界定符号! 另外,管线命令与‘连续下达命令’是不一样的呦!
假设我们想要知道 /etc/ 底下有多少档案,那么可以利用 ls /etc 来查阅,不过, 因为 /etc 底下的档案太多,导致一口气就将屏幕塞满了~不知道前面输出的内容是啥?此时,我们可以透过 less 指令的协助,利用:

Copy
ls -al /etc | less

如此一来,使用 ls 指令输出后的内容,就能够被 less 读取,并且利用 less 的功能,我们就能够前后翻动相关的资讯了!

筛选命令 grep
就是将一段资料经过分析后,取出我们所想要的。或者是经由分析关键字,取得我们所想要的那一行!

Copy
# 在文件中查找关键字
grep 关键字 文件

其他管道命令
cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs

输出重定向#

例如输出到文件:

Copy
echo "hello" >~/test.txt

ip配置#

Ubuntu16.04 ip配置#

Copy
sudo gedit /etc/network/interfaces
Copy
auto eth0                  #设置自动启动eth0接口
iface eth0 inet static     #配置静态IP
address 192.168.11.88      #IP地址
netmask 255.255.255.0      #子网掩码
gateway 192.168.11.1        #默认网关

重启网络:

Copy
sudo /etc/init.d/networking restart

Ubuntu 18.04 ip配置#

Ubuntu 18.04的网络管理程序改为netplan了,因此配置方式也需要改喽!
查看ip

Copy
ifconfig -a

设置静态ip

Copy
sudo gedit /etc/netplan/50-cloud-init.yaml
Copy
# 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地址、网关和域名服务器。
应用网络:

Copy
netplan apply

代理配置#

bash代理#

Copy
sudo gedit ~/.bashrc
Copy
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/
Copy
source ~/.bashrc

apt代理#

Copy
sudo gedit /etc/apt/apt.conf
Copy
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电脑

Copy
ip地址:192.168.0.2
子关掩码:255.255.255.0
默认网关:192.168.0.1

B电脑

Copy
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

原文地址:https://www.cnblogs.com/wsl96/p/13129654.html