Linux介绍和基本命令的使用

文章目录

Linux学习第一天:

一 linux简介

1.linux历史:

1969 ---- unix 1991—Linux 林纳斯·本纳第克特·托瓦兹
GNU-----组织 (GNU IS NOT UNIX)-----软件(GCC MAKE)

红旗linux —中国(生态链太弱了)
SUSE ------- 德国 (界面漂亮)
open suse 操作系统

redhat—红帽----企业版本(做服务器使用)稳定度高
—fadroa(个人使用,免费)

debian—(组织:最遵循于标准协议的系统)
----CentOS (服务器,付费)
----centos(个人版本停止更新)
----ubuntu (个人)

ucos: 特殊的linux系统,没有mmu模块,没有内存处理模块(系统代码量小,适合嵌入式系统)
重点: 在linux中一切皆文件。

2.linux特点:

免费;开源;稳定;速度快;多用户多任务;安全;软件库多;

二.linux体系结构

1 用户空间

分为:命令、程序、脚本
分为: shell

2. 内核空间(不允许用户直接操作)

系统调用
内核模块

3.vm的使用

开机:点击绿色箭头,
关机:点击两个竖线挂起或者点击黄色正方形关机,不允许点击右上角x
虚拟机:模拟一台机器,方便使用。占用硬件资源。
硬件设置: xxxx
ctrl + alt +移动鼠标

如果屏幕被锁住了,ctrl + q 解锁

三.shell命令

1.shell(贝壳):他是linux的内核保护工具,用来做用户和内核之间的交互的(翻译工具)

2.终端:字符设备,是一个模拟器,用来编写命令

3.关机命令:shutdown -t now (重点)
命令组成: 指令 选项 参数
注意: 指令是必备,选项和参数可有可无,并且可以以后多少个选项 也可以有多个参数。
提示符:student@student-machine: ~ $
用户名 主机名 当前目录 提示符(普通用户$,root用户提示符是#)

补充1:root为超级用户,相当于windows下的管理员
补充2:一行有多个命令,用分号隔开,如果命令一行写不完需要续航,用斜杠换行符。
补充3:当输入一个或多个字母后,按tab键会自动补齐剩下部分。
补充4:如果想查看历史命令,用键盘上下键或者history命令。

四、linux文件系统

linux的文件系统:文件在存储设备的组织方式。
1.EXT系统: ubuntu中普遍使用的EXT4(1T)
2.NTFS系统: windows目前的文件系统(2T)
3.VFAT系统: windows下的文件系统,fat32:(U盘)最大支持4G文件。
4.iso9660文件系统:光盘文件系统,包括*.iso文件。(PE安装)
5.NFS系统:linux的网络文件系统(windows中的共享目录)

五、vim的使用

vim:是一个编辑器,相当于windows的记事本。全程用命令
在编写c语言-系统编程-c+±-系统移植–驱动编程 都要使用

1.安装vim :sudo apt-get install vim

2.进入vim: vi+ 文件名 (如果文件存在则打开,不存在则创建)

3.三种模式:

命令模式:刚进入vim是命令行模式。
插入模式: 输入i ,o ,a进入到编辑模式,按下ESC进入命令模式
底行命令:由命令模式输入冒号进入底行命令模式

4.进入插入模式:

   i :  在光标前输入内容
   I:   在当前行行首输入
   o:当前行重启下一行输入
   O:当前行重启上一行输入
   a:当前光标的后一个位置插入
   A:在当前行末尾插入

5.命令模式下的命令

   dd------- 删除当前行
   u---------撤销最后一次操作
   ctrl+r---- 重做,也是回复撤销的动作
   end------光标移动到当前行末尾
   home----光标移动到当前行行首
   yy--------复制一行,复制两行 2yy
   p---------粘贴一次,如果需要粘贴两次则2p
   gg--------到文件行首第一个字母
   G---------到当前文件最后一行行首
   x -------- 删除光标所在的字符
   dw------- 删除一个单词
   y$--------复制当前光标当当前行末尾的内容

6.底行命令模式

/关键词—在文件中查找关键字。部分匹配。n是往下查找,/good 则在文件中查找有good字眼的文字。gooda也是匹配的。
/<关键字> 在文件中查找关键字,完全匹配。 /<good> 其中gooda不匹配,只有good才匹配。

   :wq------保存文件退出
   :q!----- 强制退出
   :q -------直接退出
   :w ------保存  (相当于ctrl + s
   :x  ------ 保存退出
   :set number  (:set nu)  给vim设置行号
   : set nonumber 给vim取消行号
   : vsplit  --- 设置垂直分屏
   : split  --- 设置水平分屏
   :set ai sw=8  设置缩进为8空格

   Ctrl+shift+T  打开终端
   Ctrl+shift+N  新建终端

7.补充:vim非正常退出,会产生swp文件,会影响到c程序的编译,直接通过rm .xxx.swp 删除临时文件。

五、linux文件类型

0 前奏:ls -l 或者 ll
打印当前目录下文件的详细信息
格式: drwxrwxr-x 3 student student 4096 7月 2 23:05 day01

1.文件类型 (第一个字母)

    普通文件: -开头,表示普通的二进制文件,可执行文件,字符文件
    目录文件: d开头,相当于windows下的文件夹
    链接文件:l开头,相当于windows下的快捷方式
          软连接:xxx
          硬链接:xxx

2.设备文件:用来表示某一个设备,设备文件放在/dev

              c开头,表示字符设备文件
              b开头,块设备,比如说硬盘sda
              s开头,套接字设备(网卡)  socket
              p开头,管道设备。

3.字符设备:console—终端设备

                      null--------空设备
                      mouse1---鼠标
                      event4----键盘设备
                       tty0~20--串口设备

4.补充:

ROM:只读内存,只能读出事先存储的内容的存储器,断电不丢失(可以安装多少程序)
RAM:运行内存,可读可写,断电会丢失内容(手机同时运行多少程序)

六、文件访问权限

1.格式: d rwxrwxr-x 3 student student 4096 7月 2 23:05 day01

2.权限: rwx rwx r-x 分成3组,第一组是创建者权限(u),第二组是 组员权限(g) 第三组是 其他人权限(o)

3.解释: r 是可读权限(read) w是可写权限(write) x是可执行权限(excute) -表示没有此权限
—rw-r-x : 创建者不可读不可写不可以执行,同组只有读写权限,其他人读和执行权限

4.表示: 字符表示:rwx r-x r–
绝对表示:111 101 100 用8进制表示:754
文件创建默认权限 rw-rw-r-- 是110 110 100 则是664
目录创建默认权限 rwxrwxr-x 是111 111 101 则是775

5.第十一个字母
如果当前详细信息是目录(day01),则3表示有3个子目录
如果当前详细信息是文件(danny.c) 则1表示有几个链接。

6.ls-l格式中剩下部分
第一个student:创建者
第二个student:当前文件放在哪个组中
第三个4096: 表示文件大小
第四个7月xx: 表示最后的修改时间
第五个day01: 表示文件名

7.补充:在windows下复制 ctrl +c 在linux下复制 ctrl+shift +c
在windows下粘贴:ctrl+v 在linux下粘贴 ctrl+shift+v
在windows下锁屏 win+L 保存 ctrl+s 撤销 ctrl+z 全选 ctrl+a ; 查找 ctrl+f ; 剪切 ctrl+x

七、linux系统目录结构

1.linux的目录结构是树状结构(只有一个根目录 /),在windows是森林结构,有多个盘符
2.根目录/下有很多一级子目录
  1> /bin  用来存放命令文件  如ls  cd等
  2> /etc  用来存放系统配置文件  xx.conf   (passwd文件)
  3> /dev 用来存放设备文件  比如说块设备  字符设备 鼠标  串口.....
  4> /media 用来存放媒体 cdrom 
  5> /home  用户的家目录,在家目录中为每个用户创建一个子文件夹,例如student 用户 有/home/student目录
  6> /root   是root用户的家目录
  7> /lib    用来存放库文件。
       动态库:在windows下是dll文件,在linux下是.so文件
       静态库:在windows下是lib文件,在linux下是.a文件
  8> /proc 和/sys 特殊文件系统(虚拟文件系统)
  9> /tmp  临时目录,存放临时数据
  10> /usr  用户的应用程序的安装目录
  11> /mnt  用来外部文件系统(例如挂载u盘)

Linux学习第二天:

一、路径表示

点(.):当前路径,表示所在的位置,每个目录中都有点目录
点点(…):表示上一层目录,比如现在目录是/home/student/day01中,…表示student目录
波浪线( ~ ): 表示每个用户的主目录,如果是student用户, ~ 的路径是/home/student/ 如果是danny用户,~表示/home/danny/
根目录(/):这个linux系统的根目录,相当于windows的c盘。

绝对路径:从根目录开始的路径,不管当前目录在什么位置,使用绝对路径都可以找到指定的位置,指定位置不会变。表示 /home/student
相对路径:相对于某个目录而言的路径,比如说我在楼下,如果我当前的位置在10楼,我的楼下是9楼,

如果我在2楼,我的楼下是1楼,所以相对路径是会随着你当前路径而改变的。在平常开发过程中,尽量使用相对路径。表示 …/danny/

二、linux的常用命令

1.cd 跳转目录 (重)

 格式1: cd 目录名        表示跳转到指定目录   
 格式2: cd                   表示跳转到~目录
 注意:如果目录名只是一个文件夹名称,默认会加上./ 
 例如: cd day01    会自动转换成 cd ./day01
            cd ..    跳转到上一层

2.pwd 查看当前所在路径 格式 pwd

3. mkdir 创建目录(重)

格式1: mkdir 目录名       ;     在当前目录创建目录
  格式2: mkdir -p 目录1/目录2  创建多级目录
  格式3: mkdir -m 权限 目录
  mkdir  day01/danny   ~ day01 在day01中创建danny目录
  注意:如果目录名只是一个文件夹,会自动加./
 练习: 在桌面创建day02目录,创建者权限只有可读,同组有可读和可执行权限,其他人只有可读权限。

4.rmdir 删除目录 (重)

格式: rmdir 目录名 删除空目录
格式: rmdir -p 目录1/目录2 多级别删除
注意:目标目录必须为空,否则没法删除

5.ls 查看指定目录的内容(重)

	格式: ls 目录       打印指定目录下的内容
    格式: ls -l     ll       查看文件的详细信息
    格式: ls -a          查看当前目录下的所有文件(包含隐藏文件)
    格式: ls -d          列出当前目录,也就是目录本身
    格式: ls -t          按照修改时间的先后顺序排序列出
    格式: ls -r          按照文件名的逆序排序显示
    格式: ls -R         按照递归的方式把子目录中的所有文件打印出来

补充: 通配符* 表示0~多个字符, 比如:abc中 abc;abcd;abc1;abcdefg;
通配符? 表示一个字符:比如abc?中 abcd abc1 但abcdef不符合
通配符 […] 表示在中括号中选一个指定的字符; ls a[df].conf ,表示 第一个字母是a 第二个字母是d或者f的conf文件
通配符[-]:表示在a到d范围之内的一个字符;例如: ls a[d-f].conf ,第一个字母是a,第二个是d到f中的任意一个,的conf文件
通配符[^…]: 表示不存在括号中的字符。ls ?[^abc]
.conf,表示:第一个字母任意,第二个字母不是abc的conf文件

三、系统管理命令

1.用户信息文件。 /etc/passwd 保存用户信息数据

student : x : 1000 : 1000: ,:/home/student: /bin/bash
用户名 密码 用户ID 组id 用户主目录 shell位置
可以自己设置用户id,系统用户的id从1到999,普通用户从1000+
root的用户id是0

2.adduser 创建新的用户

格式:adduser 用户名(重)
注意: 创建用户后,会在home目录下用户目录,在passwd中记录用户信息,如果权限不够,在前面加上sudo,密码是8
参数: --home:设置用户主目录 -uid 设置用户id -gid 设置组id
例如: adduser --home /home/danny666 -uid 8888 -gid 8888 danny688

3.passwd 修改用户密码

格式: passwd 用户名 (重)
注意:修改密码不可以和原密码相同,密码长度不可以低于6位,不可以太简单。

4. su 切换用户(重)

格式: su 用户名
注意: 需要输入密码,如果权限不够需要加sudo

5.userdel 删除用户

格式: userdel 用户名 ;其中-r是删除主目录

四、文件处理命令

1.查看帮助文档

第一种方式:man + 命令 还可以查询函数使用方法:man +(第几卷) + 函数
第二种方式: 命令 --help
第三种方式: whereis + 命令 查看命令的帮助文档位置

2. echo 在屏幕上输出

格式: echo 字符串 直接在屏幕上打印
管道:echo “danny shuai”| cat >hello.c

3. cat 在屏幕上打印信息(重)

格式: cat 文件名 打印文件信息,不可以在cat后加单独的目录
格式: cat 文件1 > 文件2 覆盖重定向。 把文件1中的内容拷贝到文件2中。
格式: cat 文件1 >> 文件2 追加重定向。把文件1中的内容追加到文件2的末尾。
格式: cat > 文件1 输入覆盖重定向。把键盘输入的内容覆盖到文件1中。 结束用ctrl+c
格式: cat >> 文件1 输入追加重定向。把键盘输入 的内容追加到文件1 的末尾。
补充:-v表示特殊符号。 cat -vE danny.c

五、文件操作命令

1. touch创建文件(重)

格式: touch 文件名
注意:如果文件不存在 则创建文件 如果文件存在 则更新最后的修改时间

2. mv 移动 或者重命名(重)

格式1: mv 文件1 文件2 把第一个文件复制到第二个文件中,然后删除第一个文件
格式2: mv 目录1 目录2 如果目录2存在,把目录1移动到目录2中
格式3: mv 文件1 目录1 把文件1移动到目录1中,如果目录2不存在,则把目录1的名字修改成目录2.
选项: -i 询问模式,提示是否覆盖 -v 提示移动的步骤 -b 备份覆盖文件
练习: 先创建两个文件 danny1 和danny2 在第一个文件中输入1234,在第二个文件中输入abcd 然后把第一个文件中内容追加到第二个文件中。

3 rm 删除文件(重)

格式: rm 文件    ;  删除文件
格式: rm -rf 目录名;  删除指定目录,可以多级删除。
选项: -r 删除目录  -f 强制删除    -i 提示是否删除
练习: 把当前目录下所有以a开头,第二个字母不是abc的.c文件删除 rm a[^abc]*.c

4.cmp 比较两个文件是否相同(重)

格式: cmp 文件1  文件2
如果文件1和文件2相同则无任何打印,如果文件1和文件2不相同则打印第一处不相同的字符位置。

5.cp 文件拷贝(重)

格式: cp 文件1 文件2 ; 如果文件2不存在则新建后复制,如果文件2存在则覆盖粘贴。
格式: cp 文件1  目录1; 把etc目录下的 第三个字母不是abc的conf文件拷贝到主目录的day01中
格式: cp -r 目录1  目录2;   递归复制目录  
参数: -i  询问   -f强制   -r 递归复制

6.cut 按照某一个要求查看文档(重)

格式: cut -d ‘分隔符’ -f 目标列 文件名
例子: 把passwd文件中所有的用户名打印出来。

练习: 把所有用户的主目录名称存入danny1的后面。

7.more:分屏查看文件(较大文件查看)(重)

格式: more 目标文件 
格式: more  +n 目标文件  ;从第n行开始查看
格式: more -n 目标文件  ; 每一页是n行显示
注意:用空格翻页,或者使用ctrl+f  ctrl+b .用回车键查看下一行

8.less 分屏查看文件

格式: less  目标文件
参数: -p  查找关键字,从第一个找到的位置打印
          -M 查看百分比  ,例如less -M ./danny
练习: 查找passwd文件中是否有student关键字

9.head 查看文件头部内容

格式: head 文件名 ;默认显示文件的前10行
格式 head -n 5 文件名 ; 显示文件的前5行
格式: head -n -5 文件名; 除最后5行外其他全部显示
格式: head -c 5 文件名; 除最后5个字符外其他都显示

10.tail 查看文件尾

 格式:  tail 目标文件    ;默认显示后10行内容
 格式: tail -n 5 目标文件; 显示最后5行

11.file

格式: file 目标文件
作用:查看文件类型 (目录文件,设备文件。普通文件)
          student@student-machine:~$ file /dev/tty0
         /dev/tty0: character special (4/0)

12.alias 给命令取别名

  格式: alias 别名='命令'
  注意:别名就表示命令,下次直接使用别名就行。
  取消: unalias  别名;   取消别名

13.chmod 修改文件权限 (重)

  格式: chmod 绝对值权限 文件名
             chmod 665 danny1   
   格式: chmod  u+x danny1   对拥有者加上可执行权限
             chmod a+x danny1  所有人加上可执行权限
             chmod o-x,a+r danny1;其他用户取消可执行权限,所有用户加上读权限。
               chmod o-x,a+r danny1 danny2  两个文件同时修改
  例子: 请创建一个文件danny1,把拥有者的写权限去掉,组加上可执行权限 chmod u-w,g+x danny1

u:表示拥有者 g:表示同组 o:表示其他 a:表示所有

14.chown 修改文件属组和属主 (重)

格式: chown 新的属主 文件名   ;修改文件的属主
格式: chown 新的属主:新的属组 目标文件    ;  修改文件的属主和属组       
格式: chown 新的属组:  目标文件;  修改属主,同时把属组修改成当前属主的默认属组。

案例:在student用户下:文件属性如下
-r-xrwxr-x 1 danny student 19 7月 5 16:43 danny1
student权限 rwx
如果切换到abc用户后,请问当前用户对danny1的权限是r-x

Linux学习第三天:

1.权限掩码

满权限,一个文件的满权限是666,创建文件默认是664。 一个文件夹(目录)的满权限是777,创建文件默认权限是775
公式: 创建文件默认权限 = 满权限 - 权限掩码
格式: umask 权限掩码
练习: 把权限掩码修改成022后,创建文件和目录的权限是多少,umask 022,创建文件的默认权限变成644,创建目录的权限变成755

2. find查找文件 (重)

格式: find 目标目录(哪里查) 查找规律(怎么查)
格式: find   -name 关键字
练习: 请查找整个linux系统中 的所有passwd文件。 sudo find / -name passwd
格式:find -size 大小    ;用c,k,M,G,T单位使用

注意: 如果需要多个条件连接,-and 并且关系。 -or 或者关系
练习: 请查找出 linux系统中,所有大于100k并且小于10m的文件 find -size +100c -and -size -10M
格式: find -user 属主; 按照属主查找文件 ; sudo find ~ -user danny
格式: find -atime 时间; 在多少天内访问过的文件
格式:find -mtime 时间; 多少天内修改 ???

3.tar 打包和解包(不做压缩)(重)

格式:tar -cvf 目标包(*.tar) 源文件/目录 ; 给文件打包
格式:tar -tvf 目标包 ; 查看包中的内容
格式:tar -xvf 目标包 -C 目标地址; 解包到指定位置
格式:tar -Avf 包1 包2; 把包2中的内容追加到包1中
格式:tar -rvf 目标包 源文件 ; 追加 ,把danny文件追加到刚才的danny.tar

4.解压缩 工具

格式:tar -zcvf 目标包( *.tar.gz) 源文件 ;压缩文件 ,gzip压缩
格式: tar -zxvf 目标包( *.tar.gz) -C 位置 ;解压缩
格式:tar -jcvf 目标包( *.tar.gz) 源文件 ;压缩文件 bzip2压缩
格式:tar -jxvf 目标包( *.tar.gz) ;解压缩文件 bzip2压缩

5.shutdown 关机命令 (重)

格式:shutdown -t 时间 ;在多少分钟后关机
格式:shutdown -r 时间; 重启
格式:shutdown -f 强制关机
格式: shutdown -c 取消关机;

6.clear 清空屏幕

7.who 当前用户是谁

显示名称 登录时间 使用的串口 全部显示

8.whoami 只显示用户名称

9. date 时间日期(重)

作用:用命令显示和设置系统时间
格式: date   ; 显示当前的日期 时间
格式: date  '+%c'   ;显示时间和日期,但时间用中文表示
格式: date ‘+%x’ ; 只中文显示年月日
格式: date ‘+%X’ ;中文显示时间
格式: date ‘+%T’;只显示时间,用冒号24小时格式显示
格式: date ‘+%D’; 用斜杠的格式表示日期

10.info 网页的形式查看帮助信息

格式: info + 命令 (man 命令;命令 --help)

11.ps 查看进程(process)

格式: ps -aux ; 查看所有进程
ps -au ; 打印进程
信息: USER ----进程拥有者
PID-------进程id
CPU-------cpu使用率
MEM------内存使用率
VSZ -------虚拟内存
STAT-------进程状态 (R 表示在运行,T表示暂停 S堵塞)
START------进程开始时间
TIME-------执行时间
COMMAND 用哪个命令执行的

12 kill 杀死进程(发送信号)

格式: kill -9 PID;

13 pstree

作用:讲所有进程以树状图形式显示,树状图会以pid或者init为基本进程的根来展现。

14 网络命令

1> ifconfig   打印网卡的信息 (linux下)
     ipconfig  在windows打印网卡信息

2>.Link encap:本地环回  --表示自己的ip地址,用127.0.0.1表示
3> 硬件地址:也叫mac地址:网卡地址,例如 00:0c:29:94:12:b1  共48位,前24位和后24位,前24位给厂商。后24位给个人。mac是全世界唯一。
4>逻辑地址:ip地址,点分十进制:例如 192.168.5.4,ip地址的每个10进制最大是255.
5> 网关:不同局域网之间通信的中间设备。例如:192.168.5.1 最后一位是1.这个ip地址就是网关地址。

下午

一.网络命令(重)

6>子网掩码:用来区分网络地址和主机地址部分,基于子网掩码,网络管理员可以 将网络划分为若干个子网
每个ip地址分为主机地址部分 网络地址部分。子网掩码中,1对应ip地址中的网络地址部分,0表示主机地址部分。
案例:子网掩码为255.255.255.0而ip地址为192.168.125.10;
ip转换成2进制: 11000000 .10101000.11111101.00001010
子网掩码的2进制 11111111. 11111111.11111111.00000000

 7>地址分类
   A类地址:第一个字段是网络地址(最高位是0),剩下三个字段是主机地址,子网掩码255.0.0.0
   B 类地址:网络地址和主机地址分别2字段(最高两位是10)子网掩码:255.255.0.0
   C 类地址:三个字段的网络地址,1个字段主机地址,最高三位是110.  255.255.255.0 (192.168.5.1)
   D 类地址:可以用来做组播地址
   E 类地址:用来做测试,实际生活中不使用

  8>动态地址DHCP
      ip地址分为ipv4和ipv6;因为ipv4不够用,所以开发出ipv6地址。
      ipv4只有32位。ipv6地址128
      DHCP:动态主机配置协议,实现动态分配ip地址资源。

  9> DNS: 域名解析协议,把域名(网址)解析成ip地址或者反解析。

二、shell脚本

1、shell:贝壳,是用户空间和内核空间交互的中间件,shell脚本是shell命令的集合,它是解释型语言。c是编译型语言。

2.为什么学shell

       1>服务器管理或者系统配置
        2> 新的系统安装后,需要软件的配置和安装
       3>为了提高效率,是维护更方便快捷。

3.shell脚本的编程步骤(解释执行)

1>使用vim编写shell脚本,shell脚本时*.sh后缀
2>修改脚本的执行权限; chmod 777 *.sh 或者 chmod a+x *.sh
3> 执行 ./脚本名。 例子:./goog.sh

4.定义变量(可以修改的量)

1>定义变量:在shell中变量定义不需要类型  name=123
    使用变量:$变量名   或者 ${变量名}
    打印内容: echo 

2>输入 read
格式: read 变量名,如果没有输入则会一直堵塞(等待)
注意:已经定义好的变量可以重新定义,并且可以使用变量赋值
3>unset 变量名 取消变量的定义,取消定义后变量不可以重新使用,除非重新定义。
4>readonly 不允许变量修改
格式: readonly 变量=值
注意:readonly变量不可以unset
练习: 请定义三个变量,年龄,性别,姓名 用echo打印

5>变量命名规则

   命名中只可以是字母下划线数字,不可以是其他特殊符号
    变量名中间不可以用空格   ac dd 是两个变量
   不能使用标点符号
   不能使用shell中的关键字
   不可以数字开头,只可以是下划线和字母开头

6>字符串:一串字符连接起来

两种表示方式:用单引号 ‘adsfad${name}’   双引号“adasd${name}”
              注意:如果是单引号,会照常输出,变量也会当做字符串内容
                       如果是双引号,会把变量替换,打印变量的值。
字符串拼接: name='danny'${age}' good'
字符串的长度:echo ${#string}   例如 name='danny'  echo ${#name}结果是5
截取字符串: echo ${string:2:5}   ;其中2表示从第三个字符开始,5表示总共打印5个字符   
内容注释:可以用#做单行注释。(注释对电脑来说就是空白,给人看的)

7> 预定义变量

 定义:预先在shell脚本中定义好的,具有特殊意义,可以直接使用的变量。
$0:   表示当前sh的文件名和路径
$1:   第一个参数的内容    比如在终端执行shell的时候   ./good.sh  abc def  则$1表示abc
$@:表示所有的参数内容 
$#   :表示参数的个数

$* :表示所有参数
$? :表示上一个指令是否成功 如果成功则为0 如果失败 为非0
$$ : 当前进程的id

8>系统环境变量(域名)

9> 数组

10>功能性

1> 输入语句
 read:从键盘输入的内存存入到 变量中
 多个读取: read 变量1 变量2 变量3
 练习:请从键盘输入3个值,连接到一起后打印出来。
   read name age sex
   echo $name$age$sex
2>expr 算数语句
  expr:用来做加减乘除的整数运算。
  使用: expr 变量 运算符 变量
   使用: `expr $a + $b`  
              `expr $a \* $b`      表示乘法  
               `expr $a / $b`
               `expr $a % $b`
   注意: 乘号运算符需要用\* ,(转义字符)
              反单引号在esc下面

Linux学习第四天:

一、shell脚本系统环境变量

系统环境变量:和系统相关的并且已经预定义好的变量。
PATH: 环境变量中的路径信息。文件或者命令在当前路径下找不到则从PATH路径中查找。
USER:当前的用户名
UID:当前用户的id
HOME:当前用户的主目录位置
PWD:当前所在的位置
TERM:终端的类型 xterm
备注: 多行注释表示可以对跨行的代码一次性的注释。格式如下
:<<!
sadgasd
!

二、测试语句

1.中括号用来实现逻辑运算,是计算测试语句的运算符 [ ]

2.关系运算符

-eq : 比较左右两个值是否相等
-ne:比较两个值不相等则为真
-gt :比较左值是否大于右值,如果大于则结果为真
-ge :比较左值大于或者等于右值,满足则为真
-lt : 比较左值是否小于右值,如果小于则结果为真
-le :比较左值是否小于等于右值,如果满足则结果为真
-o :表示或者的关系,表达式左侧和右侧有一个为真结果为真
-a: 表示并且的关系,表达式左侧和右侧都为真结果为真

	#输入三个值: 判断哪个值最大,打印出来。
 	案例:
	 echo "请输入三个值"
	 read num1 num2 num3

	if [ $num1 -ge  $num2 -a $num1 -ge $num3 ]
	then
		echo "最大值${num1}"
	fi
    if [ $num2 -ge  $num1 -a $num2 -ge $num3 ]
  	then
	echo "最大值${num2}"
   	fi
	
    if [ $num3 -ge  $num1 -a $num3 -ge $num2 ]
    then
	echo "最大值${num3}"
    fi

3.文件运算符

 -b 文件名:判断文件是否为块设备文件
 -x 文件名:判断文件是否有执行权限,不管是哪个用户,只要有就行
 -r 文件名:判断文件是否有读权限,不管是哪个用户,只要有就行
 -w 文件名:判断文件是否有写权限,不管是哪个用户,只要有就行
 -e 文件名: 判断文件是否存在
 -f  文件名:判断文件是否为普通文件
 -p 文件名:判断文件是否为管道文件
 -s 文件名: 判断文件是否存在,并且不为空
 文件名1 -ot 文件名2: 判断文件1是否比文件2更旧
 文件名1 -nt  文件名2:判断文件1是否比文件2 更新
 案例:
      echo "请输入文件名"
      read myfile
      if test -x $myfile
      then
	  echo "danny有可执行权限"
      fi

      if test './danny' -nt $myfile
      then
      echo "danny是否比${myfile}新"
      fi

      if test './danny' -ot $myfile
      then
	  echo "danny更旧"
      fi

4.test语句:用来替换中括号,可以做逻辑运算

 格式: test 测试条件
 等价: [ 测试条件 ]
 案例: if test $a -gt $b
 练习:判断文件是否存在,如果存在则判断是否为目录,如果是目录则跳 转到目录中后创建danny文件。

三、分支语句和循环语句

if分支语句

  1.  if是分支语句,使用格式如下
 if [ 测试语句 ]
 then
        语句
 fi
 
 2.c语言中的if语句格式
 if(条件)
 {
   语句;
 }
 
 3.格式2:如果满足条件执行if,如果不满足判断第二个条件elif,如果都不满足执行else
 if 测试语句1
 then
        语句2
 elif  测试语句3
 then
       语句4
 else
       语句5
 fi

执行:首先判断测试语句1是否满足,如果满足执行语句2后结束if,如果if测试语句为假,则继续判断测试语句3,
如果测试语句3为真,执行语句4后结束if语句,如果条件都不满足则执行else中的语句5;elif可以有多个。

练习:学生成绩的等级打印,如果输入的成绩是100到90之间则打印A等,如果是80到89则打印b等,
如果是70到79打印c等,剩下所有的都是d等,输入成绩只可以是0到100之间。    
echo "请输入成绩"
read score
if test $score -ge 90 -a $score -le 100
then
echo "你的成绩${score} 是A等"
elif test $score -ge 80 #如果第一个条件不满足则成绩一定小于90
then
echo "你的成绩${score} 是B等"
elif test $score -ge 70
then
echo "你的成绩${score} 是C等"
else 
echo "你的成绩${score} 是D等"
fi

4.if的嵌套:在if中还有if else

  格式:  
if 测试语句1
then   
       if 测试语句2
       then  
             语句3
       else
           语句4
      fi
 elif 测试语句5
 then
     语句6
 else
    语句7;
 fi

执行: 先判断测试语句1是否满足,如果满足则继续判断测试语句2,如果测试语句2满足则执行语句3后退出外部if,如果测试语句2不满足,
练习: 输入一个年份,判断是否为闰年(年份可以被4整除,不可以被100整除的年份,或者可以被400整除)

num1=`expr $year % 4`
num2=`expr $year % 100`
num3=`expr $year % 400`

if [ $num3 -eq 0 ] #可以被400整除
then
echo "${year}是闰年"
else
if [ $num1 -eq 0 ]
then
	if [ $num2 -ne 0 ]
	then
		echo "${year}是闰年"
	else
		echo "${year}不是闰年"
	fi
else
	echo "${year}不是闰年"
fi
fi

5.while循环语句

1>循环语句:不断的执行某一些代码。
2>格式: while 测试语句
do
循环体
done
3>c语言中:
while(判断语句)
{
循环体
}
4>执行:先判断测试语句是否为真,如果为真则执行循环体代码,然后继续判断测试语句是否为真一直执行循环体,直到测试语句为假则结束

练习:请用while循环计算1到100的和
#! /bin/bash
num=0 
sum=0
while [ $num -lt 100 ]
do
 num=`expr $num + 1`
 sum=`expr $sum + $num`
done
echo "$sum"

5.until循环

格式: until 测试语句
do
循环体
done
特点: 条件不满足则执行循环体,条件满足则退出循环。
练习:请用until循环,计算1到100的奇数和。

6.for循环

格式: for 变量 in 列表
do
循环体
done
执行:每次从值列表中取出一个值存入到变量中,进入循环体执行代码,知道所有列表中的值被取出。
退出循环:break和continue。

练习: 请用for循环打印出所有的参数。例如 ./abc.sh  1 2 a d dsd 
   temp=1
  for num in $*
   do
	echo "第${temp}个参数是${num}"
	temp=`expr $temp + 1`
 done

练习: 请打印当前目录下的文件和目录,如果是文件 在最后面加[文件],如果是目录则在目录			最后面加上[目录]
   #!/bin/bash

for num in `ls ~` #只可以在当前目录
do
if [ -f $num ]
then
	echo "${num}[文件]"
elif [ -d $num ]
then
	echo "${num}[目录]"
else
	echo "${num}[什么都不是]"
fi
done

7.函数

函数:一块代码的封装,方便使用,减少代码量,使代码模块化。
格式: function 函数名()
{
函数体;
}
调用: 函数名; 直接使用函数名的方式调用函数。
注意:function可以省略。

8.数组

定义: 多个数据的集合,使用方便,一个名字加下标就表示一个变量
格式:数组名=(值1 值2)
使用: 数组名 [ 下标 ] 例如 a r r = ( 1 2 ′ a ′ ) e c h o " {数组名[下标]} 例如 arr=(1 2 'a') echo " 数组名[下标]例如arr=(12a)echo"{ar[0]}"
赋值:数组名[下标]=值 ;可以修改数组中的值。
注意:下标从0开始,arr[0]表示第一个元素。在数组中可以有多中数据类型。

练习
  1 #! /bin/bash
  2
  3 myarr=(1 2 'a' "sdg") #定义一个数组
  4 echo "${myarr[4]}"
  5 myarr[4]=danny   #给元素赋值
  6
  7 echo "${myarr[4]}"
  8 #打印所有元素
  9 for temp in ${myarr[@]}
 10 do
 11     echo $temp
 12 done
 13 echo "${#myarr[4]}" #获取单个元素的长度
 14 echo "${myarr[@]}" #表示所有的参数

Linux学习第五天:

1.磁盘命令

磁盘命令:处理硬盘的命令(暂时这么理解)

1> df 查询磁盘的设备名

   /dev/sda1 (文件系统)     39089600(块大小)  5591140(已使用大小) 31489784(可使用大小)   16%(使用比例) /   挂载点

2.tmpfs系统是内核直接维系的一个虚拟内存控件(临时文件系统)可以提供RAM一样块的读写速度。

3. du 列出指定路径中的 文件和目录的使用磁盘块数(每一块是512字节)

4. fdisk

作用: 查看磁盘的分区情况
格式: fdisk -l 磁盘名称
例如:
设备 启动 Start 末尾 扇区 Size Id 类型
/dev/sda1 * 2048 79693823 79691776 38G 83 Linux
/dev/sda2 79695870 83884031 4188162 2G 5 扩展
/dev/sda5 79695872 83884031 4188160 2G 82 Linux

5. mount:挂载u盘,移动硬盘,光盘

格式: mount 设备文件名 挂载点/mnt/u
挂载:在linux下是树状的文件结构,如果使用u盘, 需要挂到mnt下的某个子目录中,u盘文件和根目录相关联
步骤:
1> 插入u盘前先用fdisk-l 查看下现有的磁盘
2>插入u盘,继续使用fdisk -l查看增加的磁盘名称
3>在mnt目录下创建一个子目录,例如:sudo mkdir /mnt/usb
4>使用命令开始挂载:mount -t vfat /dev/sda6 /mnt/usb
5>挂载成功后可以直接访问/mnt/usb中的文件,也就是u盘中的文件

6. umount 目标设备 挂载目录

(插上优盘,把u盘挂载到mnt目录中)–9龚伟-作业
找到mnt中的目录,可以查看到u盘中的文件,说明挂载成功。

二、网络命令

1>ifconfig 查看网卡的设备信息

 格式:ifconfig 网卡设备名 ip地址; 临时设置。
 案例:sudo ifconfig eth0 192.168.1.123   ;设置ip地址 
 案例:sudo ifconfig eth0 netmask 255.255.0.0  ;子网掩码
 案例: sudo ifconfig eth0 broadcast 192.168.1.200  ;设置广播地址
 格式: sudo ifconfig 网卡设备名 down     ;断网
 格式: sudo ifconfig 网卡设备名 up          ;联网

ipconfig  在windows下查看设备的网卡信息 (MAC)
 本地环回:127.0.0.1   01111111

2>ping 测试一下网络是否联通

 格式:ping  + ip地址    查看和某一个ip地址是否联通
 格式:ping + 域名       查看某个域名是否联通,一直打印,用ctrl+c结束
 格式: ping -c 5 域名 ; 打印5次后结束

3> telnet 远程登录(TCP协议)

 格式:telnet 目标ip 端口号
 (http--80   mysql---4416 QQ--8080 oracle---8000)

4> ssh 安全远程登录(对用户信息加密)

格式: ssh 目标ip地址 端口号

5> netstat 查看网络的状态信息

格式:netstat 参数
参数: -r 显示路由表。
-i 显示网络的接口列表 lo ,eth0。
-g 显示IPV4和IPV6的成员
-s 每个协议的数据统计
-a (自学)

三、.gcc编译器

1、gcc 把c语言程序编译成可执行程序的工具,g++正对于c++,gcj–java
2.编译工具:gcc
编辑工具: vim gedit

3.编译原理

1> 预处理
     作用:把头文件等复制粘贴到指定文件,检测预处理语法是错误。
     格式: gcc -E  *.c(源文件) -o *.i(预处理文件)
2> 编译
      作用:检查c语言的语法
               把c语言的代码编译成汇编语言代码
              进行简单的分区(代码运行放内存,先确定存放位置)
      格式: gcc -S *.i(预处理文件) -o *.s(汇编文件)
3> 汇编
        作用:将汇编语言转换成二进制的机器指令
                  名称的统一处理
                  继续分区处理
          格式: gcc -c *.s(汇编文件) -o *.o(目标文件)
4> 链接
        作用:把目标文件和其他的库文件关联(动态库*.so和静态库*.a)
        格式: gcc *.o(目标文件) -o a.out(可执行程序)
        注意:如果咩有-o则会生成默认的可执行程序a.out


 选项:  -g  做调试使用
            -wall 显示警告信息
             -l   添加库文件

四、make工具

1.安装:sudo apt-get install make

2.make: 主要是解决多文件联编的问题。

        1> 如果用gcc来联编:容易少写文件,文件名写错。
        2>make方便进行一次性的编写,方便团队编译。
        3> “自动化编译”,一旦写好,只需要用make命令,整个项目编译,提高工作效率

3.使用make

1> 编写多个.c文件
2> 编写makefile文件(文件名不可以修改)
3> 在终端输入make ,直接会在当前目录中查找makefile文件
4> ./可执行程序 执行代码

4.makefile文件规则

   目标:依赖关系
   <tab>依赖列表:表示生产目标所需要的文件
 abc : head.o main.o 
gcc -o abc head.o main.o #说明head.o main.o产生abc
 head.o : head.c
gcc -c head.c -o head.o
main.o :main.c
gcc -c main.c -o main.o

5.只会编译修改后的文件,没修改的文件不会编译。(10w+)

6.伪目标

   伪目标:不在终极目标体系中,为了安装或者打包而建立的伪目标
    伪目标名:
     <tab>执行命令
   调用:make 伪目标名

7.定义变量

 定义变量格式:
     变量名:=变量值     #覆盖的方式赋值
     变量名 +=变量值   #级联的方式赋值
  使用变量:${变量名}       或者  $(变量名)

8. 内置变量

  makefile中已经定义好的变量,直接使用
  $@: 目标
  $^: 所有依赖列表,可以在伪目标中使用
  $<:依赖列表中的第一个
  $?:所有依赖列表,不可以在伪目标中使用

五、GDB

  1. gdb:用来调试运行中的错误。或者查看运行中的数据信息。
  2.安装 sudo apt-get install gdb
  3查看版本: gdb -v

4.在使用gdb前,需要用gcc -g来编译,如果没有-g则没法使用gdb

5.使用: gdb 可执行程序名

6.查看源代码

1>list 文件名:行号 查看文件中行号对应的前后5行的代码
2>l 行号 l等价于list,只有一个文件时候不需要用文件名

7.断点:代码执行过程中,希望停止在某一行,则可以打断点。

1> break 行号
2> b 文件名:行号
3>查看断点方式 info break
(gdb) info b

Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040054d in main at main.c:12
2 breakpoint keep y 0x0000000000400531 in find at head.c:13
4> 执行代码: r 或者 run
5> 执行下一行: n 或者 next
6> 进入函数执行:s或者 step
7> 打印变量值: print 变量
8>监控变量值:display 变量值
9> 结束单步执行: continue (执行到下一个断点停止)
10>退出gbd: q 或者quit
11> 删除断点: delete 断点号

总结:

博主就是在复习的过程中顺便总结下知识点,以便以后查看学习。
注:本博客仅供学习和参考,内容较多,难免会有错误,请大家多多包涵。到这里Linux的基本部分就结束啦,感谢观看。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值