Linux入门命令

系统配置

	1,重启 init 6
	2,修改主机名:/etc/hostname
		/etc/hostname 和 /etc/sysconfig/network 的区别

	3,新装CentOS Minimal无法使用ping命令, 是因为网卡默认关闭
    		打开方式:/etc/sysconfig/network-scripts/ifcfg-xxx(eth0/ensxx),属性ONBOOT=yes
	4,新装CentOS Minimal无法使用ifconfig命令, 是因为此版本没有安装ifconfig
    		安装即可:yum -y install net-tools
	5,集群基本网络环境配置(VMware虚拟机环境,根据个人虚拟机环境自行配置):
    		1) 删掉MAC地址:HWADDR
    		2) 删掉UUID:UUID
    		3) IP获取方式由默认动态DHCP为手动指定静态IP:BOOTPROTO=DHCP 改为 BOOTRPOTO=static
    		4) 指定静态IP:192.168.20.11(其他节点分配为12,13,14)
    		5) 指定子网掩码:NETMASK=255.255.255.0
    		6) 配置网关:GATEWAY=192.168.20.2
    		7) 配置DNS:DNS1=114.114.114.114   DNS2=8.8.8.8


$PATH:环境变量 echo $PATH --->  /usr/local/sbin:/usr/local/bin:/usr/sbin/:/usr/bin:/root/bin
$LANG:系统字符集 echo $LANG ---> en_US.UTF-8


Shell命令

type:判断命令是内部命令还是外部命令
	
	[root@node01 ~]# type echo
	echo is a shell builtin
	[root@node01 dev]# type cd
	cd is a shell builtin

	[root@node01 ~]# type man
	man is hashed (/usr/bin/man)
	[root@node01 dev]# type -a ls
	ls is aliased to `ls --color=auto'
	ls is /usr/bin/ls
	
help:帮助命令,查询内部命令时使用
man:帮助命令,查询外部命令或以下信息时使用
    	1) 用户命令 (/bin,/usr/bin,/usr/local/bin)
    	2) 系统调用
  	3) 库文件(man system;)
    	4) 特殊文件(在/dev/目录中大量出现。如:块设备文件block, 字符设备character, 符号链接文件link, 命令管道文件pipe, 套接字文件socket)
    	5) 文件格式(man ext4;)
    	6) 游戏
    	7) 杂项(man ascii;man utf-8;)
    	8) 管理命令(/sbin, /usr/sbin, /usr/local/sbin)

whereis:定位命令位置
	whereis cd;
	whereis echo;

file:查看文件类型
	[root@node01 ~]# file profile 
	profile: ASCII text
	
	[root@node01 ~]# file testfile.txt 
	testfile.txt: UTF-8 Unicode text

echo:打印到标准输出
	echo $$ (打印当前Shell的PID)
	
数组的定义与使用
	[root@node01 ~]# a=(1 2 3)
	[root@node01 ~]# echo a
	a
	[root@node01 ~]# echo $a
	1
	[root@node01 ~]# a=(1 2 3)
	[root@node01 ~]# echo $a
	1
	[root@node01 ~]# echo ${a[2]}
	3
	[root@node01 ~]# 
ps:
	-fe:打印当前全部进程的全部信息
	-f:(Do full-format listing.打印所有列)
	-e:(Select all processes,与-A功能相同,打印所有行)	
kill
	-9:彻底杀死进程
	kill -9 PID
	
hash:
	[root@node01 ~]# hash
	hits	command
	3	/usr/bin/df
	2	/usr/bin/file
	4	/usr/bin/touch
	7	/usr/bin/stat
	[root@node01 ~]# hash -r
	[root@node01 ~]# hash
	hash: hash table empty

df:(查看磁盘的使用情况,report File system Disk space usage)
	-h(huma-readable):文件大小单位由1k-blocks改为B,MB,GB
du:(估计当前目录各文件的大小,类似于Windows以详细信息查看文件,estimate file space usage)
	-h:如上

ln:(make links between files)
	ln a b.H: 硬链接
	ln -s a b.S: 软链接

stat file:查看文件状态(时间信息等)

	[root@node01 ~]# stat profile 
	File: ‘profile’
	Size: 1819      	Blocks: 8          IO Block: 4096   regular file
	Device: fd00h/64768d	Inode: 5377269     Links: 1
	Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
	Context: unconfined_u:object_r:admin_home_t:s0
	Access: 2019-01-26 21:28:41.148086834 -0500
	Modify: 2019-01-24 10:24:19.990023893 -0500
	Change: 2019-01-24 10:24:19.990023893 -0500
	Birth: -

touch file:刷新文件的时间信息
[root@node01 ~]# touch profile 
[root@node01 ~]# stat profile 
	
	File: ‘profile’
	Size: 1819      	Blocks: 8          IO Block: 4096   regular file
	Device: fd00h/64768d	Inode: 5377269     Links: 1
	Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
	Context: unconfined_u:object_r:admin_home_t:s0
	Access: 2019-01-26 21:58:53.803115501 -0500
	Modify: 2019-01-26 21:58:53.803115501 -0500
	Change: 2019-01-26 21:58:53.803115501 -0500
	Birth: -

cat:查看文件全部内容
more:一页一页的查看(阻塞)
less:B 往回翻(文件全部加载到内存)
head: -n 前n行
tail: -n 最后n行(其他用途: 阻塞住某文件tail -f file , 其他用户往该文件写操作时,tail -f 能捕获到追加内容)

cat hello.txt | head -3
echo "/" | ls -l 与 echo "/" | xargs ls -l
head -6 profile | tail -1 (输出文件的第6行)


Vim 使用

vim打开文件:
	vim +3 hello.txt :打开文件并定位到第三行
	vim + hello.txt :           定位到最后一行
	vim +/string hello.txt : 打开文件并定位到首次出现string的行
	vim -diff file1 file2: 对比文件差异
vim退出:
	:q! 退出不保存
	:w  保存
	:w! 强制保存
	:wq(:x) 保存并退出
	:zz ?????? 
编辑模式:
	      
	字符级:hjkl
	单词级:web
	行内:0$^
	行间:gg G 5G
	段头: (
	段尾:)
	翻屏:ctrl+f/b
	删除与替换:x 3x r
	删除:dd 5dd dw 4dw
	复制与粘贴:yy p  yw 3yw
	剪切:dd
	撤销:u ctrl+r
	全选:ggVG

输入模式:

末行模式:
	set nu/nonu :显示行号
	set readonly/noreadonly
	/string :查找
	:cmd : ":ls -al",":pwd"
	:m,n>(将第m行到第n行向右缩进一个制表符)
	:20-26< (将20-26行向左缩进一个制表符)
	:ctrl+v,配合jk上下移动
查找:
查找并替换
全删:
多行注释:
	1,ESC末行模式,Ctrl+v进入列选择模式
	2,jk上下移动选择需要注释的行
	3,shift+i, 进入插入模式,插入//或#号
	4,按ESC,多行注释完成
删除多行注释:

	1,ESC末行模式,Ctrl+v进入列选择模式
	2,jk上下移动选择需要注释的行,hl选择列
	3,d删除所选列

grep正则表达式:显示匹配行

	-E 使用扩展表达式
	-v 反显示

匹配操作符
	"\": 转义
	".": 匹配任意单个操作符   ".*":任意单个多次,就是任意多个字符
	"[]": 满足其中一个条件即可[123],[^12],[a-k]
	"^": 行首,以a开头的行,"abcd132"---"^[a]"
	"$": 行尾
	"\<  \>": 匹配单词 \
	"|": 连接,或关系
	"\(  \)": 选择操作符  "abc123abc hello 222 hellohello"---"\(abc\).*\1 \(hello\).*\2"
	"\n": 反向引用

重复操作符
	"?": 匹配0-1次
	"*": 匹0-n次
	"+": 匹配1-n次
	"{n}": 匹配n次
	"{n,m}": 匹配n-m次

扩展
	\?, \+, \{, \|,\(,\) 


例子:
	grep "[0-9]\{4\}" hello.txt
	grep -E "[0-9]{4}" hello.txt


cut:切割行
	-d: 指定分隔符 cut -d' ' hello
	-f: 取某列 cut -d' ' -f1-2 hello
	-s: 不显示没有分隔符的行

sort:排序
	默认按照字典序 sort hello
	-n: 按照数值排序 sort -n hello
	-r: 倒序
	-t: 自定义分隔符
	-k: 选择排序的列
	-u: 合并相同行
	-f: 忽略大小写

wc:统计行数,单词数,字符数
	-l:
	-w:
	-c:
		
sed:行编辑器
	无参数:不对源文件修改	
	-i: 修改到源文件 sed -i "5d" hello
	"3p": 复制hello第3行 sed "3p" hello
	"5d": 删除hello第5行 sed "5d" hello
	"2\a": 在hello第2行后添加string	| sed "2\a\string" hello
	"5\i": 在hello第5行前添加string | sed "5\i\string" hello
	"s/pattern/string/": 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

正则匹配ip地址
	如;匹配如下ip,更改第四个字节212 为22
	192.168.255.212
	sed "s/\(\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\122/" regularExp.txt

awk: 类似于报表
	只显示/etc/passwd的账户(即第一列):
	awk -F':' '{print $1}' passwd
	
	只显示/etc/passwd的账户和账户对应的shell,
	账户与shell之间以制表符分割,
	而且在所有行开始前添加name,shell,
	在最后一行添加"blue,/bin/bash":
	awk -F':' 'BEGIN{print "name\tshell"}{print $1 "\t" $7}END{print"blue\tnoshell"}' testfile.txt

	搜索/etc/passwd有root关键字的所有行:
	awk '/root/{print $0}' passwd

	统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容
	awk -F':' '{print NR "\t" NF "\t" $0}' passwd

	统计员工一月份的工资 (先用awk对每行分析,然后END)
	awk -F'\t' '{split{$3,date,"-"};if(date[2]=="01"){name[$1]+=$5}END{for(i in name){print{name "\t" name[i]}}}}' testfile.txt

	awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};if($2=="0"){role[$1]="manager"}else{role[$1]="worker"}}END{for(i in name){print i "\t" name[i] "\t" role[i]}}' table.txt
	//for(i in name){print role[i]}

	{
		split($3,date,"-");
		if(date[2]=="01"){
			name[$1]+=$5
		};
		if($2=="0"){
			role[$1]="manager"
		}else{
			role[$1]="worker"
		}
	}
	END{
		for(i in name){
			print i "\t" name[i] "\t" role[i]
		}
	}


权限管理:
	例如:将两个用户加入到同一个组内,共享/share目录
	
	useradd
	useradd user01	(/home/user01, /var/spool/main/user01) 
	useradd user02
	passwd user01
	passwd user02

	
	0,创建share组
	groupadd share

	mkdir /share
	id user01: 打印用户或组的ID
	
	1,将两个用户加入到share组
	usermod -G share user01
	usermod -G share user02
		[root@node01 /]# id user01
		uid=1001(user01) gid=1001(user01) groups=1001(user01),1003(share)
	

	2,为/share文件夹添加所属组share
	chown root:share share
		drwxr-xr-x.  2 root share  4096 Jan 26 02:39 share
	
	3,为组share添加读写/share目录的权限,删除其他用户的权限
	(chmod augo)
	chmod g+w /share
	chmod o-rwx /share
	
	4,但是会发生
		-rw-rw-r--. 1 user01 user01 18 Jan 26 02:51 user01.txt
		-rw-rw-r--. 1 user02 user02 18 Jan 26 02:55 user02.txt
	该文件夹内的文件用户之间不能相互操作,文件所有者为文件增加所属组
	user01$ chmod :share user01.txt
	user02$ chmod :share user02.txt
		-rw-rw----. 1 user01 share 18 Jan 26 02:51 user01.txt
		-rw-rw----. 1 user02 share 18 Jan 26 02:55 user02.txt

	文件夹的执行权限x,表示有没有进入的权限



一,源码编译安装
	./configure ==> Makefile
	make
	make install

二,yum在线安装方式(可以通过替换文件 /etc/yum.repos.d 更换源)
	yum search pcre(pcre-devel开发版 development file)
	yum install -y package
	yum info mysql-server
	yum repolist enabled/all(启用的repo/全部的repo)
	yum removre/erase

	yum groupinstall
	...

	更换源的步骤
	1、备份本地源yum.repos.d
	mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
	2、更换国内源(mirrors.aliyun.com)
	CentOS 7
	wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
	3、yum clean all	
	4、yum makecache

三,rpm本地包安装 rpm Command
	-q|--query
	-a|--all
	-i|--install
	-U|--upgrade
	-e|--erase
	-v|--verbose
	-h|--hash(Print 50 hash marks as the package archive is unpacked.  Use with -v|--verbose for a nicer display.)

1,rpm 安装本地*.rpm版jdk 并配置环境变量(不需要其它依赖包)

	rpm -qa|grep jdk:
	rpm -ivh jdk-7u80....: 安装rpm版jdk
	安装完之后可以直接使用java -version,javac,javadoc,javaws命令
		
		[root@node01 bin]# type java
		java is /usr/bin/java

	这是因为rpm包中自带脚本,安装时已经把部分命令添加到/usr/bin目录中了
	
	但是还是需要手动重新配置环境变量。
	export JAVA_HOME=/usr/java/jdk1.7.0_80
	export PATH=$PATH:$JAVA_HOME/bin

2,rpm 安装本地*.rpm(下载完*.rpm文件后,还需要其它依赖包)
	2.1 如果本地没有依赖包,需要根据提示,联网下载依赖包;
	2.2 如果本地光盘中不仅有*.rpm包,还有其它依赖描述文件,可以通过创建本地yum按照源的方式,使用yum安装*.rpm

即伪yum安装:

CentOS安装光盘中有两个文件夹:Package和repodata
	Package中全部是都是rpm包
	repodata中记录rpm包的依赖关系,用来makecache。
	本地直接安装单一rpm包容易出错,缺少依赖包
	
	配置本地文件(file://)为yum源(此外还可通过ftp://, 默认通过网络http://)
	修改/etc/yum.repos.d
	[base]
	name=local
	baseurl=file:///mnt(比如软件包已经挂载到/mnt)
	gpgchech=1
	enable=1

	yum clean all--> yum makecache


四,切换中文语言环境并安装中文帮助文档:

	查看当前语言
	echo $LANG

	安装中文语言包
	yum groupinstall "Chinese Support"(CentOS 6)
	yum install kde-l10n-Chinese [ Chinese (Simplified Chinese) language support for KDE ] CentOS7

	修改为中文环境
	user01$ LANG=zh_CN.UTF-8

	增加epel的repo(repository)
	epel(RHEL 7) 
	wget -O file: Output-document
	wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
	清除缓存,重建缓存
	yum clean all && yum makecache

	安装 man man-pages man-pages-zh-CN
	yum install man man-pages man-pages-zh-CN


 

你可能感兴趣的:(Linux,瞎几把写)