linux基础
虚拟机的连接(3种简介):
1、仅主机
仅主机就是自己能与现有的一些虚拟的主机能够通讯,也能够与自身主机联系,但是不能与外界联网,适用于自己做测试机来用;
2、NAT
相当是主机对外只使用一个ip值,这也是一个公司节省ip的做法,虚拟机可以上网,但是都是通过主机的ip上网,外网是直接访问不到此ip的;
3、桥接
虚拟网卡也相当于跟主机一样是直接连在网线上的,要使用一个ip,你可以访问外网,外网也可以访问你;
关机相关命令:
poweroff:
centos6中:poweroff与halt是一样的都是关机断电
centos7中:poweroff是关机并断电,halt是关机的但是不断电,需要手动去断电
reboot(重启):
reboot -f:强制,不调用shutdown;
reboot -p:切断电源;
shutdown:
shutdown [option] TIME [message]
[option]:
-r:reboot
-h:halt
-c:cancel
TIME:
默认+1
now
+#:几分钟后
DATE:具体时间格式hh:mm message:自定义输入并提示所以登入的用户;时间太久不会提示,15分钟之内吧
注销:
exit,logout,ctrl+d;
注意ctrl+d与ctrl+c的区别:
ctrl+d是正常退出,可以用于登出,也可以用于文本输入的结束或进程结束,能把结束行之前的内容写入磁盘,而ctrl+c属于强制退出,在之前输入的文
本都是不会写入到磁盘,进程之前运行的也将会失效;
终端(常用):
虚拟终端:
在虚拟机的登入进去的图形界面是alt+ctrl+F1,那么F1-6显示为/dev/tty#。如果虚拟终端按键切换不方便,可以使用chvt命令;
chvt 直接接数字切换即可;
图形终端:
图形终端在哪个虚拟终端启动,即位于哪个虚拟终端;
startx在哪个终端下启动,就会出现图形界面(前提有安装图形化工具)
物理终端:
一般仅是救援模式才会用到;
伪终端:
在terminal和ssh工具连接的都是伪终端/tty/pts#
init指令
#0 停机(千万不能把initdefault 设置为0)
#1 单用户模式
#2 多用户,没有 NFS(和级别3相似,会停止部分服务)
#3 完全多用户模式
#4 没有用到
#5 x11(Xwindow)
#6 重新启动
runlevel:可以看到本次的运行等级,如果是直接登入的运行等级,那么前一项显示N
小命令集合:
whoami:
是可以查看当前有效用户
[root@centos7 ~]# whoami root
who am i :
可以看到用户名,终端类型,时间;其实who * *这样三位都可以;
[root@centos7 ~]# who am i root pts/0 2018-07-02 23:01 (192.168.43.102) [root@centos7 ~]# who x x root pts/0 2018-07-02 23:01 (192.168.43.102)
who:
有哪些在运行的终端
[root@centos7 ~]# who root :0 2018-06-29 14:01 (:0) root pts/0 2018-07-02 23:01 (192.168.43.102) root tty2 2018-07-02 10:28 root tty4 2018-07-02 12:10 root pts/1 2018-07-02 13:25 (:1)
who -r:
也有runlevel的功能并且更清楚,还有时间显示;
[root@centos7 ~]# runlevel N 5 [root@centos7 ~]# who -r run-level 5 2018-06-29 14:02
w:
系统当前所以的登录会话及做的操作(进程);
[root@centos7 ~]# w 23:11:04 up 1 day, 8:30, 5 users, load average: 0.12, 0.04, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 :0 Fri14 ?xdm? 15:24 0.76s /usr/libexec/gnome-session-binary --session gnome-classic root pts/0 192.168.43.102 23:01 0.00s 0.17s 0.04s w root tty2 10:28 12:42m 2.68s 0.00s xinit /etc/X11/xinit/xinitrc -- /usr/bin/X :1 vt2 -keeptty -auth /root/.serv root tty4 12:10 9:44m 0.19s 0.19s -bash root pts/1 :1 13:25 9:45m 0.04s 0.04s bash
type:
用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
option:
-t:输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
-p:如果给出的指令为外部指令,则显示其绝对路径;
-a:在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
which
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录
type与which的区别:
type他是会看缓存的,如果缓存里有,不会在去看路径,which他是不看缓存的直接看路径的
命令提示符:
显示提示符格式:
echo $PS1:
修改提示符格式:
\t 24小时时间格式
\T 12小时时间格式
\! 命令历史数
\# 开机后命令历史数
\u 当前用户
\h 主机名简称
\e \033
\H 主机名
\w 当前工作目录
\W 当前工作目录的基名
要开机自动加载配置需要到配置文件中去修改,所以我们需要有一个全局的或者对于一个用户的文件去存储这个配置;
bash的配置文件:
按生效范围划分,存在两类:
全局配置:
/etc/profile
/etc/profile.d/*.sh(默认是不存在的,都是为了好管理,自行命名创建的)
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
shell登录的2种方式:
交互式登录:
(1)直接通过终端输入账号密码登录
(2)使用“su - UserName” 切换的用户
执行顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:
(1)su UserName
(2)图形界面下打开的终端
(3)执行脚本
(4)任何其它的bash实例
执行顺序: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
按功能划分,存在两类:
profile类和bashrc类
profile类:为交互式登录的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
个人:~/.bash_profile
功用:
(1) 用于定义环境变量
(2) 运行命令或脚本
bashrc类:为非交互式和交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功用:
(1) 定义命令别名和函数
(2) 定义本地变量
登录显示信息的配置文件:
/etc/motd (message of the day:每天登录的信息)(登入后显示)
/etc/issue(登入前显示)
图形界面下密码免登(在生产中不适用):
cu/etc/gdm/custom.conf中的[daemon]下增加2行:
AutomaticLoginEnable=true
AutomaticLogin=root(对于哪个用户)
[root@centos7 ~]# vim /etc/gdm/custom.conf # GDM configuration storage [daemon] AutomaticLoginEnable=true AutomaticLogin=root
bash:
ehco $SHELL:可以查看当前默认的shell;
cat /etc/shells:可以看当前系统所支持的shell版本;
如果想使用其他shell:直接输入该shell的全路径即可;(同时这也会新开辟一个新的子进程)
执行命令:
请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
在shell中可执行的命令有两类
内部命令:由shell自带的,而且通过某命令形式提供
help 内部命令列表
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
[root@centos7 ~]# enable -n cd [root@centos7 ~]# cd /app #还在家目录,禁用的命令前面就会有* [root@centos7 ~]# cd /etc [root@centos7 ~]#
enable –n 查看所有禁用的内部命令
enable:可以查看所有内部命令
外部命令:在文件系统路径下有对应的可执行程序文件(磁盘上对应的一个具体文件);
在PATH变量存放路径,而且是从左往右一次执行的;
[root@centos7 etc]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@centos7 etc]# cp /usr/bin/free /usr/local/sbin/ [root@centos7 etc]# cd /usr/local/sbin/ [root@centos7 sbin]# cp /usr/bin/lscpu ./free cp: overwrite ‘./free’? y [root@centos7 sbin]# free #实际上执行的是lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 2 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 61 Model name: Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz Stepping: 4 CPU MHz: 2899.394 BogoMIPS: 5800.64 Hypervisor vendor: VMware Virtualization type: full ....
hash(缓存路径,内存):
系统初始hash表为空,当外部命令执行时,默认会从 PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会
查看hash 表,存在将执行之,如果不存在,将会去PATH路径下寻找。利用hash缓存表可大大提高命令的调用速率
hash:查看内存中的缓存;
hash -r:清缓存
hash -d name:清除名字缓存(仅仅是名字,不用写全路径)
[root@centos7 etc]# hash -d /usr/bin/w [root@centos7 etc]# [root@centos7 etc]# hash hits command 1 /usr/bin/vim 1 /usr/sbin/runlevel 5 /usr/bin/who 1 /usr/bin/whoami 2 /usr/bin/w 2 /usr/bin/cd [root@centos7 etc]# hash -d w [root@centos7 etc]# hash hits command 1 /usr/bin/vim 1 /usr/sbin/runlevel 5 /usr/bin/who 1 /usr/bin/whoami 2 /usr/bin/cd
hash -t name:打印缓存中name的路径
hash -l:可以查看内存中的缓存及别名的使用,通过下面的-p来设置的
hash -p /usr/bin/free f:这样就把长路径用f来代替了,相当于别名;接来可以用f代替free
存在的问题:
#继上面的代码,因为缓存的关系,所以他会去原来的目录里找,但是已经被删除了。 [root@centos7 sbin]# rm -f ./free [root@centos7 sbin]# free -bash: /usr/local/sbin/free: No such file or directory [root@centos7 sbin]# hash hits command 1 /usr/bin/rm 1 /usr/bin/vim 1 /usr/sbin/runlevel 2 /usr/bin/mv 5 /usr/bin/who 2 /usr/bin/cp 1 /usr/bin/whoami 5 /usr/bin/ls 2 /usr/local/sbin/free 2 /usr/bin/cd
#清了那条缓存就恢复正常了;
别名alias:
注:当你用了别名之后又想用原来的功能:
内外部都使用:
''与\
只适用于外部命令:
全路径
执行命令流程:输入command-->别名-->因为开机就加载了/bin/bash,所以先会去找bash中的內键指令-->hash缓存表-->再找PATH变量一个一个去找;
date:
修改时间:date [月日时分年秒]
date +%Y-%m-%d-%H-%M-%S(查看年月日,注意月日小写)
date +%s(从1970到现在的秒数)
date +%Y-%m-%d<-->+%F
date -d @上面的秒数 “[可指定格式]”(由于格式中可能有空格,要用“”)
-s是修改(可以用-d先查看;):
date -s '45 day':把时间修改到45天之后;
linux的两种时钟:
系统时间:由linux内核通过CPU的工作频率进行的
硬件时间:主板
hwclock,clock:显示硬件时间
-s,--hctosys,改系统;
-w,--systohc,改硬件;
时区:
/etc/localtime:在centos6中是一个硬链接的形式,在centos7他是一个symbolic链接文件,指向上海的时区;
在centos7上:
timedatectl list-timezones可以查看所有所支持的时区;
timedatectl set-timezone设置时区的;
screen命令:
screen跟在命令行下再执行一个bash啊或者其他的shell是一个道理,作为他的子进程,screen -S aa是指定一个名字为aa窗口进入执行会当一个进程一直保存着,可以
下次进入查看,可以同步查看
用途1:在生产环境中,我们一般是使用ssh这种远程来操作linux的,当我执行一个任务到一半的时候,网断了,这样你前面操作到一半都前功尽弃了。所以screen可以来
解决这个问题;
1、你开一个会话screen -S aa(你在里面执行nano,断网了)
2、再次进入可以用screen -ls查看有哪几个会话进入
3、screen -x aa 就可以继续操作了
用途2:当遇到问题时,需要有人帮忙,可以开一个窗口,对方可以打开对应的名字,对你指导,并且能操作;
创建新screen会话
screen –S [SESSION]
加入screen会话
screen –x [SESSION]
退出并关闭screen会话
exit
剥离当前screen会话
Ctrl+a,d
显示所有已经打开的screen会话
screen -ls
恢复某screen会话
screen -r [SESSION]
echo:
功能:回显、显示变量
选项:
-E (默认)不支持\解释功能
-n 不自动换行
-e 启用\字符的解释功能
\a发声;可以用于脚本完成后
\c取消换行
\b 退格键
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH插入HH(十六进制)所代表的ASCII字
[root@centos7 ~]# echo -e "hello \nwolrd" hello wolrd [root@centos7 ~]# echo -e '12345\r678' 67845
符号:
'':强引用,原样输出
"":弱引用,先翻译出变量<-->${变量}
``:能识别指令<-->$(指令)
{}:命令行展开;
tab:
command 2Tab 所有子命令或文件补全
string2Tab 以string开头命令
/2Tab 显示所有根目录下一级目录,包括隐藏目录
cat /root
./2Tab 当前目录下子目录,包括隐藏目录
ls .
*2Tab 当前目录下子目录,不包括隐藏目录
~2Tab 所有用户列表
cat /etc/passwd
$2Tab 所有变量
@2Tab /etc/hosts记录 (centos7不支持)
=2Tab 相当于ls –A (centos7不支持)
使用帮助:
whatis(显示命令的短述)<-->man -f:
这个命令存在一个问题就是我们在刚装好系统,这个文件的数据库是不存在的,需要用上一段时间,他会自动生成好的,如果你马上需要使用的话,那么制作数据库用如下指令:
centos6:makewhis
centos7:mandb
help:
用于内部命令:
man bash
列出所以內键命令的信息
--help:
用于外部(比man简介一点)
[]:可选
<>或CAPS表示变化的数据
...列表
x|y|z:3选1
-abc:-a -b -c
{}:分组
info:
/usr/share/doc下的readme
man(manual):
用于外部命令
参数:
man [章节] keyword
列出所有帮助
man –a keyword
搜索man手册
man -k keyword 列出所有匹配的页面使用 whatis 数据库
相当于whatis
man –f keyword
打印man帮助文件的路径
man –w [章节] keyword
man # command
#:
1:普通命令
2:系统调用
开发人员关注
3:c库调用
开发人员关注
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类命令
9:linux内核API
在centos6中man的配置文件是:
/etc/man.config下的搜索路径:
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
MANPATH /usr/local/share/man
MANPATH /usr/X11R6/man
对于一个命名的man路径用的是哪个可以用whereis查看:
显示man相关的为压缩文件,用man打开它是自动帮你解压,并展示的;
在centos7中man的配置文件是:
/etc/man_db.conf下的搜索路径:
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/sha
man -M /PATH/TO/SOMEWHERE COMMAND可以指定路径去看;
history:
分为两种:
1、刚刚执行过的历史记录在内存中(由正常关闭机器,追加到磁盘文件中);
这里的内容要存放到内存中:
2、以前执行过的历史记录在~/.bash_history
有家目录说明与用户有关
对应变量:$HISTFILE
参数:
-c:清内存缓存
-d:指定某一条删除(按序号);
-r:磁盘到内存(内容可重复);(读)
-n:磁盘到内存,但是已经读过了就不读了;
-a:内存到磁盘(内容不重复);
-w:另存为磁盘的其他文件,可以不是默认的~/.bash_history;(写)
-p:执行命令不在历史命令中记录(多行)
-s:可以伪造命令,命令可以显示在历史记录但不会被执行。
命令历史行:
重复前一个命令,有4种方法
输入 !-1 并回车执行
按Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
Ctrl + n 显示当前历史中的下一条命令,但不执行
Ctrl + j 执行当前命令
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为 string2
!:gs/string1/string2 将上一条命令中所有的string1都替换 为 string2
使用up(向上)和down(向下)键来上下浏览从前输入的 命令
ctrl-r来在命令历史中搜索命令 • (reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
要重新调用前一个命令中最后一个参数:
!$ 表示
Esc, .(点击Esc键后松开,然后点击 . 键)
Alt+ .(按住Alt键的同时点击 . 键)
command [option...] argment
aeg[0] arg[1...] arg[...] 用空格隔开都是一个参数;
调用历史参数
command !^ : 利用上一个命令的第一个参数做cmd的参数
command !$ : 利用上一个命令的最后一个参数做cmd的参数
command !* : 利用上一个命令的全部参数做cmd的参数
command !:n : 利用上一个命令的第n个参数做cmd的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:$ 从命令历史中搜索以 string 开头的命令 ,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令 ,并获取它的第n个参数
command !string:* 从命令历史中搜索以 string 开头的命令 ,并获取它的所有参数
历史命令相关环境变量:
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT=“%F %T “ 显示时间
HISTIGNORE=“str1:str2*:... “ 忽略str1命令,str2开头的历史
控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups 默认,忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合 erasedups 删除重复命令