基础

Linux 组成

	Linux:kernel+rootfs+库+程序
		kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
		rootfs: 程序和glibc
		库:函数集合, function,  调用接口(头文件负责描述)
			过程调用:procedure ,无返回值
			函数调用:function
		程序:二进制执行文件
	
	内核设计流派:
		单内核(monolithic kernel) :Linux
			把所有功能集成于同一个程序
				[root@centos6 ~]#ls /boot/vmlinuz-2.6.32-696.el6.x86_64 
				/boot/vmlinuz-2.6.32-696.el6.x86_64
		微内核(micro kernel) :Windows, Solaris
			每种功能使用一个单独子系统实现
		

终端terminal

	设备终端
		键盘,鼠标显示器
	物理终端( /dev/console ) 
		控制台console
	虚拟终端(tty :teletypewriters,/dev/tty# ,#为[1-6])
		tty可有n 个,Ctrl+Alt+F[1-6]
	图形终端( /dev/tty7 )startx, xwindows
		CentOS 6: Ctrl + Alt + F7
		CentOS 7:  在哪个终端启动,即位于哪个虚拟终端
	串行终端( /dev/ttyS# ) 
		ttyS
	伪终端( pty :pseudo-tty, /dev/pts/# ) 
		pty, SSH 远程 连接
	查看当前的终端设备:tty

交互式接口

	交互式接口:启动终端后,在终端设备附加一个交互式应用程序
	GUI :Graphic User Interface
		X protocol, window manager, desktop
		Desktop:
			GNOME (C, 图形库gtk), 
			KDE (C++, 图形库qt)
			XFCE ( 轻量级桌面)
	CLI :Command Line Interface
		shell 程序:sh (bourn 史蒂夫· 伯恩),csh,tcsh
		ksh (korn),bash (bourn again shell),GPL,zsh

命令提示符

	命令提示符:prompt
		[root@localhost ~]#
		#  管理员
		$  普通用户
		
	显示提示符格式
		[root@localhost ~]#echo $PS1
		
	修改提示符格式
		PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\]"
		\[\e[31m :开始位                                                    cat /etc/DIR_COLORS 查看颜色代码
		\[\e[0m:结束位
		\u  当前用户
		\h  主机名简称 
		\H  主机名
		\w  当前工作目录 
		\W  当前工作目录基名
		\t 24 小时时间格式 
		\T 12 小时时间格式
		\!  命令历史数 
		\#  开机后命令历史数
			PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[31m\]\\$\[\e[0m\]"
			PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[40;31;5m\]\\$\[\e[0m\]"
			PS1="\[\e[1;37m\][\[\e[35;4m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34;4m\]\W\e[0m\[\e[36m\]]\[\e[40;33;5m\]\\$\[\e[0m\]"
			echo -e '\033[1;43;31;5mmagedu\033[0m'
				\033 颜色启用
				43代表背景颜色
				31代表字的颜色
				5m代表什么效果
				
	如果想永久保存,可以在/etc/profile.d下建立env.sh来作为保存
		自己建立自己操作环境:/etc/profile.d/env.sh‘’
		

执行命令

	输入命令后回车
		提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
	
	在shell 中可执行的命令有两类
		内部命令:由shell 自带的,而且通过某命令形式提供
			help  内部命令列表
			enable cmd  启用内部命令
			enable –n cmd  禁用内部命令
			enable –n  查看所有禁用的内部命令
		外部命令:在文件系统路径下有对应的可执行程序文件
			查看路径:
					which --skip-alias ; 
						whichh:查找并显示给定(外部)命令的绝对路径
							-n<文件名长度>:	指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; 
							-p<文件名长度>:	与-n参数相同,但此处的<文件名长度>包含了文件的路径;
						
					whereis
						whereis:查找二进制程序、代码等相关文件路径
							-b:	只查找二进制文件; 
							-B <目录>:	只在设置的目录下查找二进制文件; 
							-f:	不显示文件名前的路径名称; 
							-m:	只查找说明文件; 
							-M<目录>:	只在设置的目录下查找说明文件; 
							-s:	只查找原始代码文件; 
							-S<目录>	只在设置的目录下查找原始代码文件; 
							-u:	查找不包含指定类型的文件。 
						
	区别指定的命令是内部或外部命令
		type -a COMMAND
			type:显示指定命令的类型
				-t:	输出“file”、“alias”、“builtin”,分别表示给定的指令为“外部指令”、“命令别名”、“内部指令”; 
				-p:	如果给出的指令为外部指令,则显示其绝对路径; 
				-a:	在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
				

执行外部命令

	Hash 缓存表
		系统初始hash表为空,当外部命令执行时,默认会从PATH 路径下寻找该命令,找到后会将这条命令的路径记录到
		hash表中,当再次使用该命令时,shell解释器首先会查看hash表 ,存在将执行之,如果不存在,将会去PATH 路径下寻找 。利
		用hash 缓存表可大大提高命令的调用速率
		
	hash 常见用法
		hash 	显示hash缓存
		hash –l  	显示hash缓存,可作为输入使用
		hash –p path name  	将命令全路径path起别名为name
		hash –t name  	打印缓存中name 的路径
		hash –d name  	清除name 缓存
		hash –r 	清除缓存

命令别名

	·显示当前shell进程所有可用的命令别名
		alias
	
	·定义别名NAME,其相当于执行命令VALUE
		alias NAME='VALUE'
	
	·在命令行中定义的别名,仅对当前shell 进程有效
	
	·如果想永久有效,要定义在配置文件中
		仅对当前用户:~/.bashrc
		对所有用户有效:/etc/bashrc
	
	·编辑配置给出的新配置不会立即生效。需要bash进程重新读取配置文件,也就是重新登录,或使用sourc or 。
	
	·bash 进程重新读取配置文件
		source /path/to/config_file
		. /path/to/config_file
	
	·撤消别名:unalias
		unalias [-a] name [name ...]
			-a  取消所有别名
		要想永久撤销也得在配置文件中删除
	
	·如果别名同原命令同名,如果要执行原命令,可使用
		"\COMMAND"
		'COMMAND'
		/PATH/COMMAND  

命令格式

	·COMMAND [OPTIONS...] [ARGUMENTS...]
		选项:用于启用或关闭命令的某个或某些功能
		短选项:-c 例如:-l, -h
		长选项:--word  例如:--all, --human-readable
		参数:命令的作用对象,比如文件名,用户名等
	
	·注意:
		多个选项以及多参数和命令之间使用空白字符分隔
		取消和结束命令执行:Ctrl+c ,Ctrl+d
		多个命令可以用; 符号分开
		一个命令可以用\分成多行

简单命令

	date  显示日期和时间
		-d<字符串>:	显示字符串所指的日期与时间。字符串前后必须加上双引号; 
		-s<字符串>:	根据字符串来设置日期与时间。字符串前后必须加上双引号; 
		-u:	显示GMT; 
		
		date -d"tomorrow" +"%F %H:%M:%S"
		date -d"1 day ago" +"%F %H:%M:%S"
		date -d"1 day " +"%F %H:%M:%S
		第一个数字可以是负数,负数表示将来时间,正数表示前面已经过去的时间,第二个参数minute、hour、day、month、week。
			%Y   	year
			%m   	month (01..12)
			%d   	day of month (e.g., 01)
			%F   	full date; same as %Y-%m-%d
			%H   	hour (00..23)
			%M  	 minute (00..59)
			%S   	second (00..60)
			
	修改时间:
		date + 月日小时分年.秒 或指定日期形式
		
		ntpdate 172.18.0.1(服务器地址)
			ntpdate - set the date and time via NTP
			ntpdate [ -46bBdqsuv ] [ -a key ] [ -e authdelay ] [ -k keyfile ] 
					[ -o version ] [ -p samples ] [ -t timeout ] [ -U user_name ] server [ ... ]
			
	Linux的两种时钟
		系统时钟:由Linux 内核通过CPU 的工作频率进行的,date
		硬件时钟:主板上的
	
	hwclock ,clock:  显示硬件时钟
				-s, --hctosys  	以硬件时钟为准,校正系统时钟
				-w, --systohc  	以系统时钟为准 , 校正硬件时钟
				--set --date=<日期与时间>:设定硬件时钟;
				--test:仅测试程序,而不会实际更改硬件时钟;
				--utc:若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作;
	
	时区:/etc/localtime
		(centos 7)
		timedatectl set-timezone +时区  更改时区
			
	cal 显示日历
		cal :显示当前日历或指定日期的日历
			-l:	显示单月输出; 
			-3:	显示临近三个月的日历; 
			-s:	将星期日作为月的第一天; 
			-m:	将星期一作为月的第一天; 
			-j:	显示“julian”日期; 
			-y:	显示当前年的日历
		
	关机:halt, poweroff
	
	重启:reboot
		-f:  强制,不调用shutdown
		-p:  切断电源
	
	关机或重启:shutdown
		shutdown [OPTION]... TIME [MESSAGE]
			-r: reboot
			-h: halt
			-c :cancel
			TIME:无指定,默认相当于 +1
			now:  立刻, 相当于+0
			+m:  相对时间表示法,几分钟之后;例如 +3
			hh:mm:  绝对时间表示,指明具体时间
	
	用户登录信息查看命令:
		whoami:  显示当前登录有效用户
		who:  系统当前所有的登录会话
		w:  系统当前所有的登录会话及所做的操作
	
	screen 命令:
		创建新screen 会话
			screen –S [SESSION]
		加入screen 会话
			screen –x [SESSION]
		退出并关闭screen 会话
			exit
		剥离当前screen 会话
			Ctrl+a,d
		显示所有已经打开的screen 会话
			screen -ls
		恢复某screen 会话
			screen -r [SESSION]
	
	echo 命令
		功 能:显示字符
		语 法: echo [-neE][ 字符串]
		说 明: echo 会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,  并在最后加上换行号
		选项:
			-E (默认)不支持 \  解释功能
			-n   不自动换行
			-e   启用 \  字符的解释功能
		
		显示变量
			echo "$VAR_NAME“  变量会替换,弱引用 
			echo '$VAR_NAME‘  变量不会替换,强引用 
				``最聪明
				“” 中间
				‘’最傻
		启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
			\a  	发出警告声  alarm
			\b  	退格键  backspace
			\c  	最后不加上换行符号 
			\e   	escape character 跳过字符
			\f 	form feed  换页
			\n  	回车换行,换行且光标移至行首 new line
			\r  	回车,即光标移至行首,但不换行 
			\t  	插入tab
			\\  	插入\ 字符
			\0nnn  	插入nnn (八进制)所代表的ASCII 字符
			\xHH 	插入HH (十六进制)所代表的ASCII字符
				echo -e '\033[43;31;5mmagedu\033[0m'
					\033 颜色启用
					43代表背景颜色
					31代表字的颜色
					5m代表什么效果

命令行扩展、被括起来的集合

	命令扩展:$( )  或 ``
		把一个命令的输出打印给另一个命令的参数
		echo "This system's name is $(hostname ) "
		echo "i am `whoami ` "
	
	括号扩展:{ }
		打印重复字符串的简化形式
		echo file{1,3,5}
			file1 file3 file5
		rm -f file{1,3,5}
		echo {1..10}
		echo {a..z}
		echo {000..20..2}

tab键

	命令补全
		内部命令:
		外部命令:bash 根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
		用户给定的字符串只有一条唯一对应的命令,直接补全否则,再次Tab 会给出列表
		
	路径补全
		把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果唯一:则直接补全否则:再次Tab 给出列表

双击Tab键

	command 2Tab 	所有子命令或文件补全
	string2Tab 	以string 开头命令
	/2Tab 	显示所有根目录下一级目录,包括隐藏目录
	./2Tab 	当前目录下子目录,包括隐藏目录
	*2Tab 	当前目录下子目录,不包括隐藏目录
	~2Tab 	所有用户列表
	$2Tab 	所有变量
	@2Tab /etc/hosts 记录 (centos7 不支持)
	=2Tab 相当于ls –A (centos7 不支持)

命令行历史

	·保存你输入的命令历史。可以用它来重复执行命令
	
	·登录shell时,会读取命令历史文件中记录下的命令~/.bash_history
	
	·登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
	
	·重复前一个命令,有4 种方法
		重复前一个命令 使用上方向键,并回车执行
		按 !!  并回车执行
		输入 !-1  并回车执行
		按 Ctrl+p  并回车执行
	
	·使用up (向上)和down(向下)键来上下浏览从前输入的命令
		!:0 	执行前一条命令(去除参数)
		Ctrl + n  	显示当前历史中的下一条命令,但不执行
		Ctrl + j  	执行当前命令
		!n  	执行history 命令输出对应序号n的命令
		!-n  	执行history 历史中倒数第n个命令
		!string  	重复前一个以“string ”开头的命令
		!?string  	重复前一个包含string 的命令
		!string:p  	仅打印命令历史,而不执行
		!$:p 	打印输出上一条命令的最后一个参数的内容
		!*:p 	打印输出上一条命令的所有参数的内容
		^string  	删除上一条命令中的第一个string
		^string1^string2 	将上一条命令中的第一个string1 替换为string2
		!:gs/string1/string2  	将上一条命令中所有的string1 都替换为 string2
		ctrl +r 	来在命令历史中搜索命令
		Ctrl  +g	从历史搜索模式退出
		
		
	·要重新调用前一个命令中最后一个参数:
		!$ 表示
		Esc, . (点击Esc击 键后松开,然后点击 .  键)
		Alt+ . (按住Alt击 键的同时点击 .  键)

调用历史参数

		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:$ 	以从命令历史中搜索以string开头的命令, 并获取它的最后一个参数
		command !string:n 	以从命令历史中搜索以string开头的命令,并获取它的第n个参数
		command !string:* 	以从命令历史中搜索以 string开头的命令,并获取它的所有参数
	
	·命令history
		history [-c] [-d offset] [n]
		history -anrw [filename]
		history -ps arg [arg...]
			-c: 	清空命令历史
			-d offset:  	删除历史中指定的第offset个命令,也就是history列表中的数值
			n:  	显示最近的n条历史
			-a: 	追加本次会话新执行的命令历史列表至历史文件,add
			-n:  	读历史文件中未读过的行到历史列表 
			-r:  	读历史文件附加到历史列表
			-w: 	保存历史列表到指定的历史文件,默认为历史文件.bash_history
			-p:  	展开历史参数成多行,但不存在历史列表中
			-s: 	展开历史参数成一行,附加在历史列表后
			
	·清除已经做过的敏感历史命令
			[root@centos7 ~]#rm -rf /
			rm: it is dangerous to operate recursively on ‘/’
			rm: use --no-preserve-root to override this failsafe
			[root@centos7 ~]#history -w
			[root@centos7 ~]#rm -rf .bash_history 
			[root@centos7 ~]#history -c

命令历史相关环境变量

	·存放在 /etc/profile 或  ~/.bash_profile  
	
	·export  变量名="值"     这个只是暂时能用,如果退出所在终端,则会还原。
		HISTSIZE :	命令历史记录的条数
		HISTFILE :	指定历史文件,默认为~/.bash_history
		HISTFILESIZE :	命令历史文件记录历史的条数
		HISTTIMEFORMAT=“%F %T “ 	显示时间
		HISTIGNORE=“str1:str2*:… “	忽略str1 命令,str2 开头的历史
	
	·控制命令历史的记录方式:
		环境变量:HISTCONTROL
			ignoredups 	默认,忽略重复的命令,连续且相同为“重复”
			ignorespace  	忽略所有以空白开头的命令
			ignoreboth 	相当于ignoredups, ignorespace 的组合
			erasedups	 删除重复命令

bash 的快捷键

	Ctrl + l 	清屏,相当于clear 命令
	Ctrl + o 	执行当前命令,并重新显示本命令
	Ctrl + s 	阻止屏幕输出,锁定
	Ctrl + q	允许屏幕输出
	Ctrl + c 	终止命令
	Ctrl + z 	挂起命令
	Ctrl + a 	光标移到命令行首,相当于Home
	Ctrl + e 	光标移到命令行尾,相当于End
	Ctrl + f 	光标向右移动一个字符
	Ctrl + b 	光标向左移动一个字符
	Alt + f 	光标向右移动一个单词尾
	Alt + b	 光标向左移动一个单词首
	Ctrl + xx  	光标在命令行首和光标之间移动
	Ctrl + u	 从光标处删除至命令行首
	Ctrl + k	 从光标处删除至命令行尾
	Alt + r 	删除当前整行
	Ctrl + w 	从光标处向左删除至单词首
	Alt + d 	从光标处向右删除至单词尾
	Ctrl + d 	删除光标处的一个字符
	Ctrl + h 	删除光标前的一个字符
	Ctrl + y 	将删除的字符粘贴至光标后
	Alt + c	 从光标处开始向右更改为首字母大写的单词
	Alt + u 	从光标处开始,将右边一个单词更改为大写
	Alt + l 	从光标处开始,将右边一个单词更改为小写
	Ctrl + t 	交换光标处和之前的字符位置
	Alt + t 	交换光标处和之前的单词位置
	Alt + N 	提示输入指定字符后,重复显示该字符N次 
	注意:Alt 组合快捷键经常和其它软件冲突

gnome-terminal

	应用程序-> 附件-> 终端
	支持多个“标签”shell 的图形化终端模拟器
		Ctrl-Shift-n 创建新窗口
		Ctrl-Shift-q  关闭当前窗口
		Ctrl-Shift-t 创建一个标签页
		Ctrl-Shift-w 关闭一 个标签页
		Ctrl-PaUp/PgUn  切换到下一个/ 前一个标签页
		Ctrl-Shift-c  复制选中的文本
		Ctrl-Shift-v  把文本粘帖到当前光标处
posted @ 2018-02-13 23:15  shenxm  阅读(287)  评论(0编辑  收藏  举报