Linux版本分为内核版本和发行版本。Linux和unix非常相像,但是也会有区别。
应用程序调用shell,shell调用内核,内核将结果返回给shell,shell将结果返回给应用。操作系统安装之后都是一个个的文件夹。Linux最终要的是内核和shell,文件系统和应用程序都是需要组织和配置的。
0表示关机。1表示只有一个用户可以登陆,就是系统管理员账号。2表示多个用户,没有网络。3表示多用户,默认的。4用户自定义做操作,比如不允许哪些服务启动。5图形化界面。6重启。
ls -a : 显示隐藏文件。
pwd:显示当前目录位置。
File:显示文件的类型
root@ubuntu:/dev# file vfio
vfio: directory
Touch 文件名,创建文件
Cp:复制文件
root@ubuntu:/yw/df1# cp Dockerfile Dockerfile1
root@ubuntu:/yw/df1# ls
root@ubuntu:/yw# cp -r df1 df2 : 复制目录
Mv:移动文件
root@ubuntu:/yw/df1# mv Dockerfile ../Dock
Which,whereis,locate,find
Which:查找可执行程序(要在指定的用户环境变量里面查找)
root@ubuntu:/yw# which docker
/usr/bin/docker
Linux里面安装软件是有标准的安装位置的,可执行程序在/usr/bin目录下面,配置文件在/etc下面,手册帮助说明在/usr/share/man/man1/下面,
root@ubuntu:/home/yw1989# whereis docker
docker: /usr/bin/docker /etc/docker /usr/share/docker.io /usr/share/man/man1/docker.1.gz
root@ubuntu:/home/yw1989# whereis pass
pass: : 表示没有
root@ubuntu:/home/yw1989# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
pass是存在的但是whereis没有找到,whereis和locate都是在查找自己的数据库,安装软件的时候相关的信息就已经写到数据库里面去了,所以whereis和locate速度非常快。
Locate:也是一个查找,比which和whereis都要详细很多。就是只要涉及mkdir都找出来, 字符查找。
root@ubuntu:/home# which mkdir
/bin/mkdir
root@ubuntu:/home# whereis mkdir
mkdir: /bin/mkdir /usr/share/man/man1/mkdir.1.gz /usr/share/man/man2/mkdir.2.gz
root@ubuntu:/home# locate mkdir
/bin/mkdir
/usr/bin/gvfs-mkdir
/usr/lib/klibc/bin/mkdir
/usr/share/bash-completion/completions/gvfs-mkdir
/usr/share/man/man1/gvfs-mkdir.1.gz
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man2/mkdir.2.gz
/usr/share/man/man2/mkdirat.2.gz
/var/lib/docker/overlay2/5f45f46deaffd568fe89881b638f5c3655968bbc52e30634f415f075b3ae43ed/diff/bin/mkdir
/var/lib/docker/overlay2/5f45f46deaffd568fe89881b638f5c3655968bbc52e30634f415f075b3ae43ed/diff/usr/share/man/man1/mkdir.1.gz
Locate的信息比较多,可以输出到文件,然后查看:
root@ubuntu:/home# locate pass > 1.txt
root@ubuntu:/home# ls
1.txt yw1989
root@ubuntu:/home# vim 1.txt
有时候有些文件既不是可执行程序,也不是安装生成的(没有加入数据库),是我们自己创建的,就要用find:
root@ubuntu:/home/yw1989# find / -iname dockerfile (find / -iname *dockerfile*)
/home/yw1989/dockerfile
/home/yw1989/dockerfile/Dockerfile
先使用which,whereis,locate,最后使用find,因为find是查找硬盘的比较慢。
-普通文件
d :目录
l:符号连接文件,目录可以做连接,文件也可以做连接,实际上它指向另一个文件,类似于快捷方式,
lrwxrwxrwx 1 root root 30 2月 2 06:46 vmlinuz -> boot/vmlinuz-4.13.0-32-generic
c:字符设备文件,比如硬件信息查看cdrom,软驱fd,这些设备文件是打不开的,用vim打开也是空的。
root@ubuntu:/dev# ls -l
total 0
crw------- 1 root root 10, 175 2月 8 22:38 agpgart
crw------- 1 root root 10, 235 2月 8 22:38 autofs
输入重定向基本不使用。
wc是统计文件的信息,统计行数。wc会去读取这个文件,并统计行数
root@ubuntu:/yw# wc < Dock
10 38 266
进程
进程是和程序有依赖关系的,是程序在执行过程中产生的一次执行过程。进程是为了程序在执行过程中不会产生任何干扰,比如window系统现在是多用户多任务,比如打开音乐并且写文档,要相互不影响,当任务结束后进程就消息了。
程序:代码的集合。程序再运行的过程中产生进程,程序是由一个个的进程组成的,可以产生多个进程。产生几个进程取决于程序怎么写的。进程也是有生命周期的。程序结束的时候进程也会结束。程序大于进程。
killall -u apache //会发现apache进程并没有全部被杀死,因为apache的父进程没有杀掉,会再次派生出子进程。有的程序会派生出父进程和子进程,有的没有父进程,就是一堆的进程。
kill 3957 //根据root启动的父进程号来杀
系统启动就启动的进程叫做后台进程,或者叫做守护进程(服务的方式)。除了守护进程还有一个叫做交互进程,交互进程启动并且里面的代码执行完了之后,进程就停止了。
进程启动:前台启动和后台启动。后台启动就是守护进程启动,可以是随着系统启动或者是定时器启动。前台启动就是手动执行程序,执行完进程就完了。
ps -ef //显示进程信息,UID是进程是基于用户启动的,pid是进程号,ppid是父进程,父进程是子进程的父亲,子进程是父进程派生出来的,
ps aux //也可以查看进程信息,只是有了cpu使用率内存使用率,
ps aux | grep apache
jobs
jobs作业控制是针对用户自定义的程序,而不是针对系统的守护进程系统服务之类的,jobs是没法操作这些的,比如文件上传下载,可以放到后台去执行,fg 1,bg 1,1是jobs号,来放到前台和后台执行。
root@ubuntu:/# sleep 1000
^Z :ctrl + Z暂时停止
[1]+ Stopped sleep 1000 :暂时性停止
root@ubuntu:/# sleep 2000
^Z :ctrl + Z暂时停止
[2]+ Stopped sleep 2000
root@ubuntu:/# ps -ef | grep sleep :sleep任务都有进程的
root 3746 3707 0 22:48 pts/2 00:00:00 sleep 1000
root 3751 3707 0 22:50 pts/2 00:00:00 sleep 2000
root@ubuntu:/# jobs
[1]- Stopped sleep 1000 :后台是处于停止的状态
[2]+ Stopped sleep 2000 :后台是处于停止的状态
root@ubuntu:/# jobs 1 :显示第一个进程
[1]- Stopped sleep 1000
root@ubuntu:/# jobs 2 :显示第二个进程
[2]+ Stopped sleep 2000
root@ubuntu:/# fg 1 :1是jobs号,放到前台运行,现在又开始运行了
sleep 1000
root@ubuntu:/# bg 1 :jobs1放到后台执行,sleep就到后台执行去了
[1]+ sleep 1000 &
root@ubuntu:/# bg 2
[2]+ sleep 2000 &
root@ubuntu:/# jobs
[1]- Running sleep 1000 & :running状态,且是在后台运行
[2]+ Running sleep 2000 & :running状态,且是在后台运行
所以执行程序的时候可以放到后台也可以放到前台执行,这就是作业控制命令jobs,一个程序是前台运行的,ctrl+Z是暂时性停止,通过jobs就可以看到程序的状态。
yum安装
bin和sbin是系统的命令。应用程序的命令不在这里,应用程序的命令在usr/bin,usr/sbin里面。如果使用系统自带的命令比如bash,cat,chmod,cp跟应用软件是没有直接关系的,是登陆到系统就可以直接调用的,不用在乎在不在bin和sbin目录下面,
安装应用程序都会保存在usr/bin,usr/sbin目录下面,相当于是系统的额外的第三方应用软件,有的是可以直接运行的,有的是要跑到目录下面执行的。
yum不属于系统核心的基础命令,所以yum是一个应用软件或者是应用工具,只是集成到了发行版中了。
命令是基于命令行的方式带选项的方式运行,应用程序有的是基于命令行方式,有的是基于图形界面方式运行的。
root@ubuntu:/usr/bin# ls
yum yum-builddep yum-config-manager yumdownloader yum-groups-manager yuvsplittoppm yuvtoppm
linux中安装a软件会要你去安装b软件,安装b软件的时候要安装一些依赖库。并且还有版本问题。yum就是解决了依赖问题。
yum update :升级操作系统
yum search httpd :搜索相关的软件
yum install httpd :安装软件
yum update httpd :升级软件
yum remove httpd :移除指定的软件
yum list httpd :列出软件详细信息
yum的关键之处是要有可靠的软件仓库,它可以是http或ftp站点,也可以是本地软件池。
安装软件要找一个好点的软件源,软件要全安装要快,
root@ubuntu:/etc/yum/repos.d# ll
Centos-Base.repo Centos-Media.repo Centos-Debuginfo.repo Centos-Vault.repo
Centos-Base.repo里面有镜像站点,就是软件仓库的地址。
yum/repos.d里面是软件仓库源,要更换yum软件仓库源的时候,先把原有的软件仓库源做一个备份,然后去国内镜像下载仓库文件并放到yum/repos.d里面去,先要他生成一下缓存,有了缓存后面下载安装更新软件都是比较快的,
命令:系统命令,直接运行。应用程序命令,有的直接运行,有的要进入所在目录运行。
应用程序运行方式:有的命令行运行,有的图形界面运行。
应用程序:分为系统应用程序和第三方应用程序。
应用程序
应用程序的组成部分:普通执行程序文件在/usr/bin。与服务器相关的程序文件/usr/sbin(s是server的简称)。应用程序配置文件在/etc。应用程序文档文件/usr/share/doc。应用程序手册文件在usr/share/man。
一个应用程序安装完成之后是有5大部分组成的。安装完成之后可以到usr/bin,usr/sbin找到我们的可执行文件,etc找配置文件。
root@ubuntu:/usr/bin# ls -l | grep docker
-rwxr-xr-x 1 root root 15651672 11月 2 13:45 docker
-rwxr-xr-x 1 root root 43299504 11月 2 13:45 dockerd
-rwxr-xr-x 1 root root 866264 11月 2 13:45 docker-init
-rwxr-xr-x 1 root root 2362184 11月 2 13:45 docker-proxy
root@ubuntu:/usr/sbin# ll | grep docker
root@ubuntu:/usr/sbin#
root@ubuntu:/etc# ll | grep docker
drwx------ 2 root root 4096 2月 9 01:33 docker/
root@ubuntu:/etc# cd docker/
root@ubuntu:/etc/docker# ls
key.json
root@ubuntu:/usr/share/doc# ll -s | grep docker
4 drwxr-xr-x 2 root root 4096 2月 4 02:02 docker.io/
root@ubuntu:/usr/share/doc/docker.io# ls
changelog.Debian.gz copyright README.Debian README.md.gz ROADMAP.md.gz
root@ubuntu:/usr/share/man# ll -s | grep docker
root@ubuntu:/usr/share/man#
RPM
linux有许多的发行版,产生了许多的软件包管理工具,例如redhat/centos的yum,ubuntu/debian的apt-get,suse的yast等
rpm是查询已经安装到操作系统的软件信息。rpm是大多数linux发行版支持的软件安装程序,rpm既是一个标准也是一个命令,yum里面也使用了rpm来安装,只是yum就不关心依赖了。使用rpm就需要手动处理依赖关系。yum基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装。
Linux下软件的格式:软件名称.版本号.支持的平台(i386,x86_64,i586,i686。I是英特尔,386,586,686都可以运行在32位操作系统,x86_64表示64位的安装软件),rpm是linux安装文件之一。