Linux命令行与Shell脚本编程

 


       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进程目录,存放现有硬件及当前进程的相关信息
              /rootroot用户的主目录
              /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	是否不等于

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值