仗剑走天涯

个人站

苟若恒,何必三更起五更眠,最无益,莫过一日暴十日寒


Linux 学习笔记(31h/4d 4.10-14)

目录


Linux 学习笔记(31h/4d 4.10-14)

1. 安装-发展历史-快照功能

安装Vm-tools–让linux与CentOs共享数据

  • vmtools安装后,可以让我们在 windows下更好的管理vm虚拟机

  • 可以设置 windows和 centos的共享文件夹

  • 在root用户下将 ` VMwareTools-10.1.6-5214329.tar.gz `复制到 opt文件夹

  • cd /opt文件夹下
  • 执行解压命令tar -zxvf VMwareTools-10.1.6-5214329.tar.gz
  • 得到解压包,进入cd vmware-tools-distrib/
  • ` ./vmware-install.pl `一直enter进行安装

在centos设置中,指定需要共享的文件夹

2.linux目录

  • /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv: 该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin: 系统用户使用的应用程序。

  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src: 内核源代码默认的放置目录。

  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

CentOS防火墙开启和关闭端口

1、开放和关闭端口

firewall-cmd --zone=public --add-port=9200/tcp --permanent     # 开放端口
firewall-cmd --zone=public --remove-port=9200/tcp --permanent  # 关闭端口
firewall-cmd --reload                                          # 重新载入配置,让开放或关闭的端口配置生效

–zone=public:表示作用域为公共

–permanent:表示永久生效

img

2、查看端口开放情况

firewall-cmd --zone=public --list-ports            # 查询端口开放列表
firewall-cmd --zone=public --query-port=9200/tcp   # 查询具体端口是否开放

img

img

3、开启和关闭防火墙

systemctl start firewalld      # 启动防火墙
systemctl status firewalld     # 查看防火墙状态
systemctl stop firewalld       # 关闭防火墙

systemctl disable firewalld    # 开启不启动防火墙
systemctl enable firewalld     # 开机启动防火墙

4、其他

firewall-cmd --version    # 查看版本
firewall-cmd --help       # 查看帮助
firewall-cmd --state      # 查看运行状态

3.远程登陆和文件上传下载

使用两款软件 xshell & xftp

4.vim 和 linux指令

关机和重启

  • shutdown -h now 马上关机
  • shutdown -h 1 1min后关机
  • reboot 重启
  • sync 将内存的数据同步到磁盘(重启或者关机之前操作一波)

登录和注销,切换用户

  • su root 切换到root权限的用户
  • loginout 注销当前用户

用户添加和删除(root权限下操作)

  • adduser newUserName

  • deluser existedUserName 此时该用户的home 目录会保留
  • deluser -r existedUserName 此时该用户的home 目录不会保留

  • id username 查看用户信息image-20210411103544931

切换用户

  • su - userName

由权限高的用户 切换到权限低的用户,不需要输入密码,可以使用logout/exit返回到原高级权限的用户

查看当前用户(登录用户)

who am i

image-20210411105240516

用户组(便于对用户进行统一的权限管理)

默认情况下是,创建一个新的用户时,就自动为该用户创建一个同名的组

给新建用户添加组

  • groupadd groupName 添加组
  • groupdel groupName 删除组
  • useradd -g groupName userName 将用户添加到组中

修改用户组

  • usermod -g 组名 用户名

与用户账号有关的系统文件

/etc/passwd文件是用户管理工作涉及的最重要的一个文件。

Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。

这个文件对所有用户都是可读的。

/etc/shadow

/etc/group 用户组的所有信息

5.实用指令

指定运行级别

  • 0: 系统停机(关机)模式,系统默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机。
  • 1:单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
  • 2:多用户模式,没有NFS网络支持。
  • 3:完整的多用户文本模式,有NFS,登陆后进入控制台命令模式。
  • 4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,以切换到这个模式来做一些设置。
  • 5:图形化模式,登陆后进入图形GUI模式或GNOME、KDE图形化界面,如X Window系统。
  • 6:重启模式,默认运行级别不能设为6,否则不能正常启动,就会一直开机重启开机重启。

获取运行级别

systemctl get-default
graphical.target

设置默认运行时级别

  • systemctl set-default multi-user.target 设置为命令行模式(3)
  • systemctl set-default graphical.target 设置为命令行模式(5)

找回root密码

  • 重启linux系统,然后输入e
  • 进入单用户模式–找到以 Linux16 开头内容所在的行数 ,在行的最后面输入:init=/bin/sh,并按住ctrl+x
  • 输入 mount -o remount,rw /
  • 输入passwd回车后开始重置密码
  • 连续两次输入密码
  • touch / .autorelabel
  • exec /sbin/init

帮助指令

man ls 查看ls命令用法

文件目录类

pwd 查看当前目录的绝对路径

cd ~定位到当前用户的home目录

mkdir 文件路径 创建一级目录

mkdir -p 文件路径 创建多级目录

rmdir 文件路径 删除空目录

rm -rf 文件路径 删除多级目录

touch 文件名.tex 创建空文件

cp [-r] 源文件 目的地 拷贝文件

cp -r 源文件夹路径 目的文件夹路劲 拷贝文件夹

/cp -r 源文件夹路径 目的文件夹路劲 强制覆盖 不提示 拷贝文件夹

mv [source] [dest] 重命名或者移动文件

cat [-n] [文件路径] 只能查看文件,不能修改文件 -n 为可选,表示显示行号

less [文件路径] 查看较大文件

echo [想要输出的内容] 向控制台输出 或者 重定向写入到文件中 echo [想要输出的内容] > [文件路径]

head 显示文件开头的内容(默认前10行) head -n 5 查看前5行

tail [文件路径] 显示文件最后内容(默认最后10行)

tail -f [文件路径] 实时监控文件

解决 rm -f /* 误删之后的操作

[root@localhost note]# rm -f /*
rm: cannot remove ‘/boot’: Is a directory
rm: cannot remove ‘/dev’: Is a directory
rm: cannot remove ‘/etc’: Is a directory
rm: cannot remove ‘/home’: Is a directory
rm: cannot remove ‘/media’: Is a directory
rm: cannot remove ‘/mnt’: Is a directory
rm: cannot remove ‘/note’: Is a directory
rm: cannot remove ‘/opt’: Is a directory
rm: cannot remove ‘/proc’: Is a directory
rm: cannot remove ‘/root’: Is a directory
rm: cannot remove ‘/run’: Is a directory
rm: cannot remove ‘/srv’: Is a directory
rm: cannot remove ‘/swapfile’: Operation not permitted
rm: cannot remove ‘/sys’: Is a directory
rm: cannot remove ‘/tmp’: Is a directory
rm: cannot remove ‘/usr’: Is a directory
rm: cannot remove ‘/vagrant’: Is a directory
rm: cannot remove ‘/var’: Is a directory
[root@localhost note]# ls
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

# 使用绝对路径的命令
[root@localhost note]# /usr/sbin/sln /usr/lib64 /lib64
[root@localhost note]# ls
b.a
#  添加可能删除了的链接
[root@localhost note]# ln -s /usr/lib /lib
[root@localhost note]# ln -s /usr/bin /bin
[root@localhost note]# ln -s /usr/sbin /sbin
[root@localhost note]# ls
b.a

写入和追加

覆盖写入echo [想要输出的内容] > [文件路径]

追加写入ls -l > [文件路径] 若文件不存在则创建

显示日历信息

image-20210411213935463

In -s [源文件] [链接名称] 软连接

history 查看历史指令 history10 查看最近的10条指令 !num执行编号为num的该条历史命令

时间指令

date

2021年 04月 11日 星期日 22:34:50 CST

搜索查找指令

` find /opt -user root` 按用户查找

find / size +200M 查找大于200M的文件

locate [文件路径] 查找文件路径 ,在执行之前,运行 updatedb

which [指令名称] 查看命令在哪个路径下

cat [文件路径] | grep [要查找的内容]

压缩和解压

gzip [压缩名称.gz] [待压缩的文件] 只能将文件压缩为 *.gz

gunzip[待解压文件名称.gz] 解压

zip [-r] [压缩名称.zip] [待压缩的文件] -r 递归压缩

unzip [-d] [destDir] [xx.zip] -d 解压到指定文件夹下

image-20210412094047661

tar -zcvf xxx.tar.gz

tar -zxvf xxx.tar.gz 解压

6.组管理和权限管理

查看文件的所有者

ls -lha

chown [用户名] [文件名] 修改文件所有者

image-20210412105120430

组的创建以及添加用户

groupadd [组名] 创建组

useradd -g [组名] [用户名] 将用户添加到组

修改用户所在组

usermod -g [组名] [用户名]

文件权限信息 一共10位

image-20210412102212766

image-20210412103214827

修改文件所在的组

chgrp [组名] [文件名]

修改文件权限

image-20210412104344994

用数字的方式修改权限

image-20210412104700558

用户的登录权限修改后 再次登录才生效

7.定时任务调度

crond任务调度

crontab [选项]

  • crontab -e 编辑定时任务
  • crontab -l 查看定时任务
  • crontab -r 删除当前用户所有的定时任务

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。

crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

  • ***** 取值范围内的所有数字
  • / 每过多少个数字
  • - 从X到Z
  • 散列数字

每隔1min 向文件中添加信息

  • crontab -e
  • */1 * * * * cal >> a.txt *之间要有空格

定时执行 .sh 文件

  • 创建a.sh 文件 内容为 cal >>a.txt
  • crontab -e 后写入 */1 * * * * ./a.sh

实例

实例1:每1分钟执行一次myCommand

* * * * * myCommand

实例2:每小时的第3和第15分钟执行

3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

0 */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

0 23-7/1 * * * /etc/init.d/smb restart

at 定时任务

  • 一次性执行的任务
  • at [选项] [时间] at 5pm + 2 day ,输入完待执行的命令后,按两次 ctrl + d 退出
  • 查看具体任务 atq
  • 删除任务 atrm [编号]
  • image-20210412165638036

demoimage-20210412170148724

8.linux磁盘分区和挂载

给系统添加硬盘并挂载到文件夹

  • 1.在vm中创建硬盘默认scsi
  • 2.给硬盘设置分区(分1个区即可) fdisk /dev/sdb .选择 n ,选则主分区p,数量为 1
  • 3.格式化磁盘 ` mkfs -t ext4 /dev/sdb1` 完成后会给该磁盘分配一个uuidimage-20210412174236707

  • 4.将硬盘挂载到一个指定的目录 mount /dev/sdb1 /newDisk 成功后,会在新建的硬盘下面出现挂载点

    卸载指令 unmount /dev/sdb1

    重启后 挂载失效

  • 5.永久挂载

    • 修改 vim /ect/fstab

    • image-20210412194956405

    • 执行 mount -a

      这样的话,重启后也挂载

    磁盘情况查询

    df -h

    image-20210412200708801

9.网络配置

网络环境配置,固定ip

关闭了本机的专用网络防火墙,才能在 虚拟机上ping上vmnet8,不然一直处于阻塞状态

image-20210412203338166

  • 指定 IP vi /etc/sysconfig/network-scripts/ifcfg-ens33
  • BOOTPROTO=”static” IPADDR=192.168.204.130 GATEWAY=192.168.204.2 DNS1=192.168.204.2

笔记

设置主机名和host映射

  • 查看主机名 hostname

  • 修改主机名 vim /etc/host 修改里面的名称保存,然后重启即可

  • 给 host 设置别名 修改 C:/Windows/System32/drivers/etc/host 文件,添加

    192.168.204.130 linux

    然后就可以用 ping linux 进行连接

在虚拟机下 使用名称ping主机

  • 添加主机ip vim /etc/hosts 添加 192.168.204.1 [主机名]

    域名查找的过程

    image-20210412221129724

10.进程管理

显示系统执行的进程

  • ps -aux
  • image-20210412222350332

父子进程

  • ps -ef 查看全进程,包含了进程间的子父类关系

    image-20210412223346285

终止进程

image-20210412225339424

再次启动 sshd服务 /bin/systemctl start sshd.service

查看进程树

image-20210413082057375

服务管理

开启和关闭 sshd的远程连接服务

service network [start | stop]

image-20210413082940149

设置是否开机启动该服务

image-20210413083309369

chkconfig 设置自启动

image-20210413084827184

image-20210413092227278

firewall 打开或者关闭端口

image-20210413092709161

动态监控进程

image-20210413093253068

image-20210413093722708

监控网络状态

image-20210413101009451

11.rpm和yum

rpm——Red Hat Package Manager

YUM,全称Yellow dog Updater, Modifier,是一个自由、开源的命令行软件包管理工具,运行在基于RPM包管理的的Linux操作系统(例如RedHat、CentOS、Suse等)。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

简单查询

image-20210413102538199

image-20210413102831869

卸载与安装

image-20210413103320878

image-20210413103339751

yum简介

image-20210413103441906

yum install firefox

12.搭建JavaEE环境

安装jdk

方式1 上传本地的 *.tar.gz包

  • 上传源文件,解压到指定目录 tar -zxvf jdkxxx

  • 将解压后的bin目录,加入到环境变量

    # 1. 编辑 配置文件 设置 java的环境变量
    [root@centos-2 jdk]# vim /etc/profile
    # 2. 在文件的末尾加上 环境变量  保存后退出
    export JAVA_HOME=/usr/local/java/jdk1.8.0_281
    export PATH=$JAVA_HOME/bin:$PATH
      
    #3.让配置文件生效
    [root@centos-2 jdk]# source /etc/profile
      
    #4.测试
    [root@centos-2 /]# java -version
    java version "1.8.0_281"
    Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
      
    

方式2:使用yum安装

# 1.搜索 jdk的版本
[root@centos-2 bin]# yum -y search java | grep jdk
....
java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment 8
java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment
...
java-11-openjdk.i686 : OpenJDK Runtime Environment 11
java-11-openjdk.x86_64 : OpenJDK 11 Runtime Environment
....
#2.选中一个心仪的版本进行安装
[root@centos-2 /]# yum install -y java-11-openjdk.x86_64
...
完毕!

#3.查看自动安装的路径  使用yum安装后 jdk目录位置为  usr/lib/jvm
[root@centos-2 /]# cd /usr/lib/jvm
[root@centos-2 jvm]# ls
java-11-openjdk-11.0.10.0.9-1.el7_9.x86_64  jre-11          jre-11-openjdk-11.0.10.0.9-1.el7_9.x86_64
jre                                         jre-11-openjdk  jre-openjdk

#4.配置环境变量   指定路径
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.10.0.9-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH

#5.让配置文件生效
[root@centos-2 jdk]# source /etc/profile

#6.测试  安装成功
[root@centos-2 /]# java -version
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode, sharing)
  • javac 测试

安装tomcat

  • 解压安装文件 tar -zxvf xxxx
  • 启动 bin下的 ./start.sh 文件
  • 开启8080端口
    • firewall-cmd –permanent –add-port=8080/tcp
    • firewall-cmd –query-port=8080/tcp
    • firewall-cmd –reload 重新加载
  • 在浏览器 访问 linux:8080 或 192.168.204.130/8080
  • image-20210413163440311

安装idea2020

要在 vm的虚拟机界面进行安装

  • 创建文件夹 解压
  • 在bin目录下执行 ./idea.sh 进行安装
  • bug 黑屏解决方案https://blog.csdn.net/woSHIxiaobai2/article/details/104222073
    • cmd中 输入netsh winsock reset 重启

安装mysql

  1. 运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar (或者 联网下载 wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包)

  2. 运行rpm -qa grep mari,查询mariadb相关安装包
  3. 运行rpm -e –nodeps mariadb-libs,rpm -e –nodeps marisa 卸载

  4. 然后开始真正安装mysql,依次运行以下几条

    • rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm

    • rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm

    • rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm

    • rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

  5. 运行systemctl start mysqld.service,启动mysql

  6. 然后开始设置root用户密

  7. Mysql自动给root用户设置随机密码,运行grep “password” /var/log/mysqld.log可看到当前密码

  8. 运行mysql -u root -p,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行

  9. 设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行set global validate_password_policy=0; 提示密码设置策略(validate_password_policy默认值1,)

  10. set password for ‘root’@’localhost’ =password(‘lpkkkkkk’);

  11. 运行flush privileges;使密码设置生效

vmware虚拟机运行卡慢的解决办法

[https://blog.csdn.net/weixin_40612082/article/details/81023088](没啥效果)

13.Shell编程

目的:管理服务器

image-20210413200821019

编写shell的Hello,world

1. 创建 d.sh 文件 vim d.sh,此时的文件没有 可执行权限
#!/bin/bash
echo "hello,world!"
  1. 开启可执行权限 chmod u+x d.sh
  2. 运行脚本 ./d.sh (或者 不加执行权限,直接 执行 sh d.sh

变量的使用

image-20210413203807027

#!/bin/bash
#1. 定义一个变量A  变量于值之间不能有空格
A=100
echo A=$A
#2.撤销变量A
unset A
echo A=$A
#3.声明为静态变量的不能被撤销
readonly B=2
unset B

变量的定义

image-20210413204058343

#4.变量与命令
C=`date`
D=$(date)
echo $C
echo $D		
#2021年 04月 13日 星期二 20:43:12 CST
#2021年 04月 13日 星期二 20:43:12 CST

设置环境变量

目的:类似于全局变量,一经设置,随处可用

  1. 在 /etc/profile 添加环境变量的信息

    export JIMI_HOME=/home/jimi
    
  2. 刷新文件 source /etc/profile
  3. 查看新的环境变量 echo /$JIMI_HOME

多行注释

格式

:<<!

需要注释的代码

!

示例

#5.演示多行注释
:<<!  # 开始
C=`date`
D=$(date)
echo $C
echo $D
!  # 结束
echo kkkkk

位置参数变量

简介image-20210413211421611

#!/bin/bash
# 1.演示传参 
# 第一位置为 命令本身  接下来的为各个参数
echo 0=$0 1=$1 2=$2
# 
echo 参数为=$*
echo 参数的个数为=$#
echo 参数为=$@

image-20210413211310552

运算符

3种基本的用法

  • /$((运算表达式))
  • /$[运算表达式]
  • /$/ expr 运算表达式 此时的 * 要写为 //* 且运算符之间要有空格
#!/bin/bash
#1. 运算的3种基本方式
#A:
R1=$(((2+3)*4))
echo R1=$R1
R2=$[(2+3)*4]
echo R2=$R2
TEMP=`expr 2 + 3`
echo TEMP=$TEMP
R3=`expr $TEMP /* 4`
echo R3=$R3

#2.计算输入和两个数的和
M=$[$1 + $2]
echo $1 + $2 =$M

条件判断

if else-if else 语法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

case语句

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case … esac 语法格式如下:

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

for循环

与其他编程语言类似,Shell支持for循环。

for循环一般格式为:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

结合 /$* 和 /$@ 区别的演示

# 演示 $* 与   $@  的区别   一个将其当作整体    一个分开

for i in "$*"
do
   echo "num is $i"
done


for j in $@
do
   echo num is $j
done

image-20210413222244343

另一种for 求和

# 求和
SUM=0
for (( i=0; i<=$1; i++))
do
        SUM=$[$SUM+$i]
done
echo $SUM

while 语句

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:

while condition
do
    command
done

以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 到 5,然后终止。

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

read读取控制台输入

  • -p 指定读取时的提示符
  • -t 指定等待的时间(s),若在指定时间内未输入,则程序退出
#!/bin/bash
read -p "请输入一个数 num = " NUM
echo $NUM

# 等待 3s 后若没有输入 则程序退出
read -t 3 -p "请输入一个数 num2 = " NUM2
echo $NUM2

函数

  • basename 目的: 获取文件名
  • dirname 目的:获取文件夹

image-20210413225345349

image-20210413225414124

自定义函数

[ function ] funname ()

{

    action;

    [return int;]

}

说明:

  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
#!/bin/bash
# 自定义一个函数,实现  传入的两个数进行求和
getSum(){
#function getSum(){
        read -p "请输入n1 " n1
        read -p "请输入n2 " n2
        echo $n1 "+" $n2 "=" $[$n1 + $n2]
}

getSum $n1 $n2

image-20210413230533174

定时备份数据库demo

14.Ubuntu

start

  • 安装
  • 给root用户设置密码 sudo passwd 设置完后就可以切换到 root sudo root
  • 内置了python环境,可以直接运行python程序

apt 软件管理和远程登录

apt–advanced packaging tool

更新为清华镜像

https://mirrors.tuna.tsinghua.edu.cn/

找到Ubuntu对应版本的信息

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

备份默认地址

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

更新源服务器列表

切换到root用户 su root

清空 sources.list echo ‘’> sources.list

拷贝镜像文件到 sources.list种

更新源

sudo apt-get update

apt 语法

  apt [options] [command] [package ...]
  • options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package:安装的包名。

常用指令

  • 列出所有可更新的软件清单命令:sudo apt update

  • 升级软件包:sudo apt upgrade

    列出可更新的软件包及版本信息:apt list –upgradeable

    升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

  • 安装指定的软件命令:**sudo apt install **

    安装多个软件包:**sudo apt install **

  • 更新指定的软件命令:**sudo apt update **

  • 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:**sudo apt show **

  • 删除软件包命令:**sudo apt remove **

  • 清理不再使用的依赖和库文件: sudo apt autoremove

  • 移除软件包及配置文件: **sudo apt purge **

  • 查找软件包命令: **sudo apt search **

  • 列出所有已安装的包:apt list –installed

  • 列出所有已安装的包的版本信息:apt list –all-versions

远程登录

安装ssh客户端和服务器

sudo apt-get install openssh-server

启动服务

service sshd restart

从一台linux登录到另一台linux

ssh 用户名 @ IP

待补充

日志管理

备份与恢复

可视化

Gcc

gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:

  • 1、预处理,生成 .i 的文件[预处理器cpp]
  • 2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
  • 3、由汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
  • 4、连接目标代码, 生成可执行程序 [链接器ld]

参数详解

-x language filename

设定文件所使用的语言, 使后缀名无效, 对以后的多个有效。也就是根据约定 C 语言的后缀名称是 .c 的,而 C++ 的后缀名是 .C 或者 .cpp, 如果你很个性,决定你的 C 代码文件的后缀名是 .pig 哈哈,那你就要用这个参数, 这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。 可以使用的参数吗有下面的这些:’c’, ‘objective-c’, ‘c-header’, ‘c++’, ‘cpp-output’, ‘assembler’, 与 ‘assembler-with-cpp’。

看到英文,应该可以理解的。

例子用法:

gcc -x c hello.pig 

  

-x none filename

关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型 。

例子用法:

gcc -x c hello.pig -x none hello2.c 

  

-c

只激活预处理,编译,和汇编,也就是他只把程序做成obj文件

例子用法:

gcc -c hello.c 

他将生成 .o 的 obj 文件

-S

只激活预处理和编译,就是指把文件编译成为汇编代码。

例子用法:

gcc -S hello.c 

他将生成 .s 的汇编代码,你可以用文本编辑器察看。

-E

只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面。

例子用法:

gcc -E hello.c > pianoapan.txt 
gcc -E hello.c | more 

慢慢看吧, 一个 hello word 也要与处理成800行的代码。

-o

制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out, 很难听, 如果你和我有同感,改掉它, 哈哈。

例子用法:

  

gcc -o hello.exe hello.c (哦,windows用习惯了) 
  gcc -o hello.asm -S hello.c

-pipe

  

使用管道代替编译中临时文件, 在使用非 gnu 汇编工具的时候, 可能有些问题。

  

gcc -pipe -o hello.exe hello.c 

-ansi

关闭 gnu c中与 ansi c 不兼容的特性, 激活 ansi c 的专有特性(包括禁止一些 asm inline typeof 关键字, 以及 UNIX,vax 等预处理宏)。

-fno-asm

此选项实现 ansi 选项的功能的一部分,它禁止将 asm, inline 和 typeof 用作关键字。

    

-fno-strict-prototype

只对 g++ 起作用, 使用这个选项, g++ 将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数。

而 gcc 无论是否使用这个参数, 都将对没有带参数的函数, 认为城没有显式说明的类型。

  

-fthis-is-varialble

就是向传统 c++ 看齐, 可以使用 this 当一般变量使用。

  

-fcond-mismatch

允许条件表达式的第二和第三参数类型不匹配, 表达式的值将为 void 类型。

  

-funsigned-char 、-fno-signed-char、-fsigned-char 、-fno-unsigned-char

这四个参数是对 char 类型进行设置, 决定将 char 类型设置成 unsigned char(前两个参数)或者 signed char(后两个参数)。

  

-include file

包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用 #include

例子用法:

  

gcc hello.c -include /root/pianopan.h 

  

-imacros file

  

将 file 文件的宏, 扩展到 gcc/g++ 的输入文件, 宏定义本身并不出现在输入文件中。

  

-Dmacro

相当于 C 语言中的 #define macro

  

-Dmacro=defn

相当于 C 语言中的 #define macro=defn

  

-Umacro

相当于 C 语言中的 #undef macro

-undef

  

取消对任何非标准宏的定义

  

-Idir

在你是用 #include “file” 的时候, gcc/g++ 会先在当前目录查找你所制定的头文件, 如果没有找到, 他回到默认的头文件目录找, 如果使用 -I 制定了目录,他会先在你所制定的目录查找, 然后再按常规的顺序去找。

对于 #include, gcc/g++ 会到 -I 制定的目录查找, 查找不到, 然后将到系统的默认的头文件目录查找 。

  

-I-

  

就是取消前一个参数的功能, 所以一般在 -Idir 之后使用。

  

-idirafter dir

在 -I 的目录里面查找失败, 讲到这个目录里面查找。

  

-iprefix prefix 、-iwithprefix dir

一般一起使用, 当 -I 的目录查找失败, 会到 prefix+dir 下查找

  

-nostdinc

  

使编译器不再系统默认的头文件目录里面找头文件, 一般和 -I 联合使用,明确限定头文件的位置。

  

-nostdin C++

 

规定不在 g++ 指定的标准路经中搜索, 但仍在其他路径中搜索, 此选项在创 libg++ 库使用 。

  

-C

 

在预处理的时候, 不删除注释信息, 一般和-E使用, 有时候分析程序,用这个很方便的。

  

-M

 

生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用 gcc -M hello.c 来测试一下,很简单。

  

-MM

 

和上面的那个一样,但是它将忽略由 #include 造成的依赖关系。   

-MD

 

和-M相同,但是输出将导入到.d的文件里面   

-MMD

 

和 -MM 相同,但是输出将导入到 .d 的文件里面。

  

-Wa,option

 

此选项传递 option 给汇编程序; 如果 option 中间有逗号, 就将 option 分成多个选项, 然 后传递给会汇编程序。

  

-Wl.option

 

此选项传递 option 给连接程序; 如果 option 中间有逗号, 就将 option 分成多个选项, 然 后传递给会连接程序。

  

-llibrary

 

制定编译的时候使用的库

  

例子用法

  

gcc -lcurses hello.c

  

使用 ncurses 库编译程序

  

-Ldir

  

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。

  

-O0 、-O1 、-O2 、-O3

  

编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。

      

-g

  

只是编译器,在编译的时候,产生调试信息。

  

-gstabs

  

此选项以 stabs 格式声称调试信息, 但是不包括 gdb 调试信息。

  

-gstabs+

  

此选项以 stabs 格式声称调试信息, 并且包含仅供 gdb 使用的额外调试信息。

  

-ggdb

  

此选项将尽可能的生成 gdb 的可以使用的调试信息。

-static

  

此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行。

-share

 

此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。

-traditional

  

试图让编译器支持传统的C语言特性。

GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。

如果你有两个或少数几个 C 源文件,也可以方便地利用 GCC 编译、连接并生成可执行文件。例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编 译生成一个计算阶乘的程序。