基礎階段習題

1. Linux中關機重啟及註銷的命令都有哪些?

	關機:shutdown -h now (默認是分鐘),halt,init0,
	重啟:shutdown -r now (默認是分鐘),reboot,init6
	shutdown -c 取消設置
	註銷:exit,logout,ctrl+d
2. Window 遠程協議及埠,Linux 遠程協議及埠分別是多少?

	windows:rpd協議(Rdesktop),3389 號埠
	linux :ssh協議,22號埠
	
	[root@oldboy ~]# ps -ef |grep ssh    這個守護進程沒了,就不能遠程連接虛擬機了
root        809      1  0 12:47 ?        00:00:00 /usr/sbin/sshd -D
root       1146    809  0 13:29 ?        00:00:00 sshd: root@pts/0  # 當前
root       1169   1148  0 13:29 pts/0    00:00:00 grep --color=auto ssh  #grep


3. 寫出Linux命令行中常用的快捷鍵(至少10個)

	ctrl+a,ctrl+e,ctrl+w,ctrl+s,ctrl+q,ctrl+r,ctrl+z,ctrl+d,ctrl+u,ctrl+k
4. 使用一條命令把mysql-5.6.40.tar.gz解壓到/usr/local目錄下?

	tar xf mysql-5.6.40.tar.gz -C /usr/local
5. 如何查看系統中是否開啟遠程連接埠,及查看遠程連接進程是否存在?

	yum install -y net-tools
	netstat -lntup
6. 在/opt/目錄下創建文件test.txt test.log test.sh test.conf 請用一條命令創建。

	touch /opt/test.{txt,log,sh,conf}
	[root@Qeam ~]# touch test.txt test.log test.sh test.conf
7. Linux下面ping www.baidu.com 出現unknown host 錯誤如何排查?

	檢查本地DNS
	vim /etc/sysconfig/network-scripts/ifcfg-eth0
	或者添加域名解析
	vim /etc/hosts
	2.在/etc/resolv.conf中添加 DNS (默認Google的DNS)  nameserver  8.8.8.8   nameserver  8.8.4.4
	
	1、hostname 可修改主機名稱
	2、resolv.conf dns 存放文件  #
	3、hosts  域名對應的IP地址

	
8. 排除nginx.conf.default文件中的空行和以#開頭的行,將排除後的內容放入nginx.conf文件?

	egrep -v '^$|^#' nginx.conf.default >>nginx.conf
	或者
	grep -i '^[a-z]' nginx.conf.default>>nginx.conf
	[root@oldboy ~]# grep ^[A-Z] /etc/login.defs
	# 理解:重定向符重定向的是文件內容(眼前的內容)
	
	[root@qiwenjie zuoye]# sed -r '/^$|^#/d' /zuoye/sshd_config
	[root@qiwenjie zuoye]# awk '!/^$|^#/'  /zuoye/sshd_config
	
9. 請詳細描述Linux系統從打開主機電源到進入登錄介面整個過程的流程?

	C6: 按下電源--系統家電自檢--grub菜單--載入內核--運行init--系統初始化--建立終端--登陸
	C7:按下電源--系統家電自檢--grub2菜單--載入內核--運行systemd--系統初始化--建立終端--登陸
10. 說明一下軟連接和硬鏈接的區別?

	硬鏈接:創建命令不同(ln 源文件 鏈接文件),不能跨越系統分區,源文件刪除硬鏈接照樣可以使用,只能對文件創建硬鏈接
	軟連接:創建命令不同(ln -s 源文件 鏈接文件),可以跨越系統分區,可以跨越系統分區,源文件刪除軟連接不能再被使用了
11. 描述一下當你在Linux命令行上面執行命令的執行過程?

	判斷命令有沒有別名
	判斷是不是絕對路徑,絕對路徑的話直接執行,相對路徑繼續判斷
	判斷命令在不在環境變數PATH裡面
	不在環境變數裡面的話檢查該命令有沒有hash快取,有的話執行,沒有就報錯
	該命令在環境變數裡面的話就執行
12. /etc/passwd文件以':' 為分割符, 分為7個欄位,請說明一下每個欄位的具體含義?(不提供文件內容)

	用戶名,uid,gid,密碼佔位符,注釋,家目錄,登陸shell
13. 使用cat命令把shanghai nanjing beijing三行內容寫入到test.txt文件中

	cat >>test.txt<<EOF
	shanghai
	nanjing
	beijing
	EOF
	或者
	cat >>test.txt
	shanghai
	nanjing
	beijing
	按ctrl+c結束編輯
14. rm是個危險的命令,要求使用命令rm刪除文件時提示「rm command no bny」,怎麼實現?

	查看系統中的別名 alias
	注釋rm已經設置的別名
	vim /root/.bashrc
	設置新的別名,加入全局環境變數
	echo "alias rm='echo rm command no bny'">> /etc/profile
	source /etc/profile
	如果想刪除的話就 \rm
	#別名,替換的也一定是一個命令,所以當你要輸出內容時,就用echo
	#a=b echo $a
	
	[root@oldboy ~]# echo "jj" ll
	jj ll
	
	echo "alias rm='echo rm command no bny'"  #先執行外面的,所見即所得,所以  $()  ''
	
	
15. 在使用vim編輯文件時,當你執行了撤銷的時候,發現撤銷錯了,回滾,怎麼操作。

	ctrl+r
16. 使用命令給一個文件的每一行結尾加一個結尾標識符。(兩種方法實現)

	cat -E 1.txt
	vim 1.txt
	:set list
	sed 's#$#$#g' 1.txt
	# 理解,每行文件內容的末尾都有隱藏的換行符($)
17. 查找/var/log/目錄下,半年前的普通文件並將其刪除?(兩種方法)

	find /var/log -mtime +182 -type f |xargs rm -rf
	find /var/log ! -mtime -181 -type f /var/log |xargs rm -rf   
18. 取出test.txt文件中的第5行和第7行的內容(三種方法)

	1> awk 'NR==5;NR==7' test.txt
	2> sed '/5p;7p/' test.txt
	3> grep -n test.txt|egrep -w '^5|^7'
	4> cat -n test.txt|egrep -w '^5|^7'
19. 把test這組字元串插入到test.txt文件的首行位置(兩種方法)。#

	1> echo test > 1.txt
	   cat test.txt>>1.txt
	   \mv 1.txt test.txt
	2> sed -i 's#1itest#g'
	3> [root@qiwenjie zuoye]# sed 's#$#test#g' qls.txt  不換行插入指定行末尾
20. 刪除test.txt文件中的第10行到20行。(兩種方法) #

	1> sed -i '/10,20/d' test.txt
	2> awk 
21. 使用awk命令取出文件test.txt第三列以4開頭的行?

	awk '/^4/{print $3}' test.txt
22. 刪除test.txt文件中的所有空行,有的空行裡面存在tab鍵和空格(兩種方法) #

	1> vim test.txt
	   :%s#^$#d
	2> awk '/^$/d' test.txt
	3> grep -v '^$' test.txt
	4> sed '/^$/d' test.txt
	
	如果都是空行,而空行中沒有字元的情況(但是不建議這樣寫) ###
	sed -i '/^$/d' test.txt
	建議加入 [[:space:]] 用以匹配空格、tab、^M 等特殊字元
	sed -i '/^[[:space:]]*$/d' test.txt
	上述建議方式的簡化版(本人比較喜愛的一種方式,但特殊字元只匹配過'^M',其他未驗證)
	sed -i '/^\s*$/d' test.txt
 	* (星號)用以匹配空格、tab、'^M'類特殊字元等至少零次
	
23. 請給出如下格式的date命令 例:20-03-26。請給出命令(要求是列印出三天前的日期)。

	date -s '2020-4-26'
	date +%y-%m-%d
	
	[root@oldboy ~]# date
	Wed Apr 29 17:20:32 CST 2020
	[root@oldboy ~]# date +%F  年月日
	2020-04-29
	[root@oldboy ~]# date +%F-%R
	2020-04-29-17:20
	[root@oldboy ~]# date +%F-%T    分秒用:隔開
	2020-04-29-17:21:45
	
	[root@oldboy ~]# date -s '2020-1-1 1:00'   -可以用/表示
	Wed Jan  1 01:00:00 CST 2020
	
	[root@oldboy ~]# date +%y-%m-%d       年/2月日
	20-01-01
	[root@oldboy ~]# date +%y-%m-%d-%T
	20-01-01-01:05:41

	
24. IP地址由兩部分作成:第一部分是( );第二部分是( )?

	網路位,主機位
25. nginx日誌內容如下 : ###

	1)請統計出,訪問量最多的前十個IP
	2)請統計出,用戶最喜歡訪問的URL是哪個

	1> awk '{print $1}'|sort|uniq -c|wc -l|sort -nr|head -10
    2> awk -F '[\(\)]' '////{print }'
26. 寫出CentOS系統中,配置網卡及dns 的配置文件分別是什麼?並說明兩者的 區別? #

	1> vim /etc/sysconfig/network-scripts/ifcfg-eth0  # 網卡資訊
	該文件有網卡的詳細資訊,包含/etc/resolv.conf
	2> vim /etc/resolv.conf  nameserver 192.168.0.1 (路由器)# DNS
	
	3> vim /etc/hosts   # 域名解析
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	
27. 將/var/log目錄下的修改時間是3天以前,並且大於500k的文件複製到/opt目錄下。(不低於三種方法)

	1> find /var/log -mtime +3 -size +500k |xargs cp -t /opt
	2> find /var/log -mtime +3 -size +500k |xargs -i cp {} /opt
	3> find /var/log -mtime +3 -size +500k |xargs -I {} cp {} /opt
	4> find /var/log -mtime +3 -size +500k -ok cp {} /opt \;
	5> find /var/log -mtime +3 -size +500k -exec cp {} /opt \;
28. 過濾出/etc/services 文件包含3306或1521兩數字所在的行的內容。(不低於三種方法

	1> grep '3306|1521' /etc/services
	2> sed '/3306/p;/1521/p' /etc/services
	3> awk '/3306|1521/' /etc/services   #注意格式
29. 說一下Linux系統中運行級別及對應含義(不能直接使用數字的級別,要有英文的級別)

	poweroff.target  關機
	restue.target 	單用戶模式
	multi-user.target 多用戶模式
	graphical.target  圖形化模式
	reboot.target	重啟
30. 寫出網卡配置文件eth0的內容,要求可以ping通百度

	DEVICE=eth0
	ONBOOT=yes
	BOOTPROTO=none
	IPADDR=10.0.0.200
	DATEWAY=10.0.0.2
	NETMASK=255.255.255.0
	DNS=223.5.5.5
31. 虛擬網路的網路類型分別有哪些模式?並寫出對應的特點?

	1> 橋接,該模式下虛擬機和物理機地位相同,上網不需要經過宿主機,IP容易衝突
	2> 僅主機,該模式下虛擬機不能連接外網,僅僅可以和宿主機進行網路通訊,安全,不會收到外網的影響
	3> 動態網路地址轉換模式,虛擬機以宿主機的身份訪問外網,該模式下IP相對來說很多,不易引起IP衝突
32. 將/etc/passwd文件中第一行到第五行的root替換為admin?(兩種方法)

	1> sed -n '1,5s/root/admin/g' /etc/passwd
	2> cat /etc/passwd |sed -n '1,5s/root/admin/g'
	
	[root@qiwenjie zuoye]# cat /zuoye/passwd | awk 'NR==1,NR==5'|sed ' s#root#admin#g'
	[root@qiwenjie zuoye]# cat /zuoye/passwd |sed -n  '1,5p'|sed 's#root#admin#g'

33.終止進程的命令分別是什麼?有什麼區別?	

	ctrl+c  中斷
	ctrl+d  退出
	kill    中斷
	pkill   殺死某個服務的所有進程
34. 在test.txt文件的末尾插入內容『test』。(兩種方法)

	echo test >>test.txt
	echo >>test.txt<<EOF
	test
	EOF
35. 每年每月的周一晚上21點30分執行test.sh腳本?

	crontab -e
	30 21 * * */1 /bin/sh /root/test.sh >>/dev/zero
36. Centos-7系統中怎樣修改主機名,例如,修改為web01,如何並將其快速生效?

	臨時修改: hostnamectl web01
	永久修改: hostnamectl set-hostname web01
	重啟虛擬機
37. 什麼是程式、進程和守護進程

	程式的一個靜態的概念,是一串程式碼
	進程是動態的程式,
	守護進程就是一個進程的子進程
	
	程式: 程式碼文件,放在磁碟中的數據。
	進程: 進程運行就是把程式放在記憶體里執行。
	守護進程(daemon): 持續保持運行著的程式。
	
	   守護進程,也就是通常說的Daemon進程,是Linux中的後台服務進程。它是一個生存期較長的進程,通常獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導裝入時啟動,在系統關閉時終止。Linux系統有很多守護進程,大多數服務都是通過守護進程實現的,同時,守護進程還能完成許多系統任務,例如,作業規划進程crond、列印進程lqd等(這裡的結尾字母d就是Daemon的意思)。

  由於在Linux中, 每一個系統與用戶進行交流的介面稱為終端,每一個從此終端開始運行的進程都會依附於這個終端,這個終端就稱為這些進程的控制終端,當控制終端被關閉時,相應的進程都會 自動關閉。但是守護進程卻能夠突破這種限制,它從被執行開始運轉,直到整個系統關閉時才退出。#如果想讓某個進程不因為用戶或終端或其他地變化 而受到影響,那麼就必須把這個進程變成一個守護進程
	
38. 顯示系統中可安裝的包並以tre開頭的軟體包?(兩種方法

	mount /dev/cdrom /mnt
	1> rpm -q /mnt/Packages/tre(TAB)
	2> rpm -q /mnt /Packages/tre*
39. 把/etc/中的所有目錄(僅目錄) 複製到/tmp下,目錄結構不變?(兩種方法)

	1> find /etc -type d |xargs cp -at /tmp
	2> cp -r /etc /tmp
	   find /tmp/etc ! -type d |xargs rm -rf
40. 打包/etc/目錄,要求不打包/etc/hosts和/etc/hostname這兩個文件

	tar zcf etc.tgz /etc --exclude=/etc/hosts --exclude=/etc/hostname
41. 使用tar命令打包/etc/時,會出現一個刪根的操作,怎樣打包不會進行刪根的操作?寫出命令(兩種方法)

	1> tar zcPf etc.tgz /etc
	2> cd /
	   tar zcf etc.tgz etc
42. 查找/etc目錄下大於1M且類型為普通文件的所有文件?

	find /etc -size +1M -type f
43. 創建目錄/test,要求所有用戶對這個目錄有所有許可權,現在只想讓每個用戶在這個目錄只能對屬於自己的文件進行操作,怎麼實現?

	mkdr -m 777 /test
	chmod 1777 /test
44. 查看你的伺服器中有哪些可用的yum源倉庫?

	yum repolist
45. 使用"seq 50"將以0結尾的行標準輸出到number.txt中?(三種方法)

	seq 50|grep 0$>number.txt
46. 假設公司研發部的用戶yanfa和dev屬於組yf,財務部的用戶caiwu和money屬於組cw,根據要求創建用戶及組。

	groupadd yf
	groupadd cw
	useradd yanfa -G yf
	useradd dev -G yf
	useradd caiwu -G cw
	useradd money -G cw
47. 請使用20種方法取出下面的ip

	[root@web01 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500  state UP group default qlen 1000
    link/ether 00:0c:29:20:34:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.61/24 brd 10.0.0.255 scope global noprefixroute eth0  #前方四個空格
       valid_lft forever preferred_lft forever
​
[root@web01 ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.61  netmask 255.255.255.0  broadcast 10.0.0.255 #前方8個空格
        ether 00:0c:29:20:34:58  txqueuelen 1000  (Ethernet)
        RX packets 19705  bytes 1784927 (1.7 MiB)
        
[root@web01 ~]# hostname -I
10.0.0.151 172.16.1.151

	ip a s eth0
	ip a s eth0|awk -F '[/ ]' 'NR==3{print $6}'
	ip a s eth0|sed -nr '/init/s#.*init (.*)/24.*#\1#p'
	[root@qiwenjie test]# ip a s eth0 | sed -n 3p| sed -r  's#^.*t ##g'|sed -r 's#/.*$##g'(正則)
	#為什麼沒有貪婪匹配?
	[root@qiwenjie test]# ip a s eth0 | sed -n 3p| sed -r  's#(^.*t)(.*)(/.*$)#\2#g'
	ip a s eth0|grep init|cut -c 10-18
	
	ifconfig eth0
	ifconfig eth0|awk 'NR==2{print $2}'
	ifconfig eth0|sed -nr '/init/s#.*init (.*) net.*#\1#p'
	ifconfig eth0|head -2|tail -1|cut -c 14-22
	
	hostname -I
	hostname -I|awk '{print $2}'
	hostname -I|sed 's#(.*) 172.*#\1#g'
	hostname -I|cut -c 1-10
	------------------------------------------------------------------------------------
	
	$() `` 先執行裡面的
	
	wc -l
	cat -n
	grep -n .*
	[root@qiwenjie ~]# cat -n /etc/services |tail -1|cut -f 1
	
	[root@qiwenjie ~]# service firewalld stop   臨時關閉防火牆
	

	
-----------------------------------------------------------------------------------------------
48. 一個目錄中有很多文件(ll查看時好多屏),想最快速度查看到最近更新的文件?

	ll|more
49. 把/opt目錄及子目錄下所有以擴展名為.xml結尾的文件中包含「beijing」的字元串全部替換為「shanghai」

	find /opt -type f -name '*.xml' |xargs sed -nr 's#bejing#sanghai#g'
	
50. 翻譯下面的報錯,說明一下什麼情況導致這樣的報錯?

01).command not found                     
02).No such file or directory             
03).Permission denied                     
04).No space left on device                 
05).File exists                             
06).Is a directory                          
07).Not a directory                       
08).Warning: Changing a readonly file     
09).Found a swap file by the name ".1.swp"
10).unrecognized option '--zls        
11).No route to host                      
12).connection refused                    
13).Access denied                         
14). Out of Memory

	1.沒有這個命令
	2.沒有這個文件或目錄
	3.許可權不足
	4.磁碟空間不足
	5.文件名重複
	6.這是個目錄
	7.這不是個目錄
     8.該文件只讀
     9.1.swp文件存在快取
     10. zls選項無法識別
     11.沒有到主機的路徑
     12.連接被拒絕
     13.訪問被拒絕
     14.記憶體不足
     
【附加題】請用使用命令,獲取到當前機器的公網IP(本題可以使用Xshell測試,但是不能百度,公網IP是指聯通或者移動或者電信分配的     
curl //members.3322.org/dyndns/getip
curl ip.6655.com/ip.aspx
curl ifconfig.me   		# 查詢較慢
curl icanhazip.com  #查詢較快
curl ident.me   # 常用
curl ipecho.net/plain
curl whatismyip.akamai.com
curl myip.dnsomatic.com
 
#更多用法訪問ifconfig.co
wget -qO - ifconfig.co
 
#返回IP和地區
curl ip.6655.com/ip.aspx?area=1


查看一個命令屬於哪個包
[root@qiwenjie ~]# rpm -qf $(which netstat)
[root@qiwenjie ~]# yum provides netstat

什麼是buffer?什麼是cache?
兩者本質上都是快取
buffer:解決頻繁寫入磁碟的快取
cache:解決頻繁讀取的磁碟快取

伺服器按照外觀分為哪幾種?
1、機架式伺服器
2、刀片伺服器
3、台式伺服器

Windows上面的遠程連接虛擬機的工具有哪些?(兩種)
1、crt
2、xshell
3、putty

掛載和卸載的命令
分區:fdisk
掛載:mount 
卸載:unmount
[root@oldboy ~]# umount /dev/cdrom  都可以卸載掛載
[root@oldboy ~]# umount /mnt/

顯示系統記憶體使用及空閑情況的命令是?(以M為單位顯示)
[root@qiwenjie ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         122         381           7         468         704
Swap:          1023           0        1023

[root@oldboy ~]# uptime
 19:51:08 up  7:03,  2 users,  load average: 0.00, 0.01, 0.05
 [root@oldboy ~]# top
top - 19:52:21 up  7:04,  2 users,  load average: 0.00, 0.01, 0.05

[root@oldboy ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
[root@oldboy ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD

df命令和du命令的作用分別是?
df:查看磁碟空間大小
dh:查看文件大小

[root@oldboy ~]# service -l status   查看所有服務的運行狀態

數據單位換算,1PB=(1024 )TB=( )GB=( )MB=( )KB=( )B?

[root@oldboy ~]# env  		查看當前環境中的所有環境變數
[root@oldboy ~]# set  		查看所有變數,兩個的差集就是自定義變數
BASH=/bin/bash
a=b
[oldboy@oldboy ~]$ unset USER   取消環境變數

# 變數設置方法
1. 直接賦值
2. 傳遞參數
3. 使用 read -p 交互設置參數

# read  ---exit 0
-p 		後面跟提示資訊,即在輸入前列印提示資訊
-s 		安靜模式,在輸入字元時不再螢幕上顯示,例如login時輸入密碼。(顏色)
-t5 	後面跟秒數,定義輸入字元的等待時間
-n1 	參數設置 read 命令計數輸入的字元。當輸入的字元數目達到預定數目時,自動退出,並將輸入的數據賦值給變數


[root@oldboy scripts]# vim yhk.sh 
#!/bin/bash
read -p  "請輸入你的銀行卡號:"  Yhk
read -s -p  "請輸入密碼:" miMa       -s #隱藏在命令行輸入的密碼
echo
echo "你的銀行卡號:"  $Yhk
echo "你的密碼為:" $miMa
[root@oldboy scripts]# sh  yhk.sh 
請輸入你的銀行卡號:123456
請輸入密碼:
你的銀行卡號: 123456
你的密碼為: 123456

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostname -I
10.0.0.200 172.16.1.0


[root@oldboy scripts]# vim xiugaizhuji.sh   (小心 10,25,5,223,)
#!/bin/bash
ethFile=/etc/sysconfig/network-scripts/ifcfg-eth[01]
Now_eth=`hostname -I|awk -F "[. ]+" '{print $4}'`
 
read -p "請輸入主機名:" Hostname
read -p "請輸入IP地址的主機位:" HostIP
 
hostnamectl set-hostname  $Hostname
sed  -i "s#${Now_eth}#${HostIP}#g" $ethFile 
 
read -p "是否重啟伺服器:{yes/no}"  REboot
if [ $REboot == yes ];then 
   echo "系統將在1分鐘後重啟!"
   shutdown -r  1 
else
   echo "已取消!"
fi

[root@qiwenjie logs]# vim  /etc/etc/sudoers +100   編輯的時候游標直接在100行

linux 常用的協議