Linux四部分:Linux内核、GNU工具、图形化桌面环境、应用软件
1.Linux内核:Linux系统的核心,控制着计算机系统上所有的软硬件,在必要时分配硬件,并根据需要执行软件
1.1 内核四功能:系统内存管理、软件程序管理、硬件设备管理、文件系统管理
1.1.1 系统内存管理:物理内存、虚拟内存[实际并不存在,也叫交换空间(swap space)]
1.1.2 软件程序管理:运行的所有进程
1.1.3 硬件设备管理:硬件设备为特殊文件(字符型设备文件、块设备文件、网络设备文件)
1.1.4 文件系统管理:通过不同类型的文件系统从硬盘中读写数据
2. GNU工具
2.1 核心GNU工具
2.1.1 处理文件的工具
2.1.2 操作文本的工具
2.1.3 管理进程的工具
2.2 Shell
核心:命令行提示符
Shell脚本:多条Shell命令植入可执行文件作为程序运行
3.图形化桌面环境
3.1 X Window系统
3.2 KDE桌面
3.3 GNOME桌面
3.4 Unity桌面
4.Linux发行版
核心Linux发行版:Red hat、Debian
特定用途发行版:CentOS、Ubuntu
常见Linux目录
目录 | 用途 |
---|---|
/bin | 二进制目录,存放用户级的GNU工具 |
/boot | 启动目录,存放启动文件 |
/dev | 设备目录,创建设备节点 |
/etc | 系统配置文件目录 |
/home | 主目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体文件,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录 |
/opt | 可选目录,存放第三方软件包和数据文件 |
/proc | 进程目录,存放现有硬件及当前进程的相关信息 |
/root | root用户的主目录 |
/sbin | 系统二进制目录,存放管理员级的GNU工具 |
/run | 运行目录,存放系统运行时的运行数据 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以在该目录中创建删除临时工作文件 |
/usr | 用户二进制目录,存放大量用户级的GNU工具和数据文件 |
/var | 可变目录,存放经常变化的文件,如日志文件 |
补充:
/net 存放着和网络相关的一些文件
/selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙
常用快捷键
1)ctrl + c:停止进程
2)ctrl+l:清屏,同(clear)
3)ctrl + q:退出
4)善于用tab键
5)上下键:查找执行过的命令
6)ctrl +alt:linux和Windows之间切换
Linux环境变量(environment variable)
分类:全局变量、局部变量(自设用小写、其余大写)
# 查看全局变量
hefery@ubantu:~$ env
hefery@ubantu:~$ env HOME
hefery@ubantu:~$ echo $HOME
hefery@ubantu:~$ ls $HOME
# 设置全局变量:先创建局部变量,然后导到全局环境
hefery@ubantu:~$ echotest="Hello World"
hefery@ubantu:~$ export echotest
hefery@ubantu:~$ echo $echotest
# 查看局部变量
hefery@ubantu:~$ set
# 设置局部变量
hefery@ubantu:~$ echo $echotest
hefery@ubantu:~$ echotest=Hello
hefery@ubantu:~$ echo $echotest
hefery@ubantu:~$ echo $echotest
hefery@ubantu:~$ echotest="Hello World"
hefery@ubantu:~$ echo $echotest
文件权限
hefery@ubantu:~/Desktop/hebin$ ls -l
total 104
-rwxr-xr-x 1 hefery hefery 8304 12月 12 13:28 a.out
# -:文件 d:目录 l:链接
# r:可读 w:可写 x:可执行
-rw-r--r-- 1 hefery hefery 212 12月 10 12:59 hebin.c
-rw-r--r-- 1 hefery hefery 423 12月 12 13:02 hello.c
-rw-r--r-- 1 hefery hefery 17965 12月 12 13:03 hello.i
-rwxr-xr-x 1 hefery hefery 8304 12月 12 13:03 hello.o
-rw-r--r-- 1 hefery hefery 535 12月 12 13:03 hello.s
-rw-r--r-- 1 hefery hefery 191 12月 10 13:07 lalala.c
-rw-r--r-- 1 hefery hefery 18056 12月 10 13:09 lalala.i
-rwxr-xr-x 1 hefery hefery 8304 12月 12 12:53 lalala.o
-rw-r--r-- 1 hefery hefery 806 12月 10 13:09 lalala.s
drwxr-xr-x 2 hefery hefery 4096 12月 14 17:57 scriptTest
drwxr-xr-x 2 hefery hefery 4096 11月 23 23:31 Test
# 默认文件权限
hefery@ubantu:~/Desktop/hebin$ touch 123.c
hefery@ubantu:~/Desktop/hebin$ ls -al 123.c
-rw-r--r-- 1 hefery hefery 0 12月 14 22:50 123.c
# 修改权限
hefery@ubantu:~/Desktop/hebin$ sudo chmod 760 123.c
[sudo] password for hefery:
hefery@ubantu:~/Desktop/hebin$ ls -al 123.c
-rwxrw---- 1 hefery hefery 0 12月 14 22:50 123.c
常用运维命令
# 查看当前目录
hefery@ubantu:~$ pwd
# 跳回主目录
hefery@ubantu:~$ cd
# 显示当前目录的文件及目录
hefery@ubantu:~$ ls -la
# 创建文件
hefery@ubantu:~$ touch hello.c
# 复制文件
hefery@ubantu:~$ cp source destination
# 移动和重命名
hefery@ubantu:~$ mv source destination
# 删除文件
hefery@ubantu:~$ rm -f hello.c
hefery@ubantu:~$ rm -i hello.c
# 创建目录
hefery@ubantu:~$ mkdir hefery
hefery@ubantu:~$ mkdir -p Desktop/hefery/test
# 删除目录
hefery@ubantu:~$ rmdir hefery
hefery@ubantu:~$ rm -r hefery
# 查看进程
hefery@ubantu:~$ ps -ef
hefery@ubantu:~$ top # 实时查看,q退出
# UID启动进程的用户 PID进程ID PPID父进程ID C利用率CPU STIME启动时间
# TTY启动时的终端 TIME运行进程累计CPU时间 CMD程序名称
# PID进程ID USER进程属主名字 PR优先级 NI进程谦让度 VIRT占用虚存总量 RES占用物理内存总量
# SHR与其他进程共享的内存总量 S进程状态 %CPU使用CPU时间比例 %MEM使用内存占总内存比例
# TIME+ 启动至目前占CPU时间总量
# 结束进程:必须为进程属主或root
hefery@ubantu:~$ kill PID
关机: poweroff/halt/shutdown –h now
重启: reboot
常见问题
# 权限不够
Permission denied
Shell脚本编程
# 创建、编辑、执行 testone.c 文件
# 1 #! /bin/bash
# 2 date
# 3 who
hefery@ubantu:~/Desktop/hebin/scriptTest$ touch testone.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ vim testone.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testone.sh
# 权限不够,无法执行
bash: ./testone.sh: Permission denied
# 解决方法:sudo chmod u+x testone.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ls -la testone.sh
-rw-r--r-- 1 hefery hefery 22 12月 14 23:15 testone.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ sudo chmod u+x testone.sh
[sudo] password for hefery:
hefery@ubantu:~/Desktop/hebin/scriptTest$ ls -la testone.sh
-rwxr--r-- 1 hefery hefery 22 12月 14 23:15 testone.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testone.sh
# result:
2019年 12月 14日 星期六 23:16:23 CST
hefery :0 2019-12-14 23:06 (:0)
# 显示消息
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo hefery's dog's hahaha
heferys dogs hahaha # 注意单引号成对出现,中间字符会被当成一个整体
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo "hefery's dog's hahaha"
hefery's dog's hahaha # 用双引号消除单引号的影响
# 显示消息
hefery@ubantu:~/Desktop/hebin/scriptTest$ vim testtwo.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ sudo chmod u+x testtwo.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testtwo.sh
# code:
1 #!/bin/bash
2 echo -n This time and date are: //echo [-n] string:文本字符串和命令输出显示在同一行
3 date
4 echo -n "Let's see who's logged into the Linux system:"
5 who
1 #!/bin/bash
2 echo This time and date are:
3 date
4 echo "Let's see who's logged into the Linux system:"
5 who
# result:
This time and date are:
2019年 12月 14日 星期六 23:37:28 CST
Let's see who's logged into the Linux system:
hefery :0 2019-12-14 23:06 (:0)
# 使用变量-环境变量
hefery@ubantu:~/Desktop/hebin/scriptTest$ vim testthree.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ sudo chmod u+x testthree.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testthree.sh
# code:
1 #!/bin/bash
2 echo "User info fr userid:$USER"
3 echo UID: $UID
4 echo HOME:$HOME
# result:
User info fr userid:hefery
UID: 1000
HOME:/home/hefery
# 只要脚本在引号中出现 “$” 就会以为你在引用一个变量
# 解读为实际的美元符可用:"/"
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo "This cost ofthe item is $15"
This cost ofthe item is 5
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo "This cost ofthe item is \$15"
This cost ofthe item is $15
# 使用变量-用户环境
hefery@ubantu:~/Desktop/hebin/scriptTest$ touch testfour.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ sudo chmod u+x testfour.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ vim testfour.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testfour.sh
# code: 变量、等号、值之间不能有空格
1 #! /bin/bash
2 days=10
3 guest="Hefery"
4 echo "$guest checked in $days days ago"
5 days=5
6 guest="Lalala"
7 echo "$guest checked in $days days ago"
# result:
Hefery checked in 10 days ago
Lalala checked in 5 days ago
# 命令替换:将命令输出赋给变量
# 1.反引号字符 "`"
# 2.$()格式
hefery@ubantu:~/Desktop/hebin/scriptTest$ touch testfive.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ sudo chmod u+x testfive.sh
[sudo] password for hefery:
hefery@ubantu:~/Desktop/hebin/scriptTest$ vim testfive.sh
hefery@ubantu:~/Desktop/hebin/scriptTest$ ./testfive.sh
# code:
1 #! /bin/bash
2 testing1=$(date)
3 testing2='who'
4 echo "The date and time are: $testing1"
5 echo "The user is: $testing2"
# result:
The date and time are: 2019年 12月 15日 星期日 00:18:58 CST
The user is: who
# code:
1 #! /bin/bash
2 today=$(date +%y%m%d)
3 ls /usr/bin -al > log.$today
# result:
# 在本目录中生产一个日志文件:log.191215
# 可使用 "[]" 执行数学计算
hefery@ubantu:~/Desktop/hebin/scriptTest$ var1=$[1 + 5]
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo $var1
6
hefery@ubantu:~/Desktop/hebin/scriptTest$ var2=$[$var1 * 2]
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo var2 //别忘了 "$"
var2
hefery@ubantu:~/Desktop/hebin/scriptTest$ echo $var2
12
# code:
1 #! /bin/bash
2 var1=100
3 var2=50
4 var3=45
5 var4=$[$var1 * ($var2 + $var3)]
6 echo The final result is $var4
# result:
The final result is 9500
# 结构化编程
# code:
1 #! /bin/bash
2 testuser=NoSuchUs
3
4 if grep $testuser /etc/passwd
5 then
6 echo "The user $testuser exsts on this system."
7 elif ls -d /home/$testuser //提供另一个要测试的命令,若退出状态码为0,则执行下一then
8 then
9 echo "The user $testuser does not exsts on this system."
10 echo "However, the user $testuser has a directory."
11 else
12 echo "The user $testuser does not exsts on this system."
13 echo "And, the user $testuser does not has a directory."
14 fi
# result:
ls: cannot access '/home/NoSuchUser': No such file or directory
The user NoSuchUser does not exsts on this system.
And, the user NoSuchUser does not has a directory.
# 数值比较
n1 -eq n2 是否相等
n1 -ge n2 是否大于等于
n1 -gt n2 是否大于
n1 -le n2 是否小于等于
n1 -lt n2 是否小于
n1 -ne n2 是否不等于