開始安裝linux
安裝完重啓 15. 進入查看許可證,接受協議 16. 可打開以太網 17. 選擇漢語 18. 時區shanghaiios
安裝以後最好把yum命令對應的安裝源改成國內鏡像,不然安裝軟件很慢,可是最小化安裝CentOS7網絡(非最小化但未打開以太網同理)是沒有配置的,此時ping不通,丟包率1c++
字符系統改變終端字體,在 /lib/kbd/consolefonts下存有各類字體對應的文件,使用 setfont sun12x22 這樣的命令可臨時設置字體,須要持續設置可執行 echo 'setfont sun12x22' >> /etc/bashrc。sql
bashrc文件中的命令會在登入shell時執行。 yum -y update可升級全部軟件包及內核(生產環境慎用)shell
我ping不通的時候顯示:centos 7 No route to host 和 host unreachable等等,這是由於ifcfg-eth0文件的額配置的值須要加雙引號編程
基礎init 0 關機 init 1 單用戶模式 init 5 圖形界面 init 3 命令行界面 init 6 重啓 touch xxx 新建文件xxx mkdir 建立目錄 man 幫助 help 幫助 區分外部和內部複製代碼文件
pwd 顯示當前目錄名 cd 更改目錄 ls [OPTION]... [FILE]... 查看目錄下文件,可查看多個 ls 加參數 (可合併寫) -l 長格式顯示文件 -h 顯示文件大小及單位 -r 逆序顯示 -a 顯示隱藏文件 -t 按事件順序顯示 -R 遞歸顯示 / 表明根目錄 /root root用戶的home目錄 su - xxx 切換爲xxx用戶複製代碼目錄
cd cd - 回到上次目錄 cd /path/to/... 絕對 cd ./path/to/... 相對(當前) cd ../path/to/... 相對(父級) rmdir 刪除空目錄 rm -r -f 刪除非空目錄複製代碼
cp 複製目錄、文件 參數 -r 遞歸地拷貝目錄 mv 移動(更名) 通配符 * 單個字符 ?複製代碼
文本查看 cat 文本顯示到終端 head 查看文件開頭 tail 查看文件結尾 -f 文件更新後顯示信息同步更新(用於觀察日誌文件) wc 統計文件內容信息複製代碼
打包、壓縮 早期linux備份文件(主要備份etc中的文件)的介質時磁帶,使用命令tar 打包後的磁帶文件進行壓縮存儲,壓縮的命令是gzip、bzip2 tar命令集成了gzip、bzip2,打包的時候能夠進行壓縮, 需帶上參數 -z 或者 -j,分別對應gzip、bzip2 tar -c表示壓縮 -x表解包 -f指定操做類型爲文件(而非文件夾) bzip2壓縮最小 在網絡中可能見到 .tbz2和.tgz的後綴,這是bzip二、gzip的縮寫形式複製代碼vim編輯器
vi編輯器ubuntu
多模式編輯:正常模式(複製粘貼)、插入模式(文本輸入)、命令模式(保存退出)、可視模式()vim
vim編輯器:在vi基礎上增長了無窮步驟的重作和回退windows
通常進入vim最開始的模式就是正常模式,在此輸入 i、I、a、A、o、O 均可進入插入模式centos
i 在光標當前位置進入插入模式 I 在光標當前行首進入插入模式 a 在光標的下一位進入插入模式 A 對應I,在末尾進入插入模式 o 在光標下一行進入插入模式(原有的下一行依次向下移動) O 在光標上一行進入插入模式(相似小寫o) : 進入命令模式(末行) v 可視模式 h 左移動光標 j 下移動光標 k 上移動光標 l 右移動光標 在圖形界面系統中使用方向鍵也行,但在字符系統中可能只能用hjkl esc 從其餘模式回到正常模式 y 命令表示複製 yy 複製(可多行) y$ 複製光標位置到結尾的內容 d 表示剪切 dd 剪切整行 d$ 剪切光標位置到末尾 p 粘貼 u 撤銷 ctrl + r 重作 x 刪除單個字符(實爲剪切單個字符) r 替換單個字符 :set nu 顯示行數 以後按數字,而後shift + g可將光標跳轉到指定行 小寫g(按兩次跳轉到第一行) 大寫G 跳轉到最後一行 shift + 6 (^)光標到行首 shift + 4 ($)光標到行尾複製代碼
Esc 從其餘模式回到正常模式 :w 保存 :q 退出 :w path/file_name 另存 :wq 保存退出vim :q! 不保存退出 :! 臨時執行shell命令(後接要執行命令) / 查找字符(後接要查找的字符) 匹配以後按回車,再按n向下一個匹配字符移動光標 shift + n 向上一個匹配字符移動 :s/old/new 對當前行中的文本中的old字符替換爲new :%s/old/new 對整個文本進行替換 :%s/old/new 對整個文本內匹配的old進行替換 :x,ys/old/new 再x到y行進行替換 :set 設置命令複製代碼
三種進入方法 v 字符可視模式 V 行可視模式 ctrl + v 塊可視模式 配合d和I可進行塊的便利操做 d是剪切、I是在光標位置插入 在使用I插入後只是在光標位置插入了,要應用到選中的塊中須要按esc,這樣會應用到選中的塊中複製代碼用戶管理
useradd 新建用戶 userdel 刪除用戶 加上-r直接刪除用戶在home下的文件夾 好比userdel -r hui passwd 修改用戶密碼 groupadd 新建用戶組 groupdel 刪除用戶組 新建用戶組以後可使用usermod -g 組名 用戶名 把已有的用戶加入到用戶組中 也能夠在建立用戶的同時直接加入到用戶組中 useradd -g groupdemo hui2 groupdemo用戶組是已有的複製代碼
ubuntu root密碼忘記怎麼辦?加入普通用戶具備sudo權限,那麼直接sudo su root改密碼就行了,不然重置或者重裝。su僅僅取得root權限,工做環境不變,仍是在切換以前用戶的工做環境;sudo是徹底取得root的權限和root的工做環境。
新建用戶會建立 /home/username/下面的目錄,可以使用ls -a查看隱藏文件 使用tail -10 /etc/shadow 查看密碼文件 使用tail -10 /etc/passwd 查看密碼?? 建立時若沒有指定用戶組,則會建立與用戶名同名的用戶組複製代碼
su 是切換用戶 sudo 是以其餘用戶身份執行命令 visudo 設置須要使用sudo的用戶組,好比要給普通用戶設置某一命令權限,就是用visudo,而後修改文件 好比關機命令,默認只有root用戶纔有,不過可能須要受權給其餘用戶,可是又不能暴露root的密碼,因此可把這條指令受權給普通用戶 在切換用戶是經常臨時切換,否則切回root(可能)須要輸密碼比較麻煩 su - tempUserName複製代碼文件含義
/etc/passwd 格式:username:切換要不要密碼:userID:user組:註釋:家目錄:user登陸命令解釋器 root:x:0:0:root:/root:/bin/bash yama:x:1000:1000:yama:/home/yama:/bin/bash Linux識別用戶不是根據用戶名,而是根據userID,因此當有用戶ID相同,好比yama的ID爲0,則yama會變爲root用戶;加入把命令解釋器設置爲 /sbin/nologin 則表明不讓用戶登陸,好比tcpump用戶。複製代碼
/etc/shadow 保存用戶密碼文件 格式:userName:加密後的密碼::::: yama:$6$7LKCrS2L5rGfUCbw$rU1BXreBwFPF6To6q1NB7UPkvr2XTvWCh64QmVfgR Wu.J6yPcUDJZ4GUX1Xjkm0LEnHVy0y5g3AOiLaIrRWAz/::0:99999:7:::複製代碼
/etc/group 格式:組name:是否須要密碼驗證(x表示須要?):組的gid:其餘組設置 root:x:0: 其中第四個字段表明其餘組設置,好比一個用戶屬於兩個組,那麼能夠在另外一個組的第四個字段處聲明(在第四個字段寫入username便可)複製代碼
/bin是系統的一些指令。bin爲binary的簡寫主要放置一些系統的必備執行檔例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
/sbin通常是指超級用戶指令。主要放置一些系統管理的必備程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。
/usr/bin 是你在後期安裝的一些軟件的運行腳本。主要放置一些應用軟體工具的必備執行檔例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m四、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
/usr/sbin 放置一些用戶安裝的系統管理的必備程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。
若是新裝的系統,運行一些很正常的諸如:shutdown,fdisk的命令時,悍然提示:bash:command not found。那麼首先就要考慮root 的$PATH裏是否已經包含了這些環境變量。 能夠查看PATH,若是是:PATH=$PATH:$HOME/bin則須要添加成以下:PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
使用ls加參數可查看文件的各類信息 好比: -rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c dr-xr-xr-x. 17 root root 224 12月 14 16:29 .. lrwxrwxrwx. 1 root root 7 5月 11 2019 bin -> usr/bin 文件權限表示方法 -rw-r-xr--. 1 userName groupName mTime fileName (容易發現左邊的權限和右邊的屬X一一對應,第一個字符-表示文件類型) rw- 文件屬主的權限 r-x 文件屬組的權限 r-- 其餘用戶的權限 目錄權限表示方法 x 進入目錄 rx 顯示目錄內的文件名 wx 修改目錄內的文件名 建立新文件有默認權限,根據umask值計算,屬主和屬組根據當前進程的用戶來設定複製代碼
vim對文件的修改保存其實是一種對原有文件的替換
類型: - 普通文件 d 目錄文件(一切皆文件,目錄也是文件) b 塊特殊文件 c 字符特殊文件 l 符號連接 f 命名管道 s 套接字文件 字符權限: r 讀 w 寫 x 執行(好比ls、cat等命令其實都是可執行的文件,對於一個文件使用vim打開也須要執行權限) 數字權限表示方法:(八進制) r = 4 w = 2 x = 1 特殊權限s對應4,t對應1複製代碼修改權限
chmod 修改文件、目錄權限 因爲權限可用字符、數字表示,因此修改方法也有兩種chmod u+x fileNamechmod 755 fileName
u、g、o、a分別表明修改上圖中粉色、藍色、綠色、所有
chmod u+ 增長權限 chmod u- 減小權限 chmod u= 直接設置權限複製代碼
以下更改de.c文件的權限:
[root@localhost]# ls -ld de.c -rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c [root@localhost]# chmod u-w,g+x,o=rwx de.c [root@localhost]# ls -ld de.c -r--rwxrwx. 1 yama yama 52 12月 20 12:51 de.c複製代碼
還有一種方法是使用數字來表示,數字467分別表明讀、讀寫、讀寫執行,也就是權限值相加 好比 chmod 446 de.c 表明給de.c文件設置屬主讀權限,屬組讀權限,其餘用戶讀寫權限 [root@localhost]# ls -ld de.c -rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c [root@localhost]# chmod 446 de.c [root@localhost]# ls -ld de.c -r--r--rw-. 1 yama yama 52 12月 20 12:51 de.c [root@localhost]# chmod 664 de.c [root@localhost]# ls -ld de.c -rw-rw-r--. 1 yama yama 52 12月 20 12:51 de.c複製代碼
在Linux裏面建立文件默認是666權限,可是會減去umask文件掩碼(0022),也就是022,因此新建文件默認權限是644,也就是 rw-r--r--。
chown 更改屬組、屬主
經本身的centos8測試,屬主及屬組爲yama的文件不能被yama用戶更改屬組和屬主,這可能和本身的配置有關,root用戶不受限制
chown yama ./de.c 表示更改de.c文件的屬主爲yama, 若是要更改屬組須要使用 chown :groupName fileName
chgrp 能夠單獨更改屬組(不經常使用)
在terminal使用 ctrl + r 能夠搜索以前使用過的命令
儘可能不要使用root用戶作權限的修改,由於它是不受任何限制的,即使一個文件只有屬主纔有讀權限,root用戶也能對其進行寫入等等操做。 在教程中都是用root用戶,這是爲了減小練習環境不一致致使的錯誤解讀,並且只是練習環境,因此可使用root,在生產環境中不要這麼作。
echo 顯示(對比編程語言中的print) echo huidt > fileA 表示把本來的輸出‘huidt’ 重定向至fileA文件中 > 這個符號會把本來文件中的內容所有清空 當文件權限出現衝突,好比: user1用戶屬於group1用戶組,文件fileA的權限是----w----,也就是說只有用戶組李的用戶對其纔有寫權限 而屬主user1並無任何權限,可是user1又屬於group1, 此時user1對文件fileA是沒有任何權限的,這時候衝突的權限要以屬主爲準,而不是屬組複製代碼
對於目錄文件,通常的權限組合是x、rx、wx 對於系統目錄,下面的目錄權限可能不同,文件確是同樣的 對於這樣的權限叫作特殊權限,有如下幾種 SUID:用於二進制可執行文件,執行命令時取得文件屬主權限。如 /usr/bin.passwd SGID:用於目錄,在改目錄下建立新的文件和目錄,權限自動改成該目錄的屬組 SBIT:用於目錄,該目錄下新建的文件和目錄,僅root和本身能夠刪除。如 /tmp 以下:有一個特殊的s權限,指的是SUID,表明無論是root用戶仍是普通用戶在執行這個文件時都會以文件的屬主進行操做 [yama@localhost demo]$ ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 33600 4月 7 2020 /usr/bin/passwd複製代碼
SUID的意思是 set user id,好比普通用戶執行 passwd 命令的時候,對應的密碼文件保存在/etc/shadow 下 ----------. 1 root root 1489 12月 20 13:52 /etc/shadow 這個文件任何用戶都是沒有權限的(root除外,它的屬主也是root),因此 s 表明當普通用戶,好比 yama 執行的時候,會自動取得屬主root的權限,這使得普通用戶也有了操做系統文件的部分權限
還有SBIT,能夠看到末尾的其餘用戶有一個t權限,由於/tmp是臨時目錄,任何用戶均可以在此操做,但爲了防止其餘用戶刪掉當前的文件,因此設置t權限
[root@localhost demo]# ls -ld /tmp drwxrwxrwt. 31 root root 4096 12月 21 15:59 /tmp複製代碼
在修改特殊權限的時候再也不使用權限數字相加,而是將特殊權限單獨列在數字開頭,好比s對應4,t對應1,那麼 /usr/bin/passwd 文件的權限就是4755,/tmp 權限就是1777,就是在原有數字的前面加上特殊權限數字。
網絡管理net-tools VS iproute2
ifconfig eth0 第一塊網卡(網絡接口) 第一個網絡接口也可能叫其餘名字: eno1 板載網卡 ens33 PCI-E網卡 enp0s3 沒法獲取物理信息的PCI-E網卡 CentOS 7使用了一致性網絡設備命名,以上不匹配則使用eth0複製代碼
以下爲 ifconfig 的結果 ens33即爲個人設備網卡名,inet 表IP地址,netmask 表子網掩碼,inet6 表MAC地址,RX、TX表發送和接受的數據。其中還有一個 lo 網卡表示本地環回,IP地址永遠是127.0.0.1,用來開發測試,virbr0 網卡通常是Linux虛擬化出來的一些網關
[yama@localhost demo]$ ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.43.127 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80::1744:b082:b9d8:f881 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:f4:9f:76 txqueuelen 1000 (Ethernet) RX packets 47 bytes 9571 (9.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 81 bytes 9273 (9.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 48 bytes 4080 (3.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 48 bytes 4080 (3.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:02:6f:c5 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0複製代碼
查看網線鏈接 [root@localhost yama]# mii-tool eth0 eth0: negotiated 1000baseT-FD flow-control, link ok複製代碼
當網絡通訊時須要鏈接其餘網絡地址範圍時就須要配置網關,也可稱做配置路由。 網關Gateway又叫網間鏈接器、協議轉換器,在網絡層以上實現網絡互連。 網關實質上是一個網絡通向其餘網絡的IP地址,訪問某個網站時把包首先發送到哪一個IP地址(這個IP地址是網關), 而後由這個IP地址上的設備負責分發數據包。
route命令,使用n參數不解析主機名
[root@localhost yama]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.43.1 0.0.0.0 UG 100 0 0 eth0 192.168.43.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@localhost yama]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 100 0 0 eth0 192.168.43.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0複製代碼
上面的default表示默認網關192.168.43.1,除默認網關以外還可配置器明細路由,也叫靜態路由
ifconfig <接口> <IP地址> [netmask] 表修改網絡配置 ifup <接口> 啓用網卡,好比ifup eth0 ifdown <接口> 禁用網卡 添加網關 添加默認網關 route add default gw <Gateway IP> 添加指定網關 route add -host <指定IP> gw <Gateway IP> 在訪問特定主機ip時走指定的網關 添加指定網段的網關 route add -net <指定網段> netmask <子網掩碼> gw <Gateway IP> 在訪問指定網段時的路由 刪除網關 route del default gw <Gateway IP>複製代碼
修改網關通常是刪除舊的再增長新的
網絡命令集合:ip命令
ip addr lsxxxx ......對應:ifconfig ip link set dev eth0 up 設置網卡啓停對應:ifup eth0 和 ifdown eth0 ip addr add 10.0.0.1/24 dev eth1 對應:ifconfig eth1 10.0.0.1 netmask 255.255.255.0(設置ip和子網掩碼) ip route add 10.0.0.1/24 via 192.168.0.1 對應:route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1複製代碼
在對大量網絡設備進行操做時若是設備網卡名不一樣,則批量化操做起來就會比較麻煩,因此須要修改成一致的網卡名。
網卡命名規則受兩個參數的影響:biosdevname 和 net.ifnames
以下是CentOS_8的grub文件的內容,其中GRUB_CMDLINE_LINUX表示系統啓動時linux須要作的一些內容(引導內核kernel),相似於啓動菜單,在quiet以後設置參數便可,設置後不會當即生效,由於這個文件只是用來用戶讀取的
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd .lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true" GRUB_ENABLE_BLSCFG=true複製代碼
步驟總結:
biosdevname | net.ifnames | NIC name | |
---|---|---|---|
default | 0 | 1 | ens33 |
Combination 1 | 1 | 0 | em1 |
Combination 2 | 0 | 0 | eth0 |
複製代碼
見網絡配置命令
見iproute2
ping traceroute mtr nslookup telnet tcpdump netstat ss複製代碼
traceroute可加參數w,好比 traceroute -w 1 www.baidu.com ,表示若是其中的一個ip長時間超時,則只等待最多1s
[yama@localhost ~]$ traceroute -w 1 yama.thdong.top traceroute to yama.thdong.top (47.103.10.22), 30 hops max, 60 byte packets 1 _gateway (192.168.43.1) 6.442 ms 6.479 ms 7.087 ms 2 * * * 3 10.138.76.213 (10.138.76.213) 57.145 ms 57.087 ms 57.167 ms 4 * * * 其中的*號表示主機不支持traceroute追蹤複製代碼
mtr直接執行,當主機間通訊時會顯示比traceroute更加詳細的信息。
nslookup可從域名獲得ip [yama@localhost ~]$ nslookup yama.thdong.top Server: 192.168.43.1 Address: 192.168.43.1#53 Non-authoritative answer: Name: yama.thdong.top Address: 47.103.10.22 server默認是DNS [root@centos8 demo]# nslookup > server Default server: 172.18.6.89 Address: 172.18.6.89#53 Default server: 114.114.114.114 Address: 114.114.114.114#53 Default server: 172.18.6.88 Address: 172.18.6.88#53複製代碼
telnet可用於檢測與目標主機的某端口是否暢通,是常見的控制遠程服務器的方法,ctrl + ] 中止,quit退出telnet [yama@localhost ~]$ telnet www.baidu.com 80 Trying 36.152.44.95... Connected to www.baidu.com. Escape character is '^]'. ^] telnet> quit Connection closed. [yama@localhost ~]$ 複製代碼
tcpdump通常做爲網絡抓包工具 [root@localhost demo]# tcpdump -i any -n port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel -i any表示抓取任意網卡,-n表示不解析成域名(以IP顯示),port 80表示80端口 還能夠捕獲某一主機,使用host參數 tcpdump -i any -n host 10.0.0.1 若是向指定某一ip的端口,則同時使用host和port tcpdump -i any -n host 10.0.0.1 and port 80 可以使用-w 以及文件路徑及文件名把捕獲到的結果保存下來複制代碼
netstat用於顯示各類網絡相關信息,如網絡鏈接,路由表,接口狀態 (Interface Statistics),masquerade 鏈接,多播成員 (Multicast Memberships) 等等 [root@localhost demo]# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1705/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1118/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1115/cupsd tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 1118/sshd tcp6 0 0 ::1:631 :::* LISTEN 1115/cupsd n顯示ip t表以tcp方式 p表進程 l表tcp狀態(listen)複製代碼
ss命令使用與netstat基本相同,顯示格式不一樣 [root@localhost demo]# ss -ntpl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=879,fd=4),("systemd",pid=1,fd=37)) LISTEN 0 32 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=1705,fd=6)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1118,fd=5)) LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1115,fd=10)) LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=879,fd=6),("systemd",pid=1,fd=39)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1118,fd=7)) LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=1115,fd=9)) 複製代碼
網絡服務管理程序分爲兩種:Sysv和systemd
有關配置文件爲/etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/hosts
在centos7中使用 service network status 查看網絡狀態,其實已經使用了systemctl來進行控制,在7中處理network,還有NetworkManager這樣一個服務,而centos8 已經用NetworkManager替換了network,使用 systemctl status NetworkManager查看網絡狀態,不過NetworkManager服務徹底是由systemctl來警醒控制的。
以下查看網絡狀態
[root@localhost demo]# systemctl status NetworkManager ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor pr> Active: active (running) since Fri 2020-12-25 16:56:47 CST; 35min ago Docs: man:NetworkManager(8) Main PID: 5109 (NetworkManager) Tasks: 3 (limit: 11154) Memory: 4.5M CGroup: /system.slice/NetworkManager.service └─5109 /usr/sbin/NetworkManager --no-daemon 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:49 centos8.yama101 NetworkManager[5109]: <info> [1608888409.6276] dhcp> 12月 25 17:26:50 centos8.yama101 NetworkManager[5109]: <info> [1608888410.7571] agen> 12月 25 17:30:49 centos8.yama101 NetworkManager[5109]: <info> [1608888649.6596] audi> [root@localhost demo]# 複製代碼
查看NetworkManager服務
[yama@centos8 demo]$ systemctl list-unit-files NetworkManager.service UNIT FILE STATE NetworkManager.service enabled 1 unit files listed.複製代碼
這樣理解network服務,NetworkManager服務,network服務是centos6的網絡默認管理工具, centos7重寫了一遍就是NetworkManage服務,由於network只能支持service來管理, 而centos7默認的服務管理工具換成了systemctl(centos7中的network和NetworkManager都是用它實現的)
在centos7中若是須要沿用之前的控制方式就須要禁用新的方式(NetworkManager),反之在使用新的方式進行控制的時候建議禁用舊的方式;不要兩套一塊兒用。
在centos7中使用 chkconfig --list network 能夠查看network在不一樣運行級別中的使用狀況(在centos8中已經查不到), 而後可以使用 chkconfig --level xxxx(數字級別) network off|on 進行啓用或禁用 使用 systemctl enable|disable NetworkManager 啓用或禁用NetworkManager服務複製代碼
ifconfig 和 ip 是一樣的狀況,他們均可以查詢網絡狀態,均可以設置ip,可是設置了以後只能保存在內存中,重啓以後配置就沒有了。要想重啓以後還須要保持配置須要寫入配置文件, 經過service network restart 從新加載配置文件來讓網絡配置生效,記住在centos8中只有systemctl restart NetworkManager了
/etc/sysconfig/network-scripts/ifcfg-* 以及 /etc/hosts,前者是各個網卡的配置文件
[root@localhost demo]# hostname centos8-101.yama 臨時修改主機名 [root@localhost demo]# hostnamectl set-hostname centos8.yama101 永久修改,永久修改記得同時更改 /etc/hosts 文件 中本機地址127.0.0.1的對應關係,以下 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 centos8.yama101複製代碼軟件安裝
CentOS、RedHat、Fedora使用yum包管理器,軟件安裝包格式爲rpm,(RedHat Package Manager) Debian、Ubuntu使用apt包管理器,軟件安裝格式爲deb
rpm命令經常使用參數 -q 查村軟件包 -i 安裝軟件包 -e 卸載軟件包 查詢時可以使用 -a | more 進行分屏,例如 rpm -qa | more 分屏後空格看下一屏,q退出複製代碼
能夠下載到光盤中,插入光驅,而後在Linux中識別,/dev/ 文件夾下的塊設備(指b開頭的文件,沒法使用cat、cp等命令操做,詳見文件含義),而後執行
把真的光盤作成光盤鏡像 dd if=/dev/file of=/xxx/xxx.iso 可以使用mount(掛載)命令對這種塊特殊文件進行操做,特別是在字符界面不會有像windows那樣插入U盤彈出盤符的提示,因此必須手動操做。 mount /dev/sr0 /mnt rpm包在複製代碼
虛擬機軟件可以使用VirtualBox,免費,輕量 新建用戶 [root@centos8 yama]# useradd 2017218049 useradd:無效的用戶名「2017218049」 [root@centos8 yama]# useradd thd2017218049 [root@centos8 yama]# passwd thd2017218049 更改用戶 thd2017218049 的密碼 。 新的 密碼: 無效的密碼: 密碼少於 8 個字符 從新輸入新的 密碼: passwd:全部的身份驗證令牌已經成功更新。 [root@centos8 yama]# su thd2017218049 [thd2017218049@centos8 yama]$ 經常使用指令 [thd2017218049@centos8 ~]$ cd /home/thd2017218049 [thd2017218049@centos8 ~]$ mkdir 2017218049 [thd2017218049@centos8 ~]$ touch index.c [thd2017218049@centos8 ~]$ man vim [thd2017218049@centos8 ~]$ vim index.c [thd2017218049@centos8 ~]$ mv ./index.c ./buble.c [thd2017218049@centos8 ~]$ ls 2017218049 buble.c [thd2017218049@centos8 ~]$ ls -lhd ./* drwxrwxr-x. 2 thd2017218049 thd2017218049 6 12月 28 12:14 ./2017218049 -rw-rw-r--. 1 thd2017218049 thd2017218049 566 12月 28 12:20 ./buble.c [thd2017218049@centos8 ~]$ mv ./buble.c ./2017218049/buble.c [thd2017218049@centos8 ~]$ cd 2017218049 [thd2017218049@centos8 2017218049]$ ls buble.c [thd2017218049@centos8 2017218049]$ chmod 754 buble.c [thd2017218049@centos8 2017218049]$ ls -lh * -rwxr-xr--. 1 thd2017218049 thd2017218049 566 12月 28 12:20 buble.c [thd2017218049@centos8 2017218049]$ mii-tool ens33 SIOCGMIIPHY on 'ens33' failed: Operation not permitted [thd2017218049@centos8 2017218049]$ su - root 密碼: 上一次登陸:一 12月 28 12:08:13 CST 2020pts/0 上 [root@centos8 ~]# mii-tool ens33 ens33: negotiated 1000baseT-FD flow-control, link ok [root@centos8 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.43.1 0.0.0.0 UG 100 0 0 ens33 192.168.43.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@centos8 ~]# vim /etc/default/grub [root@centos8 ~]# cd /etc/default [root@centos8 default]# ls grub nss useradd [root@centos8 default]# cd /etc/sysconfig/network-scripts [root@centos8 network-scripts]# ls ifcfg-ens33 ifdown-ppp ifup-ib ifup-Team ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort ifdown ifdown-sit ifup-ipv6 ifup-tunnel ifdown-bnep ifdown-Team ifup-isdn ifup-wireless ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global ifdown-ib ifdown-tunnel ifup-plusb network-functions ifdown-ippp ifup ifup-post network-functions-ipv6 ifdown-ipv6 ifup-aliases ifup-ppp ifdown-isdn ifup-bnep ifup-routes ifdown-post ifup-eth ifup-sit [root@centos8 network-scripts]# mv ./ifcfg-ens33 ./ifcfg-eth0 [root@centos8 network-scripts]# ls ifcfg-eth0 ifdown-ppp ifup-ib ifup-Team ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort ifdown ifdown-sit ifup-ipv6 ifup-tunnel ifdown-bnep ifdown-Team ifup-isdn ifup-wireless ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global ifdown-ib ifdown-tunnel ifup-plusb network-functions ifdown-ippp ifup ifup-post network-functions-ipv6 ifdown-ipv6 ifup-aliases ifup-ppp ifdown-isdn ifup-bnep ifup-routes ifdown-post ifup-eth ifup-sit [root@centos8 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-d7a82457455c4d0798c57d3f4632b8e8 Found initrd image: /boot/initramfs-0-rescue-d7a82457455c4d0798c57d3f4632b8e8.img done [root@centos8 network-scripts]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.43.235 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80::33fb:dc46:4fc0:7864 prefixlen 64 scopeid 0x20<link> inet6 2409:8930:b4d3:228b:b373:3115:8bc6:d393 prefixlen 64 scopeid 0x0<global> ether 00:0c:29:6b:6f:d6 txqueuelen 1000 (Ethernet) RX packets 2261 bytes 1891625 (1.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1041 bytes 81817 (79.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 323 bytes 28152 (27.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 323 bytes 28152 (27.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:2e:20:25 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 network-scripts]# pwd /etc/sysconfig/network-scripts [root@centos8 network-scripts]# ls ifcfg-eth0 ifdown-ppp ifup-ib ifup-Team ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort ifdown ifdown-sit ifup-ipv6 ifup-tunnel ifdown-bnep ifdown-Team ifup-isdn ifup-wireless ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global ifdown-ib ifdown-tunnel ifup-plusb network-functions ifdown-ippp ifup ifup-post network-functions-ipv6 ifdown-ipv6 ifup-aliases ifup-ppp ifdown-isdn ifup-bnep ifup-routes ifdown-post ifup-eth ifup-sit [root@centos8 network-scripts]# vim ifcfg-eth0 [root@centos8 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-d7a82457455c4d0798c57d3f4632b8e8 Found initrd image: /boot/initramfs-0-rescue-d7a82457455c4d0798c57d3f4632b8e8.img done [root@centos8 network-scripts]# hostname centos8.yama102 [root@centos8 network-scripts]# hostnamectl set-hostname centos7.yama102 [root@centos8 network-scripts]# hostname centos7.yama102 [root@centos8 network-scripts]# cd /home/thd2017218049/2017218049 [root@centos8 2017218049]# ls buble.c [root@centos8 2017218049]# mv ./buble.c ./2017218049.c [root@centos8 2017218049]# ls 2017218049.c [root@centos8 2017218049]# gcc -v bash: gcc: 未找到命令... [root@centos8 2017218049]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak [root@centos8 2017218049]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo --2020-12-28 12:47:21-- http://mirrors.aliyun.com/repo/Centos-7.repo 正在解析主機 mirrors.aliyun.com (mirrors.aliyun.com)... 112.29.211.20, 112.28.200.242, 112.30.160.147, ... 正在鏈接 mirrors.aliyun.com (mirrors.aliyun.com)|112.29.211.20|:80... 已鏈接。 已發出 HTTP 請求,正在等待迴應... 200 OK 長度:2523 (2.5K) [application/octet-stream] 正在保存至: 「/etc/yum.repos.d/CentOS-Base.repo」 100%[======================================>] 2,523 --.-K/s 用時 0s 2020-12-28 12:47:22 (5.94 MB/s) - 已保存 「/etc/yum.repos.d/CentOS-Base.repo」 [2523/2523]) [root@centos8 2017218049]# yum makecache 已加載插件:fastestmirror, langpacks Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00 extras | 2.9 kB 00:00 updates | 2.9 kB 00:00 (1/10): extras/7/x86_64/filelists_db | 224 kB 00:01 base/7/x86_64/primary_db FAILED http://mirrors.cloud.aliyuncs.com/centos/7/os/x86_64/repodata/6d0c3a488c282fe537794b5946b01e28c7f44db79097bb06826e1c0c88bad5ef-primary.sqlite.bz2: [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error" 正在嘗試其它鏡像。 (2/10): extras/7/x86_64/primary_db | 222 kB 00:00 (3/10): base/7/x86_64/group_gz | 153 kB 00:02 (4/10): base/7/x86_64/other_db | 2.6 MB 00:02 (5/10): updates/7/x86_64/other_db | 334 kB 00:00 (6/10): updates/7/x86_64/filelists_db | 2.7 MB 00:01 (7/10): base/7/x86_64/primary_db | 6.1 MB 00:03 base/7/x86_64/filelists_db FAILED http://mirrors.aliyuncs.com/centos/7/os/x86_64/repodata/d6d94c7d406fe7ad4902a97104b39a0d8299451832a97f31d71653ba982c955b-filelists.sqlite.bz2: [Errno 12] Timeout on http://mirrors.aliyuncs.com/centos/7/os/x86_64/repodata/d6d94c7d406fe7ad4902a97104b39a0d8299451832a97f31d71653ba982c955b-filelists.sqlite.bz2: (28, 'Connection timed out after 30000 milliseconds') 正在嘗試其它鏡像。 extras/7/x86_64/other_db FAILED http://mirrors.aliyuncs.com/centos/7/extras/x86_64/repodata/2e9fd48ed164af0d6a80c2a07dc67c09d733ea94fbde75f81cc7076405c90124-other.sqlite.bz2: [Errno 12] Timeout on http://mirrors.aliyuncs.com/centos/7/extras/x86_64/repodata/2e9fd48ed164af0d6a80c2a07dc67c09d733ea94fbde75f81cc7076405c90124-other.sqlite.bz2: (28, 'Connection timed out after 30000 milliseconds') 正在嘗試其它鏡像。 (8/10): base/7/x86_64/filelists_db | 7.2 MB 00:03 (9/10): extras/7/x86_64/other_db | 134 kB 00:01 updates/7/x86_64/primary_db FAILED http://mirrors.aliyuncs.com/centos/7/updates/x86_64/repodata/54834ed57c7c2b0259f68aa900001055256475f9349907045268aacc586f0875-primary.sqlite.bz2: [Errno 12] Timeout on http://mirrors.aliyuncs.com/centos/7/updates/x86_64/repodata/54834ed57c7c2b0259f68aa900001055256475f9349907045268aacc586f0875-primary.sqlite.bz2: (28, 'Connection timed out after 30002 milliseconds') 正在嘗試其它鏡像。 (10/10): updates/7/x86_64/primary_db | 4.7 MB 00:01 元數據緩存已創建 [root@centos8 2017218049]# rpm -q gcc 未安裝軟件包 gcc [root@centos8 2017218049]# yum install gcc -y 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 正在解決依賴關係 --> 正在檢查事務 ---> 軟件包 gcc.x86_64.0.4.8.5-44.el7 將被 安裝 --> 正在處理依賴關係 cpp = 4.8.5-44.el7,它被軟件包 gcc-4.8.5-44.el7.x86_64 須要 --> 正在處理依賴關係 glibc-devel >= 2.2.90-12,它被軟件包 gcc-4.8.5-44.el7.x86_64 須要 --> 正在檢查事務 ---> 軟件包 cpp.x86_64.0.4.8.5-44.el7 將被 安裝 ---> 軟件包 glibc-devel.x86_64.0.2.17-317.el7 將被 安裝 --> 正在處理依賴關係 glibc-headers = 2.17-317.el7,它被軟件包 glibc-devel-2.17-317.el7.x86_64 須要 --> 正在處理依賴關係 glibc-headers,它被軟件包 glibc-devel-2.17-317.el7.x86_64 須要 --> 正在檢查事務 ---> 軟件包 glibc-headers.x86_64.0.2.17-317.el7 將被 安裝 --> 正在處理依賴關係 kernel-headers >= 2.2.1,它被軟件包 glibc-headers-2.17-317.el7.x86_64 須要 --> 正在處理依賴關係 kernel-headers,它被軟件包 glibc-headers-2.17-317.el7.x86_64 須要 --> 正在檢查事務 ---> 軟件包 kernel-headers.x86_64.0.3.10.0-1160.11.1.el7 將被 安裝 --> 解決依賴關係完成 依賴關係解決 ================================================================================ Package 架構 版本 源 大小 ================================================================================ 正在安裝: gcc x86_64 4.8.5-44.el7 base 16 M 爲依賴而安裝: cpp x86_64 4.8.5-44.el7 base 5.9 M glibc-devel x86_64 2.17-317.el7 base 1.1 M glibc-headers x86_64 2.17-317.el7 base 690 k kernel-headers x86_64 3.10.0-1160.11.1.el7 updates 9.0 M 事務概要 ================================================================================ 安裝 1 軟件包 (+4 依賴軟件包) 總下載量:33 M 安裝大小:59 M Downloading packages: 警告:/var/cache/yum/x86_64/7/base/packages/cpp-4.8.5-44.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY cpp-4.8.5-44.el7.x86_64.rpm 的公鑰還沒有安裝 (1/5): cpp-4.8.5-44.el7.x86_64.rpm | 5.9 MB 00:03 (2/5): glibc-devel-2.17-317.el7.x86_64.rpm | 1.1 MB 00:00 (3/5): glibc-headers-2.17-317.el7.x86_64.rpm | 690 kB 00:00 (4/5): gcc-4.8.5-44.el7.x86_64.rpm | 16 MB 00:08 kernel-headers-3.10.0-1160.11.1.el7.x86_64.rpm 的公鑰還沒有安裝 32 MB 00:00 ETA (5/5): kernel-headers-3.10.0-1160.11.1.el7.x86_64.rpm | 9.0 MB 00:04 -------------------------------------------------------------------------------- 總計 3.5 MB/s | 33 MB 00:09 從 http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 檢索密鑰 導入 GPG key 0xF4A80EB5: 用戶ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" 指紋 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 來自 : http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安裝 : cpp-4.8.5-44.el7.x86_64 1/5 正在安裝 : kernel-headers-3.10.0-1160.11.1.el7.x86_64 2/5 正在安裝 : glibc-headers-2.17-317.el7.x86_64 3/5 正在安裝 : glibc-devel-2.17-317.el7.x86_64 4/5 正在安裝 : gcc-4.8.5-44.el7.x86_64 5/5 驗證中 : glibc-devel-2.17-317.el7.x86_64 1/5 驗證中 : gcc-4.8.5-44.el7.x86_64 2/5 驗證中 : kernel-headers-3.10.0-1160.11.1.el7.x86_64 3/5 驗證中 : glibc-headers-2.17-317.el7.x86_64 4/5 驗證中 : cpp-4.8.5-44.el7.x86_64 5/5 已安裝: gcc.x86_64 0:4.8.5-44.el7 做爲依賴被安裝: cpp.x86_64 0:4.8.5-44.el7 glibc-devel.x86_64 0:2.17-317.el7 glibc-headers.x86_64 0:2.17-317.el7 kernel-headers.x86_64 0:3.10.0-1160.11.1.el7 完畢! [root@centos8 2017218049]# rpm -q gcc gcc-4.8.5-44.el7.x86_64 [root@centos8 2017218049]# pwd /home/thd2017218049/2017218049 [root@centos8 2017218049]# ls 2017218049.c [root@centos8 2017218049]# touch Makefile [root@centos8 2017218049]# vim Makefile [root@centos8 2017218049]# vim Makefile [root@centos8 2017218049]# make clean rm -rf hello *.elf *.gdb *.o [root@centos8 2017218049]# make make: *** 沒有規則能夠建立「hello」須要的目標「hello.o」。 中止。 [root@centos8 2017218049]# vim Makefile [root@centos8 2017218049]# make clean Makefile:1: *** 遺漏分隔符 。 中止。 [root@centos8 2017218049]# vim Makefile [root@centos8 2017218049]# make clean Makefile:1: *** 遺漏分隔符 。 中止。 [root@centos8 2017218049]# gcc -o 2017218049 2017218049.c 2017218049.c: 在函數‘main’中: 2017218049.c:14:5: 錯誤:只容許在 C99 模式下使用‘for’循環初始化聲明 for(int i = 0;i < 10;i++){ ^ 2017218049.c:14:5: 附註:使用 -std=c99 或 -std=gnu99 來編譯您的代碼 2017218049.c:19:9: 錯誤:‘i’重聲明爲沒有外部連接 int i; ^ 2017218049.c:14:13: 附註:‘i’的上一個定義在此 for(int i = 0;i < 10;i++){ ^ [root@centos8 2017218049]# vim 2017219049.c [root@centos8 2017218049]# ls 2017218049.c Makefile [root@centos8 2017218049]# vim 2017218049.c [root@centos8 2017218049]# vim 2017218049.c [root@centos8 2017218049]# gcc -o 2017218049 2017218049.c [root@centos8 2017218049]# ls 2017218049 2017218049.c Makefile [root@centos8 2017218049]# ./2017218049 3 4 5 2 6 8 78 34 12 9 2 3 4 5 6 8 9 12 34 78 [root@centos8 2017218049]# 複製代碼Makefile參考