Linux入門到精通---韓天峰視頻學習筆記

我的有道云筆記鏈接:http://note.youdao.com/noteshare?id=ecc484a907b1dd39e30af1273fddd719(原鏈接里面有相應的圖片 以下只是文字描述,具體詳情請看鏈接內容)

特點 : 免費的 開源的 支持多線程多用戶 安全性好 對內存和文件管理優(yōu)越

缺點:操作相對困難

linux 最小只需要4M -->嵌入式開發(fā)

1973 --->unix (中國移動的后臺操作系統(tǒng))

1991-1994---》linux? linux is not unix

root? 密碼:Ly959126

約瑟夫問題(丟手帕問題)

網(wǎng)絡設置文件位置

/etc/sysconfig/network-scripts/ifcfg-ens33

vi /etc/sysconfig/network-scripts/ifcfg-ens33

ens33是設備號 可以自行更改

onboot = yes 當機器啟動時網(wǎng)卡是否生效

BOOTPROTO = static 是網(wǎng)卡指定分配ip

BOOTPROTO = dhcp? 在網(wǎng)卡啟動的時候 有操作系統(tǒng)自動分配一個ip地址? 好處是:假設在同一個局域網(wǎng)的情況下,自動會看哪些ip地址沒有使用 會自動分配一個空閑的

如何更改文件ifcfg-ens33中 BOOTPROTO的屬性值?red hat里面

? 輸入命令:setup

退出后 需要輸入命令:/etc/rc.d/init.d/network restart? 使修改的生效

注意:當你更改了ifconfig-ens33文件的ip地址后,保存退出(這是永久性的修改),輸入命令:ifconfig? 顯示的ip地址還是沒有改變? 這是因為只要是涉及永久性修改一定要運行一下網(wǎng)卡 需要輸入命令:/etc/rc.d/init.d/network restart

網(wǎng)絡站點設置:

/etc/httpd/conf/http.conf

centos 7

查看防火墻服務狀態(tài)

systemctl status firewalld

查看firewall狀態(tài)

firewall-cmd --state

重啟防火墻

firecall-cmd --reload

關閉防火墻

systemctl disable firewalld

systemctl stop firewalld

查找某個文件的路徑

find / -name "Hello.java"

使用locate搜索linux系統(tǒng)中的文件,它比find命令快。因為它查詢的是數(shù)據(jù)庫(/var/lib/locatedb),數(shù)據(jù)庫包含本地所有的文件信息。使用locate命令在根目錄下搜索interfaces文件的命令為”locate interfaces“

使用”whereis“命令可以搜索linux系統(tǒng)中的所有可執(zhí)行文件即二進制文件。使用whereis命令搜索grep二進制文件的命令為”whereis grep“。

使用which命令查看系統(tǒng)命令是否存在,并返回系統(tǒng)命令所在的位置。使用which命令查看grep命令是否存在以及存在的目錄的命令為”which grep“。

刪除文件 rm

站點位置

/var/www/

apache 配置文件

/etc/httpd/conf/httpd.conf

查看本機局域網(wǎng)ip地址

cmd命令行: ipconfig /all? ? --->以太網(wǎng)的 IPv4地址

查看本地局域網(wǎng)中的所有與本機通信的計算機IP地址

cmd命令行:arp -a

c 程序例子:

#include <stdio.h>

int main(){

printf("hello!");

return 0;

}

c程序如何在linux虛擬機上編譯:gcc Hello.cpp

所在的目錄結構上會出現(xiàn) a.out

c程序如何在虛擬機上運行? 格式 : ./a.out

注意 當編譯c程序時 , 默認會生成a.out 所以 你再編譯第二個c程序的時候 第二個c程序就會將第一個c程序覆蓋掉

這個時候需要將編譯的c程序輸出時 特定一個名稱 防止被覆蓋掉

gcc -o my Hello2.cpp (-o o在這里指的是output? 輸出的是名字為my 的編譯文件)

gcc 是做什么用的:

GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發(fā)的編程語言編譯器。它是以GPL許可證所發(fā)行的自由軟件,也是 GNU計劃的關鍵部分。目前可以編譯的語言包括:C, C++,Objective-C, Fortran, Java, and Ada。

GCC原本作為GNU操作系統(tǒng)的官方編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、Mac OS X等)采納為標準的編譯器,GCC同樣適用于微軟的Windows。GCC是自由軟件過程發(fā)展中的著名例子,由自由軟件基金會以GPL協(xié)議發(fā)布。

GCC功能與作用:

1、預處理

命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。

2、編譯

用GCC編譯C/C++代碼時,它會試著用最少的時間完成編譯并且編譯后的代碼易于調試。易于調試意味著編譯后的代碼與源代碼有同樣的執(zhí)行順序,編譯后的代碼沒有經(jīng)過優(yōu)化。

3、連接

當所有的目標文件都生成之后,gcc就調用ld來完成最后的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執(zhí)行程序中的恰當?shù)奈恢茫瑫r,該程序所調用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。

4、匯編

匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為后綴的匯編語言源代碼文件和匯編、.s為后綴的匯編語言文件經(jīng)過預編譯和匯編之后都生成以.o為后綴的目標文件。

gcc所遵循的部分約定規(guī)則:

1、.c為后綴的文件,C語言源代碼文件。

2、.a為后綴的文件,是由目標文件構成的檔案庫文件。

3、.h為后綴的文件,是程序所包含的頭文件。

4、.i 為后綴的文件,是C源代碼文件且不應該對其執(zhí)行預處理。

5、.m為后綴的文件,是Objective-C源代碼文件。

6、.o為后綴的文件,是編譯后的目標文件。

7、.s為后綴的文件,是匯編語言源代碼文件。

目錄結構:

命令dir 顯示當前目錄下的文件結構

顯示當前在哪個目錄下 : pwd

linux 用戶管理

添加用戶必須是root權限下的用戶才能新建用戶

添加用戶:useradd 用戶名

設置密碼:passwd 用戶名

刪除用戶:userdel 用戶名

? ? userdel -r 用戶名 (刪除用戶以及用戶主目錄)

退出:logout

命令: init [0123456]

運行級別:

0:關機

1:單用戶

2:多用戶狀態(tài)沒有網(wǎng)絡服務

3:多用戶狀態(tài)有網(wǎng)絡服務

4:系統(tǒng)未使用保留給用戶

5:圖形界面

6:系統(tǒng)重啟

常用的運行級別是3和5 要修改默認的運行級別可改文件/etc/inittab

grep -n "hello" Hello.cpp? -n 返回指定數(shù)據(jù)所在文件位置的行號

manual 相當于手冊 ---》 man 命令相當于doc下的help? ? man grep

重定向命令

將結果保存到文件里:

> 文件名稱

>> 文件名稱 將結果追加到指定文件的末尾

例子:grep -n "hello" Hello.cpp > kkk.bak? ? 將> 前面的結果保存到kkk.bak里面

第一節(jié)習題:

c語言常識:

system是C函數(shù)庫stdlib.h、process.h中的一個函數(shù)。具體解釋如下:

int system(char *command):將MSDOS命令command傳遞給DOS執(zhí)行。

而pause是DOS下的一個命令。功能是:暫停批處理的執(zhí)行,顯示一個中文信息:“請按任意鍵繼續(xù). . .”,或者英文信息:“Press any key to continue . . .”

簡單的說:就是暫停程序的執(zhí)行,等待任意健繼續(xù)執(zhí)行。

#include <stdio.h>

#include <stdlib.h>

頭文件是擴展名為.h的文件 包含了C函數(shù)聲明和宏定義 被多個源文件中引用共享

有兩種類型的頭文件:程序員編寫的頭文件和編輯器自帶的頭文件

這兩個頭文件分別代表什么:

是標準輸入輸出頭文件。平時寫C語言時,用到的printf() 和scanf()都是系統(tǒng)定義好的,而這些函數(shù)的定義就包含在stdio.h這個文件中。它是標準的輸入輸出庫,包含了c語言的輸入輸出函數(shù)原型,要進行io操作必須包含此頭文件。

standard library 標準庫頭文件 stdlib.h里面定義了C C++語言的五種變量類型 一些宏 和 通用工具函數(shù)。類型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESSRAND_MAX和MB_CUR_MAX等等; 常用的函數(shù)如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。

文件權限 用戶組

添加組:groupadd 組名

查看linux中所有的組信息:cat /etc/group? ?

編輯linux中所有的組信息:vi /etc/group

vi /etc/group | more

創(chuàng)建用戶并同時指定將該用戶分配到哪個組

useradd -g 組名 用戶名

查看linux中所有的用戶信息

vi /etc/passwd? ? cat /etc/passwd

例子:

camellia 代表用戶

x 代表隱藏的密碼

1000 代表用戶id

1000 代表組id

兩個:之間的空白代表 沒有注釋

/home/camellia 代表該用戶的主目錄

/bin/bash 代表該用戶所使用的shell解析器

linux命令 (cp mkdir)

? ? ? ? ? |

? |

? \/

shell

? |

? |

? \/

linux 內核

-rw-r--r--? ? 劃分 -? ? ? rw-? ? ? ? r--? ? ? ? r--

-:代表文件類型

rw-:代表文件的所有者對該文件的權限

r--:代表文件所在組對該文件的權限

r--:代表其他組的用戶對該文件的權限

權限分為三種:r? 可讀 用4表示

? ? w 可寫 用2表示

? ? x? 可執(zhí)行 用1表示

說明akai文件夾的權限只有akai自己這個用戶有可讀可寫可執(zhí)行的權限 所在組的成員和其他組成員沒有任何權限

現(xiàn)在修改akai文件夾的權限 : chmod 777 akai

但是會報錯:因為目前登錄的用戶是ayong 所以沒有權限改變akai的文件權限

此時應該退出ayong用戶 登錄akai用戶

在 home文件夾下 修改akai文件夾的權限? chmod 777 akai

如何修改文件的訪問權限問題?

? ? ? ? 目前登錄ayong 這個用戶? 用 ls -l 查看到akai用戶下的文件情況 mytest1.java 的權限是 -rw-r--r--

所以用戶ayong 無法編輯mytest1.java 這個文件 所以需要退出ayong這個用戶 然后登錄akai這個用戶 更改這個mytest1.java的權限 : chmod 660 mytest1.java

添加用戶時可以指定將該用戶添加到哪個組中 同樣用root的管理權限可以改變某個用戶所在的組:

usermod -g 組名 用戶名

改變該用戶登錄的初始目錄:

usermod -d 目錄名 用戶名

改變文件所有者:

chown 用戶名 文件名

查看文件的所有者

ls -ahl

改變文件所在組:

chgrp 組名 文件名

練習中遇到的問題 為組添加用戶 時? 用戶名必須是一個字符串 不能是空格 比如 Tang Monk就不可以

發(fā)現(xiàn)一個問題 當沙僧轉變成monster(妖怪組)的時候 kong文件夾的權限是770 771 都是不行的 Kong文件夾權限為777的時候才能打開 kong文件夾? 但是 kong和Sha的屬組都是monster啊 這是什么原因呢?

在linux下開發(fā)java程序 需要安裝jdk

1.將mypackage.iso 掛載到linux操作系統(tǒng)上

2.。。。

查找以sh為結尾的文件? : ls -l /bin/*sh

查看目前使用的是哪種shell : env (該命令可以顯示當前操作系統(tǒng)的環(huán)境變量)

shell分類:csh /? ksh / sh

改變shell

chsh -s /bin/csh

當命令忘記時? 你可能只記住幾個字母

比如你忘記mkdir? 你只記住m開頭的? 此時需要打出m 快速敲擊兩次tab鍵 就能出來所有m開頭的命令

希望知道曾經(jīng)使用的命令 : history命令

顯示最近執(zhí)行的十個命令:history 10

執(zhí)行編號為861的命令 : !861

tcp/ip的由來:

計算機和計算機之間的交流是通過 通訊協(xié)議

最重要的不可或缺的通訊協(xié)議就是 tcp/ip協(xié)議

tcp/ip協(xié)議不是一個獨立協(xié)議 而是一組協(xié)議 它包括 tcp(傳輸協(xié)議) ip(ip協(xié)議) udp(用戶數(shù)據(jù)包協(xié)議) arp(地址解析協(xié)議) rarp(反地址解析協(xié)議)等。因為tcp 和 ip 協(xié)議最重要 也是 最早出現(xiàn)的 所以叫做tcp/ip協(xié)議。

tcp/ip 電子書籍:三本書籍 網(wǎng)絡安全相關(黑客)

斯蒂文斯:

以下的四層都是每一個計算機都有的:

應用層

傳輸層

ip層

鏈路層(靠近網(wǎng)卡)

linux網(wǎng)絡環(huán)境配置:

我自己虛擬主機的命令是:ifconfig ens33 192.168.88.22

兩個網(wǎng)絡能夠拼通 兩個網(wǎng)絡一定需要在同一個子網(wǎng)里面

linux中網(wǎng)卡分配的ip是:192.168.1.105

讓window能夠拼通linux的ip地址:

在cmd里面 ipconfig

會發(fā)現(xiàn):VMnet1 和 VMnet8這兩個網(wǎng)卡的ip地址是:192.168.169.1? 192.168.128.1

這兩個ip地址和linux 網(wǎng)卡指定的ip地址 不在同一個子網(wǎng)中 所以window與linux不能互通

現(xiàn)在我想將VMnet8這個網(wǎng)卡和linux達到互通的目的:

需要進行虛擬機設置 :將網(wǎng)絡適配器 (以太網(wǎng))設置成自定義模式 選擇VMnet8網(wǎng)卡

需要將linux網(wǎng)卡指定的ip地址更改 使其ip地址和windows的 VMnet8這個網(wǎng)卡的ip同處于一個子網(wǎng)中。

在虛擬機上輸入命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改IPADDR 為192.168.128.(2-255) 保存退出 此時windows和linux的ip同屬于一個子網(wǎng)中。

此時:

實現(xiàn)了windows和linux的互通

如何查詢linux中安裝了哪些rpm軟件

rpm -qa (quiry all)

rpm -q mysql 查詢是否安裝了mysql包

samba就是能夠使liux和windows實現(xiàn)資源互享的服務器

在linux安裝samba

1.查看是否裝了samba rpm -q samba

2.如有 就卸載? rpm -e samba

看是否還有未刪除掉的samba相關的包

rpm -q sam*

3.把自己的安裝文件 掛載到Linux下

d.把samba開頭的文件拷貝到/home下 準備安裝

cp /mnt/cdrom/Packages/samba* /home

service smb stop

service smb restart

虛擬機網(wǎng)絡適配器的三種情況分別是?:

具體講解請看:http://m.itdecent.cn/p/bb02b16d99ec

安裝虛擬機出現(xiàn)以下提示:

mount:block device /dev/sr0 is write - protected , mounting read-only

說明系統(tǒng)光驅加載成功,因為光驅是只讀的,所以提示write-protected,mounting read-only,sr0是光驅設備名,

通過以下命令:

ll /dev/cdcom

可以看到

lrwxrwxrwx. 1 root root 3 Dec 25? 2013 /dev/cdrom -> sr0

即/dev/cdcom是sr0的軟鏈接

/dev/sr0 與 /dev/cdrom 的 關系:

/dev/sr0是光驅的設備名,/dev/cdrom代表光驅

cdrom是sr0的軟鏈接.你ll /dev/cdrom和ll /dev/sr0看看顯示

用df命令查看磁盤驅動器當前的可用空間,用free顯示當前可用內存

”添加的Samba用戶首先必須是Linux用戶”

smbpasswd命令的常用方法

smbpasswd -a 增加用戶(要增加的用戶必須以是系統(tǒng)用戶)

smbpasswd -d 凍結用戶,就是這個用戶不能在登錄了

smbpasswd -e 恢復用戶,解凍用戶,讓凍結的用戶可以在使用

smbpasswd -n 把用戶的密碼設置成空.

???????????? 要在global中寫入 null passwords -true

smbpasswd -x? 刪除用戶

查看linux用戶:cat /etc/passwd

查看samba用戶:cat /etc/samba/smbpasswd

實現(xiàn)虛擬機和主機共享文件:

1.首先需要虛擬機能夠ping通主機ip

虛擬機設置里面 需要將網(wǎng)絡適配器的選擇到自定義VMnet8

需要將虛擬機的網(wǎng)絡配置文件進行修改 將配置文件的IPADDR NETWORK GATEWAY 的網(wǎng)段在和主機的VMnet8的網(wǎng)段保持一致

主機VMnet8的ip怎么知道 ?cmd 中 ipconfig /all這個命令

需要將虛擬機的網(wǎng)絡配置文件進行修改:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

同時,需要將虛擬網(wǎng)絡編輯器進行修改

在DHCP設置中

在NAT設置中

所以網(wǎng)絡配置文件中的IPADDR的地址最后一段的區(qū)間在128-254之間

網(wǎng)絡配置文件修改好后 重啟:service network restart

然后,需要將虛擬機的設置中的選項里面選擇共享文件開啟狀態(tài)

任務調度命令:

crontab? ? /etc/crontab

1.設置任務:crontab -e

2.每隔一定時間去執(zhí)行

date顯示當前系統(tǒng)時間 date > /home/mydatel?

每天凌晨兩點執(zhí)行:

先設置任務:crontab -e? 在里面加入:

0 2 * * * date >> /home/mydate2

每分鐘執(zhí)行:

* * * * * date >> /home/mydate3

怎樣去調度多個任務

1.在crontab -e 中直接寫

2.把所有任務寫入到一個可執(zhí)行文件(shell編程)(推薦)

shell文件 是以.sh結尾

如何終止任務

crontab -r 終止任務調度

crontab -l 任務調度列表

進程:進程就是正在執(zhí)行的程序

線程:1.輕量級的程序

? ? 2.進程有獨立的地址空間 線程沒有

? ? 3.線程不能獨立存在 它是由進程創(chuàng)建的

? ? 4.相對來講,線程所占的cpu和內存小于進程所占的cpu和內存

在linux中 每一個執(zhí)行的程序都成為一個進程 每一個進程都會分配一個id號

每一個進程都會對應一個父進程 而這個父進程可以復制多個子進程

每一個進程都可能以兩種方式存在 前臺與后臺 所謂前臺進程就是用戶目前屏幕上可以進行操作的 后臺進程就是實際在操作的

ps 命令查看系統(tǒng)中正在執(zhí)行的進程:

ps -a 顯示當前終端所有的進程信息

ps -u 以用戶的格式顯示進程信息

ps -x 顯示后臺進程運行的參數(shù)

ps -aux

終止進程 kill 進程號

bash 是當前進程 是終止不了的

強制終止 kill -9 進程號

top 查看執(zhí)行進程

查看指定用戶的進程 :u 輸入“u”+回車 再輸入用戶名即可

終止指定的進程 :“k”+回車 再輸入要結束的id號

指定系統(tǒng)狀態(tài)更新時間:top -d 10 :指定系統(tǒng)更新進程的時間為10秒

查看系統(tǒng)時間:date

查看指定月份月歷:cal 3 2002? 查看2002年的3月份的月歷

例子:將某一年的月歷寫入到指定文件中 cal 2021 > test

vi test? 就能看見2021年的月歷了

監(jiān)控網(wǎng)絡狀態(tài)信息

netstat 顯示網(wǎng)絡統(tǒng)計信息? (目前的鏈接 數(shù)據(jù)包傳遞數(shù)據(jù) 路由表內容)

按端口號排序 查看網(wǎng)絡統(tǒng)計信息:netstat -an

traceroute 追蹤路由? 用于顯示數(shù)據(jù)包到主機間的路徑

路由表:route 命令

mysql安裝配置使用

查看進程 netstat -anp | more

查看環(huán)境:env | more

在root 目錄下: 查看 ls -al? |? more? ? .bash_profile 是用戶變量

可以在.bash_profile文件中添加一個路徑

看表的結構:desc 表名

showUsers.java

將mysql驅動放在jdk下的jre/lib/ext下

mysql -u root -p

備份和恢復mysql數(shù)據(jù)庫:

執(zhí)行備份和恢復的命令位置是:mysql 下的bin目錄

備份:mysqldump -u root -p密碼 數(shù)據(jù)庫名>data.bak?

恢復:mysql -u root -p密碼 數(shù)據(jù)庫名<data.bak

每天凌晨兩點將數(shù)據(jù)備份到/home/spdb1.bak

1. vi my.sh

/home/mysql/bin/mysqldump -u root -p spdb1 > /home/spdb1.bak

2. chmod 744 my.sh

3. ls -l

4. crontab -e

? ? 0 2 * * * /root/my.sh

但是考慮到備份的數(shù)據(jù)被覆蓋:----》 保存的文件名稱不是一樣的 就能解決這個問題 ---》shell

cp -rf 文件夾名稱 要復制的位置

linux 配置系統(tǒng)環(huán)境變量 配置用戶環(huán)境變量

更改配置:使得tomcat 用戶root只要一登錄就啟動tomcat

vi /root/.bashrc

加入最后一行:

說明剛才的設置生效了

添加一個臨時生效的路徑:使? my.sh 可以在任何文件位置都能執(zhí)行

export PATH=$PATH:/root

取別名 alias abc='ls -l /home'? 之后命令 abc 就能相應執(zhí)行命令

壓縮文件:

一次性壓縮多個文件:

zip 壓縮后文件名.zip 文件1 文件2...

將該目錄下的所有文件壓縮:zip -r 壓縮后的文件名.zip ./workspace/

遠程連接虛擬機數(shù)據(jù)庫

cmd上:連接虛擬機的mysql數(shù)據(jù)庫

針對mysql 啟動失敗 ---? Can’t connect to local MySQL server through socket

問題關鍵在于:/etc/my.cnf

修改完成后 ?。?!一定要啟動一下mysqld 才能生效 systemctl start mysqld

本機訪問虛擬機的數(shù)據(jù)庫 !---會了

NAT模式下:具體配置時,IP設置與vmnet8同網(wǎng)段,網(wǎng)關設置成vmnet8的網(wǎng)關(在“虛擬網(wǎng)絡設置”里的Net選項卡里能找到Gateway)通常是xxx.xxx.xxx.2。一般虛擬機的網(wǎng)關都是 xxx.xxx.xxx.2? 之前你設置成192.168.128.1? 就經(jīng)常ping不動

NAT模式下 的“虛擬網(wǎng)絡編輯器”---》NAT設置---》

然后修改 vi /etc/sysconfig/network-scripts/ifcfg-ens33

保存退出 然后 service network restart

特點 : 免費的 開源的 支持多線程多用戶 安全性好 對內存和文件管理優(yōu)越

缺點:操作相對困難

linux 最小只需要4M -->嵌入式開發(fā)

1973 --->unix (中國移動的后臺操作系統(tǒng))

1991-1994---》linux? linux is not unix


約瑟夫問題(丟手帕問題)

網(wǎng)絡設置文件位置

/etc/sysconfig/network-scripts/ifcfg-ens33

vi /etc/sysconfig/network-scripts/ifcfg-ens33

ens33是設備號 可以自行更改

onboot = yes 當機器啟動時網(wǎng)卡是否生效

BOOTPROTO = static 是網(wǎng)卡指定分配ip

BOOTPROTO = dhcp? 在網(wǎng)卡啟動的時候 有操作系統(tǒng)自動分配一個ip地址? 好處是:假設在同一個局域網(wǎng)的情況下,自動會看哪些ip地址沒有使用 會自動分配一個空閑的

如何更改文件ifcfg-ens33中 BOOTPROTO的屬性值?red hat里面

? 輸入命令:setup

退出后 需要輸入命令:/etc/rc.d/init.d/network restart? 使修改的生效

注意:當你更改了ifconfig-ens33文件的ip地址后,保存退出(這是永久性的修改),輸入命令:ifconfig? 顯示的ip地址還是沒有改變? 這是因為只要是涉及永久性修改一定要運行一下網(wǎng)卡 需要輸入命令:/etc/rc.d/init.d/network restart

網(wǎng)絡站點設置:

/etc/httpd/conf/http.conf

centos 7

查看防火墻服務狀態(tài)

systemctl status firewalld

查看firewall狀態(tài)

firewall-cmd --state

重啟防火墻

firecall-cmd --reload

關閉防火墻

systemctl disable firewalld

systemctl stop firewalld

查找某個文件的路徑

find / -name "Hello.java"

使用locate搜索linux系統(tǒng)中的文件,它比find命令快。因為它查詢的是數(shù)據(jù)庫(/var/lib/locatedb),數(shù)據(jù)庫包含本地所有的文件信息。使用locate命令在根目錄下搜索interfaces文件的命令為”locate interfaces“

使用”whereis“命令可以搜索linux系統(tǒng)中的所有可執(zhí)行文件即二進制文件。使用whereis命令搜索grep二進制文件的命令為”whereis grep“。

使用which命令查看系統(tǒng)命令是否存在,并返回系統(tǒng)命令所在的位置。使用which命令查看grep命令是否存在以及存在的目錄的命令為”which grep“。

刪除文件 rm

站點位置

/var/www/

apache 配置文件

/etc/httpd/conf/httpd.conf

查看本機局域網(wǎng)ip地址

cmd命令行: ipconfig /all? ? --->以太網(wǎng)的 IPv4地址

查看本地局域網(wǎng)中的所有與本機通信的計算機IP地址

cmd命令行:arp -a

c 程序例子:

#include <stdio.h>

int main(){

printf("hello!");

return 0;

}

c程序如何在linux虛擬機上編譯:gcc Hello.cpp

所在的目錄結構上會出現(xiàn) a.out

c程序如何在虛擬機上運行? 格式 : ./a.out

注意 當編譯c程序時 , 默認會生成a.out 所以 你再編譯第二個c程序的時候 第二個c程序就會將第一個c程序覆蓋掉

這個時候需要將編譯的c程序輸出時 特定一個名稱 防止被覆蓋掉

gcc -o my Hello2.cpp (-o o在這里指的是output? 輸出的是名字為my 的編譯文件)

gcc 是做什么用的:

GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發(fā)的編程語言編譯器。它是以GPL許可證所發(fā)行的自由軟件,也是 GNU計劃的關鍵部分。目前可以編譯的語言包括:C, C++,Objective-C, Fortran, Java, and Ada。

GCC原本作為GNU操作系統(tǒng)的官方編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、Mac OS X等)采納為標準的編譯器,GCC同樣適用于微軟的Windows。GCC是自由軟件過程發(fā)展中的著名例子,由自由軟件基金會以GPL協(xié)議發(fā)布。

GCC功能與作用:

1、預處理

命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。

2、編譯

用GCC編譯C/C++代碼時,它會試著用最少的時間完成編譯并且編譯后的代碼易于調試。易于調試意味著編譯后的代碼與源代碼有同樣的執(zhí)行順序,編譯后的代碼沒有經(jīng)過優(yōu)化。

3、連接

當所有的目標文件都生成之后,gcc就調用ld來完成最后的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執(zhí)行程序中的恰當?shù)奈恢?,同時,該程序所調用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。

4、匯編

匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為后綴的匯編語言源代碼文件和匯編、.s為后綴的匯編語言文件經(jīng)過預編譯和匯編之后都生成以.o為后綴的目標文件。

gcc所遵循的部分約定規(guī)則:

1、.c為后綴的文件,C語言源代碼文件。

2、.a為后綴的文件,是由目標文件構成的檔案庫文件。

3、.h為后綴的文件,是程序所包含的頭文件。

4、.i 為后綴的文件,是C源代碼文件且不應該對其執(zhí)行預處理。

5、.m為后綴的文件,是Objective-C源代碼文件。

6、.o為后綴的文件,是編譯后的目標文件。

7、.s為后綴的文件,是匯編語言源代碼文件。

目錄結構:

命令dir 顯示當前目錄下的文件結構

顯示當前在哪個目錄下 : pwd

linux 用戶管理

添加用戶必須是root權限下的用戶才能新建用戶

添加用戶:useradd 用戶名

設置密碼:passwd 用戶名

刪除用戶:userdel 用戶名

? ? userdel -r 用戶名 (刪除用戶以及用戶主目錄)

退出:logout

命令: init [0123456]

運行級別:

0:關機

1:單用戶

2:多用戶狀態(tài)沒有網(wǎng)絡服務

3:多用戶狀態(tài)有網(wǎng)絡服務

4:系統(tǒng)未使用保留給用戶

5:圖形界面

6:系統(tǒng)重啟

常用的運行級別是3和5 要修改默認的運行級別可改文件/etc/inittab

grep -n "hello" Hello.cpp? -n 返回指定數(shù)據(jù)所在文件位置的行號

manual 相當于手冊 ---》 man 命令相當于doc下的help? ? man grep

重定向命令

將結果保存到文件里:

> 文件名稱

>> 文件名稱 將結果追加到指定文件的末尾

例子:grep -n "hello" Hello.cpp > kkk.bak? ? 將> 前面的結果保存到kkk.bak里面

第一節(jié)習題:

c語言常識:

system是C函數(shù)庫stdlib.h、process.h中的一個函數(shù)。具體解釋如下:

int system(char *command):將MSDOS命令command傳遞給DOS執(zhí)行。

而pause是DOS下的一個命令。功能是:暫停批處理的執(zhí)行,顯示一個中文信息:“請按任意鍵繼續(xù). . .”,或者英文信息:“Press any key to continue . . .”

簡單的說:就是暫停程序的執(zhí)行,等待任意健繼續(xù)執(zhí)行。

#include <stdio.h>

#include <stdlib.h>

頭文件是擴展名為.h的文件 包含了C函數(shù)聲明和宏定義 被多個源文件中引用共享

有兩種類型的頭文件:程序員編寫的頭文件和編輯器自帶的頭文件

這兩個頭文件分別代表什么:

是標準輸入輸出頭文件。平時寫C語言時,用到的printf() 和scanf()都是系統(tǒng)定義好的,而這些函數(shù)的定義就包含在stdio.h這個文件中。它是標準的輸入輸出庫,包含了c語言的輸入輸出函數(shù)原型,要進行io操作必須包含此頭文件。

standard library 標準庫頭文件 stdlib.h里面定義了C C++語言的五種變量類型 一些宏 和 通用工具函數(shù)。類型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函數(shù)如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。

文件權限 用戶組

添加組:groupadd 組名

查看linux中所有的組信息:cat /etc/group? ?

編輯linux中所有的組信息:vi /etc/group

vi /etc/group | more

創(chuàng)建用戶并同時指定將該用戶分配到哪個組

useradd -g 組名 用戶名

查看linux中所有的用戶信息

vi /etc/passwd? ? cat /etc/passwd

例子:

camellia 代表用戶

x 代表隱藏的密碼

1000 代表用戶id

1000 代表組id

兩個:之間的空白代表 沒有注釋

/home/camellia 代表該用戶的主目錄

/bin/bash 代表該用戶所使用的shell解析器

linux命令 (cp mkdir)

? ? ? ? ? |

? |

? \/

shell

? |

? |

? \/

linux 內核

-rw-r--r--? ? 劃分 -? ? ? rw-? ? ? ? r--? ? ? ? r--

-:代表文件類型

rw-:代表文件的所有者對該文件的權限

r--:代表文件所在組對該文件的權限

r--:代表其他組的用戶對該文件的權限

權限分為三種:r? 可讀 用4表示

? ? w 可寫 用2表示

? ? x? 可執(zhí)行 用1表示

說明akai文件夾的權限只有akai自己這個用戶有可讀可寫可執(zhí)行的權限 所在組的成員和其他組成員沒有任何權限

現(xiàn)在修改akai文件夾的權限 : chmod 777 akai

但是會報錯:因為目前登錄的用戶是ayong 所以沒有權限改變akai的文件權限

此時應該退出ayong用戶 登錄akai用戶

在 home文件夾下 修改akai文件夾的權限? chmod 777 akai

如何修改文件的訪問權限問題?

? ? ? ? 目前登錄ayong 這個用戶? 用 ls -l 查看到akai用戶下的文件情況 mytest1.java 的權限是 -rw-r--r--

所以用戶ayong 無法編輯mytest1.java 這個文件 所以需要退出ayong這個用戶 然后登錄akai這個用戶 更改這個mytest1.java的權限 : chmod 660 mytest1.java

添加用戶時可以指定將該用戶添加到哪個組中 同樣用root的管理權限可以改變某個用戶所在的組:

usermod -g 組名 用戶名

改變該用戶登錄的初始目錄:

usermod -d 目錄名 用戶名

改變文件所有者:

chown 用戶名 文件名

查看文件的所有者

ls -ahl

改變文件所在組:

chgrp 組名 文件名

練習中遇到的問題 為組添加用戶 時? 用戶名必須是一個字符串 不能是空格 比如 Tang Monk就不可以

發(fā)現(xiàn)一個問題 當沙僧轉變成monster(妖怪組)的時候 kong文件夾的權限是770 771 都是不行的 Kong文件夾權限為777的時候才能打開 kong文件夾? 但是 kong和Sha的屬組都是monster啊 這是什么原因呢?

在linux下開發(fā)java程序 需要安裝jdk

1.將mypackage.iso 掛載到linux操作系統(tǒng)上

2.。。。

查找以sh為結尾的文件? : ls -l /bin/*sh

查看目前使用的是哪種shell : env (該命令可以顯示當前操作系統(tǒng)的環(huán)境變量)

shell分類:csh /? ksh / sh

改變shell

chsh -s /bin/csh

當命令忘記時? 你可能只記住幾個字母

比如你忘記mkdir? 你只記住m開頭的? 此時需要打出m 快速敲擊兩次tab鍵 就能出來所有m開頭的命令

希望知道曾經(jīng)使用的命令 : history命令

顯示最近執(zhí)行的十個命令:history 10

執(zhí)行編號為861的命令 : !861

tcp/ip的由來:

計算機和計算機之間的交流是通過 通訊協(xié)議

最重要的不可或缺的通訊協(xié)議就是 tcp/ip協(xié)議

tcp/ip協(xié)議不是一個獨立協(xié)議 而是一組協(xié)議 它包括 tcp(傳輸協(xié)議) ip(ip協(xié)議) udp(用戶數(shù)據(jù)包協(xié)議) arp(地址解析協(xié)議) rarp(反地址解析協(xié)議)等。因為tcp 和 ip 協(xié)議最重要 也是 最早出現(xiàn)的 所以叫做tcp/ip協(xié)議。

tcp/ip 電子書籍:三本書籍 網(wǎng)絡安全相關(黑客)

斯蒂文斯:

以下的四層都是每一個計算機都有的:

應用層

傳輸層

ip層

鏈路層(靠近網(wǎng)卡)

linux網(wǎng)絡環(huán)境配置:

我自己虛擬主機的命令是:ifconfig ens33 192.168.88.22

兩個網(wǎng)絡能夠拼通 兩個網(wǎng)絡一定需要在同一個子網(wǎng)里面

linux中網(wǎng)卡分配的ip是:192.168.1.105

讓window能夠拼通linux的ip地址:

在cmd里面 ipconfig

會發(fā)現(xiàn):VMnet1 和 VMnet8這兩個網(wǎng)卡的ip地址是:192.168.169.1? 192.168.128.1

這兩個ip地址和linux 網(wǎng)卡指定的ip地址 不在同一個子網(wǎng)中 所以window與linux不能互通

現(xiàn)在我想將VMnet8這個網(wǎng)卡和linux達到互通的目的:

需要進行虛擬機設置 :將網(wǎng)絡適配器 (以太網(wǎng))設置成自定義模式 選擇VMnet8網(wǎng)卡

需要將linux網(wǎng)卡指定的ip地址更改 使其ip地址和windows的 VMnet8這個網(wǎng)卡的ip同處于一個子網(wǎng)中。

在虛擬機上輸入命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改IPADDR 為192.168.128.(2-255) 保存退出 此時windows和linux的ip同屬于一個子網(wǎng)中。

此時:

實現(xiàn)了windows和linux的互通

如何查詢linux中安裝了哪些rpm軟件

rpm -qa (quiry all)

rpm -q mysql 查詢是否安裝了mysql包

samba就是能夠使liux和windows實現(xiàn)資源互享的服務器

在linux安裝samba

1.查看是否裝了samba rpm -q samba

2.如有 就卸載? rpm -e samba

看是否還有未刪除掉的samba相關的包

rpm -q sam*

3.把自己的安裝文件 掛載到Linux下

d.把samba開頭的文件拷貝到/home下 準備安裝

cp /mnt/cdrom/Packages/samba* /home

service smb stop

service smb restart

虛擬機網(wǎng)絡適配器的三種情況分別是?:

具體講解請看:http://m.itdecent.cn/p/bb02b16d99ec

安裝虛擬機出現(xiàn)以下提示:

mount:block device /dev/sr0 is write - protected , mounting read-only

說明系統(tǒng)光驅加載成功,因為光驅是只讀的,所以提示write-protected,mounting read-only,sr0是光驅設備名,

通過以下命令:

ll /dev/cdcom

可以看到

lrwxrwxrwx. 1 root root 3 Dec 25? 2013 /dev/cdrom -> sr0

即/dev/cdcom是sr0的軟鏈接

/dev/sr0 與 /dev/cdrom 的 關系:

/dev/sr0是光驅的設備名,/dev/cdrom代表光驅

cdrom是sr0的軟鏈接.你ll /dev/cdrom和ll /dev/sr0看看顯示

用df命令查看磁盤驅動器當前的可用空間,用free顯示當前可用內存

”添加的Samba用戶首先必須是Linux用戶”

smbpasswd命令的常用方法

smbpasswd -a 增加用戶(要增加的用戶必須以是系統(tǒng)用戶)

smbpasswd -d 凍結用戶,就是這個用戶不能在登錄了

smbpasswd -e 恢復用戶,解凍用戶,讓凍結的用戶可以在使用

smbpasswd -n 把用戶的密碼設置成空.

???????????? 要在global中寫入 null passwords -true

smbpasswd -x? 刪除用戶

查看linux用戶:cat /etc/passwd

查看samba用戶:cat /etc/samba/smbpasswd

實現(xiàn)虛擬機和主機共享文件:

1.首先需要虛擬機能夠ping通主機ip

虛擬機設置里面 需要將網(wǎng)絡適配器的選擇到自定義VMnet8

需要將虛擬機的網(wǎng)絡配置文件進行修改 將配置文件的IPADDR NETWORK GATEWAY 的網(wǎng)段在和主機的VMnet8的網(wǎng)段保持一致

主機VMnet8的ip怎么知道 ?cmd 中 ipconfig /all這個命令

需要將虛擬機的網(wǎng)絡配置文件進行修改:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

同時,需要將虛擬網(wǎng)絡編輯器進行修改

在DHCP設置中

在NAT設置中

所以網(wǎng)絡配置文件中的IPADDR的地址最后一段的區(qū)間在128-254之間

網(wǎng)絡配置文件修改好后 重啟:service network restart

然后,需要將虛擬機的設置中的選項里面選擇共享文件開啟狀態(tài)

任務調度命令:

crontab? ? /etc/crontab

1.設置任務:crontab -e

2.每隔一定時間去執(zhí)行

date顯示當前系統(tǒng)時間 date > /home/mydatel?

每天凌晨兩點執(zhí)行:

先設置任務:crontab -e? 在里面加入:

0 2 * * * date >> /home/mydate2

每分鐘執(zhí)行:

* * * * * date >> /home/mydate3

怎樣去調度多個任務

1.在crontab -e 中直接寫

2.把所有任務寫入到一個可執(zhí)行文件(shell編程)(推薦)

shell文件 是以.sh結尾

如何終止任務

crontab -r 終止任務調度

crontab -l 任務調度列表

進程:進程就是正在執(zhí)行的程序

線程:1.輕量級的程序

? ? 2.進程有獨立的地址空間 線程沒有

? ? 3.線程不能獨立存在 它是由進程創(chuàng)建的

? ? 4.相對來講,線程所占的cpu和內存小于進程所占的cpu和內存

在linux中 每一個執(zhí)行的程序都成為一個進程 每一個進程都會分配一個id號

每一個進程都會對應一個父進程 而這個父進程可以復制多個子進程

每一個進程都可能以兩種方式存在 前臺與后臺 所謂前臺進程就是用戶目前屏幕上可以進行操作的 后臺進程就是實際在操作的

ps 命令查看系統(tǒng)中正在執(zhí)行的進程:

ps -a 顯示當前終端所有的進程信息

ps -u 以用戶的格式顯示進程信息

ps -x 顯示后臺進程運行的參數(shù)

ps -aux

終止進程 kill 進程號

bash 是當前進程 是終止不了的

強制終止 kill -9 進程號

top 查看執(zhí)行進程

查看指定用戶的進程 :u 輸入“u”+回車 再輸入用戶名即可

終止指定的進程 :“k”+回車 再輸入要結束的id號

指定系統(tǒng)狀態(tài)更新時間:top -d 10 :指定系統(tǒng)更新進程的時間為10秒

查看系統(tǒng)時間:date

查看指定月份月歷:cal 3 2002? 查看2002年的3月份的月歷

例子:將某一年的月歷寫入到指定文件中 cal 2021 > test

vi test? 就能看見2021年的月歷了

監(jiān)控網(wǎng)絡狀態(tài)信息

netstat 顯示網(wǎng)絡統(tǒng)計信息? (目前的鏈接 數(shù)據(jù)包傳遞數(shù)據(jù) 路由表內容)

按端口號排序 查看網(wǎng)絡統(tǒng)計信息:netstat -an

traceroute 追蹤路由? 用于顯示數(shù)據(jù)包到主機間的路徑

路由表:route 命令

mysql安裝配置使用

查看進程 netstat -anp | more

查看環(huán)境:env | more

在root 目錄下: 查看 ls -al? |? more? ? .bash_profile 是用戶變量

可以在.bash_profile文件中添加一個路徑

看表的結構:desc 表名

showUsers.java

將mysql驅動放在jdk下的jre/lib/ext下

mysql -u root -p

備份和恢復mysql數(shù)據(jù)庫:

執(zhí)行備份和恢復的命令位置是:mysql 下的bin目錄

備份:mysqldump -u root -p密碼 數(shù)據(jù)庫名>data.bak?

恢復:mysql -u root -p密碼 數(shù)據(jù)庫名<data.bak

每天凌晨兩點將數(shù)據(jù)備份到/home/spdb1.bak

1. vi my.sh

/home/mysql/bin/mysqldump -u root -p spdb1 > /home/spdb1.bak

2. chmod 744 my.sh

3. ls -l

4. crontab -e

? ? 0 2 * * * /root/my.sh

但是考慮到備份的數(shù)據(jù)被覆蓋:----》 保存的文件名稱不是一樣的 就能解決這個問題 ---》shell

cp -rf 文件夾名稱 要復制的位置

linux 配置系統(tǒng)環(huán)境變量 配置用戶環(huán)境變量

更改配置:使得tomcat 用戶root只要一登錄就啟動tomcat

vi /root/.bashrc

加入最后一行:

說明剛才的設置生效了

添加一個臨時生效的路徑:使? my.sh 可以在任何文件位置都能執(zhí)行

export PATH=$PATH:/root

取別名 alias abc='ls -l /home'? 之后命令 abc 就能相應執(zhí)行命令

壓縮文件:

一次性壓縮多個文件:

zip 壓縮后文件名.zip 文件1 文件2...

將該目錄下的所有文件壓縮:zip -r 壓縮后的文件名.zip ./workspace/

遠程連接虛擬機數(shù)據(jù)庫

cmd上:連接虛擬機的mysql數(shù)據(jù)庫

針對mysql 啟動失敗 ---? Can’t connect to local MySQL server through socket

問題關鍵在于:/etc/my.cnf

修改完成后 ?。?!一定要啟動一下mysqld 才能生效 systemctl start mysqld

本機訪問虛擬機的數(shù)據(jù)庫 !---會了

NAT模式下:具體配置時,IP設置與vmnet8同網(wǎng)段,網(wǎng)關設置成vmnet8的網(wǎng)關(在“虛擬網(wǎng)絡設置”里的Net選項卡里能找到Gateway)通常是xxx.xxx.xxx.2。一般虛擬機的網(wǎng)關都是 xxx.xxx.xxx.2? 之前你設置成192.168.128.1? 就經(jīng)常ping不動

NAT模式下 的“虛擬網(wǎng)絡編輯器”---》NAT設置---》

然后修改 vi /etc/sysconfig/network-scripts/ifcfg-ens33

保存退出 然后 service network restartlinux從入門到精通

特點 : 免費的 開源的 支持多線程多用戶 安全性好 對內存和文件管理優(yōu)越

缺點:操作相對困難

linux 最小只需要4M -->嵌入式開發(fā)

1973 --->unix (中國移動的后臺操作系統(tǒng))

1991-1994---》linux? linux is not unix

root? 密碼:Ly959126

約瑟夫問題(丟手帕問題)

網(wǎng)絡設置文件位置

/etc/sysconfig/network-scripts/ifcfg-ens33

vi /etc/sysconfig/network-scripts/ifcfg-ens33

ens33是設備號 可以自行更改

onboot = yes 當機器啟動時網(wǎng)卡是否生效

BOOTPROTO = static 是網(wǎng)卡指定分配ip

BOOTPROTO = dhcp? 在網(wǎng)卡啟動的時候 有操作系統(tǒng)自動分配一個ip地址? 好處是:假設在同一個局域網(wǎng)的情況下,自動會看哪些ip地址沒有使用 會自動分配一個空閑的

如何更改文件ifcfg-ens33中 BOOTPROTO的屬性值?red hat里面

? 輸入命令:setup

退出后 需要輸入命令:/etc/rc.d/init.d/network restart? 使修改的生效

注意:當你更改了ifconfig-ens33文件的ip地址后,保存退出(這是永久性的修改),輸入命令:ifconfig? 顯示的ip地址還是沒有改變? 這是因為只要是涉及永久性修改一定要運行一下網(wǎng)卡 需要輸入命令:/etc/rc.d/init.d/network restart

網(wǎng)絡站點設置:

/etc/httpd/conf/http.conf

centos 7

查看防火墻服務狀態(tài)

systemctl status firewalld

查看firewall狀態(tài)

firewall-cmd --state

重啟防火墻

firecall-cmd --reload

關閉防火墻

systemctl disable firewalld

systemctl stop firewalld

查找某個文件的路徑

find / -name "Hello.java"

使用locate搜索linux系統(tǒng)中的文件,它比find命令快。因為它查詢的是數(shù)據(jù)庫(/var/lib/locatedb),數(shù)據(jù)庫包含本地所有的文件信息。使用locate命令在根目錄下搜索interfaces文件的命令為”locate interfaces“

使用”whereis“命令可以搜索linux系統(tǒng)中的所有可執(zhí)行文件即二進制文件。使用whereis命令搜索grep二進制文件的命令為”whereis grep“。

使用which命令查看系統(tǒng)命令是否存在,并返回系統(tǒng)命令所在的位置。使用which命令查看grep命令是否存在以及存在的目錄的命令為”which grep“。

刪除文件 rm

站點位置

/var/www/

apache 配置文件

/etc/httpd/conf/httpd.conf

查看本機局域網(wǎng)ip地址

cmd命令行: ipconfig /all? ? --->以太網(wǎng)的 IPv4地址

查看本地局域網(wǎng)中的所有與本機通信的計算機IP地址

cmd命令行:arp -a

c 程序例子:

#include <stdio.h>

int main(){

printf("hello!");

return 0;

}

c程序如何在linux虛擬機上編譯:gcc Hello.cpp

所在的目錄結構上會出現(xiàn) a.out

c程序如何在虛擬機上運行? 格式 : ./a.out

注意 當編譯c程序時 , 默認會生成a.out 所以 你再編譯第二個c程序的時候 第二個c程序就會將第一個c程序覆蓋掉

這個時候需要將編譯的c程序輸出時 特定一個名稱 防止被覆蓋掉

gcc -o my Hello2.cpp (-o o在這里指的是output? 輸出的是名字為my 的編譯文件)

gcc 是做什么用的:

GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發(fā)的編程語言編譯器。它是以GPL許可證所發(fā)行的自由軟件,也是 GNU計劃的關鍵部分。目前可以編譯的語言包括:C, C++,Objective-C, Fortran, Java, and Ada。

GCC原本作為GNU操作系統(tǒng)的官方編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、Mac OS X等)采納為標準的編譯器,GCC同樣適用于微軟的Windows。GCC是自由軟件過程發(fā)展中的著名例子,由自由軟件基金會以GPL協(xié)議發(fā)布。

GCC功能與作用:

1、預處理

命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。

2、編譯

用GCC編譯C/C++代碼時,它會試著用最少的時間完成編譯并且編譯后的代碼易于調試。易于調試意味著編譯后的代碼與源代碼有同樣的執(zhí)行順序,編譯后的代碼沒有經(jīng)過優(yōu)化。

3、連接

當所有的目標文件都生成之后,gcc就調用ld來完成最后的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執(zhí)行程序中的恰當?shù)奈恢?,同時,該程序所調用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。

4、匯編

匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為后綴的匯編語言源代碼文件和匯編、.s為后綴的匯編語言文件經(jīng)過預編譯和匯編之后都生成以.o為后綴的目標文件。

gcc所遵循的部分約定規(guī)則:

1、.c為后綴的文件,C語言源代碼文件。

2、.a為后綴的文件,是由目標文件構成的檔案庫文件。

3、.h為后綴的文件,是程序所包含的頭文件。

4、.i 為后綴的文件,是C源代碼文件且不應該對其執(zhí)行預處理。

5、.m為后綴的文件,是Objective-C源代碼文件。

6、.o為后綴的文件,是編譯后的目標文件。

7、.s為后綴的文件,是匯編語言源代碼文件。

目錄結構:

命令dir 顯示當前目錄下的文件結構

顯示當前在哪個目錄下 : pwd

linux 用戶管理

添加用戶必須是root權限下的用戶才能新建用戶

添加用戶:useradd 用戶名

設置密碼:passwd 用戶名

刪除用戶:userdel 用戶名

? ? userdel -r 用戶名 (刪除用戶以及用戶主目錄)

退出:logout

命令: init [0123456]

運行級別:

0:關機

1:單用戶

2:多用戶狀態(tài)沒有網(wǎng)絡服務

3:多用戶狀態(tài)有網(wǎng)絡服務

4:系統(tǒng)未使用保留給用戶

5:圖形界面

6:系統(tǒng)重啟

常用的運行級別是3和5 要修改默認的運行級別可改文件/etc/inittab

grep -n "hello" Hello.cpp? -n 返回指定數(shù)據(jù)所在文件位置的行號

manual 相當于手冊 ---》 man 命令相當于doc下的help? ? man grep

重定向命令

將結果保存到文件里:

> 文件名稱

>> 文件名稱 將結果追加到指定文件的末尾

例子:grep -n "hello" Hello.cpp > kkk.bak? ? 將> 前面的結果保存到kkk.bak里面

第一節(jié)習題:

c語言常識:

system是C函數(shù)庫stdlib.h、process.h中的一個函數(shù)。具體解釋如下:

int system(char *command):將MSDOS命令command傳遞給DOS執(zhí)行。

而pause是DOS下的一個命令。功能是:暫停批處理的執(zhí)行,顯示一個中文信息:“請按任意鍵繼續(xù). . .”,或者英文信息:“Press any key to continue . . .”

簡單的說:就是暫停程序的執(zhí)行,等待任意健繼續(xù)執(zhí)行。

#include <stdio.h>

#include <stdlib.h>

頭文件是擴展名為.h的文件 包含了C函數(shù)聲明和宏定義 被多個源文件中引用共享

有兩種類型的頭文件:程序員編寫的頭文件和編輯器自帶的頭文件

這兩個頭文件分別代表什么:

是標準輸入輸出頭文件。平時寫C語言時,用到的printf() 和scanf()都是系統(tǒng)定義好的,而這些函數(shù)的定義就包含在stdio.h這個文件中。它是標準的輸入輸出庫,包含了c語言的輸入輸出函數(shù)原型,要進行io操作必須包含此頭文件。

standard library 標準庫頭文件 stdlib.h里面定義了C C++語言的五種變量類型 一些宏 和 通用工具函數(shù)。類型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函數(shù)如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。

文件權限 用戶組

添加組:groupadd 組名

查看linux中所有的組信息:cat /etc/group? ?

編輯linux中所有的組信息:vi /etc/group

vi /etc/group | more

創(chuàng)建用戶并同時指定將該用戶分配到哪個組

useradd -g 組名 用戶名

查看linux中所有的用戶信息

vi /etc/passwd? ? cat /etc/passwd

例子:

camellia 代表用戶

x 代表隱藏的密碼

1000 代表用戶id

1000 代表組id

兩個:之間的空白代表 沒有注釋

/home/camellia 代表該用戶的主目錄

/bin/bash 代表該用戶所使用的shell解析器

linux命令 (cp mkdir)

? ? ? ? ? |

? |

? \/

shell

? |

? |

? \/

linux 內核

-rw-r--r--? ? 劃分 -? ? ? rw-? ? ? ? r--? ? ? ? r--

-:代表文件類型

rw-:代表文件的所有者對該文件的權限

r--:代表文件所在組對該文件的權限

r--:代表其他組的用戶對該文件的權限

權限分為三種:r? 可讀 用4表示

? ? w 可寫 用2表示

? ? x? 可執(zhí)行 用1表示

說明akai文件夾的權限只有akai自己這個用戶有可讀可寫可執(zhí)行的權限 所在組的成員和其他組成員沒有任何權限

現(xiàn)在修改akai文件夾的權限 : chmod 777 akai

但是會報錯:因為目前登錄的用戶是ayong 所以沒有權限改變akai的文件權限

此時應該退出ayong用戶 登錄akai用戶

在 home文件夾下 修改akai文件夾的權限? chmod 777 akai

如何修改文件的訪問權限問題?

? ? ? ? 目前登錄ayong 這個用戶? 用 ls -l 查看到akai用戶下的文件情況 mytest1.java 的權限是 -rw-r--r--

所以用戶ayong 無法編輯mytest1.java 這個文件 所以需要退出ayong這個用戶 然后登錄akai這個用戶 更改這個mytest1.java的權限 : chmod 660 mytest1.java

添加用戶時可以指定將該用戶添加到哪個組中 同樣用root的管理權限可以改變某個用戶所在的組:

usermod -g 組名 用戶名

改變該用戶登錄的初始目錄:

usermod -d 目錄名 用戶名

改變文件所有者:

chown 用戶名 文件名

查看文件的所有者

ls -ahl

改變文件所在組:

chgrp 組名 文件名

練習中遇到的問題 為組添加用戶 時? 用戶名必須是一個字符串 不能是空格 比如 Tang Monk就不可以

發(fā)現(xiàn)一個問題 當沙僧轉變成monster(妖怪組)的時候 kong文件夾的權限是770 771 都是不行的 Kong文件夾權限為777的時候才能打開 kong文件夾? 但是 kong和Sha的屬組都是monster啊 這是什么原因呢?

在linux下開發(fā)java程序 需要安裝jdk

1.將mypackage.iso 掛載到linux操作系統(tǒng)上

2.。。。

查找以sh為結尾的文件? : ls -l /bin/*sh

查看目前使用的是哪種shell : env (該命令可以顯示當前操作系統(tǒng)的環(huán)境變量)

shell分類:csh /? ksh / sh

改變shell

chsh -s /bin/csh

當命令忘記時? 你可能只記住幾個字母

比如你忘記mkdir? 你只記住m開頭的? 此時需要打出m 快速敲擊兩次tab鍵 就能出來所有m開頭的命令

希望知道曾經(jīng)使用的命令 : history命令

顯示最近執(zhí)行的十個命令:history 10

執(zhí)行編號為861的命令 : !861

tcp/ip的由來:

計算機和計算機之間的交流是通過 通訊協(xié)議

最重要的不可或缺的通訊協(xié)議就是 tcp/ip協(xié)議

tcp/ip協(xié)議不是一個獨立協(xié)議 而是一組協(xié)議 它包括 tcp(傳輸協(xié)議) ip(ip協(xié)議) udp(用戶數(shù)據(jù)包協(xié)議) arp(地址解析協(xié)議) rarp(反地址解析協(xié)議)等。因為tcp 和 ip 協(xié)議最重要 也是 最早出現(xiàn)的 所以叫做tcp/ip協(xié)議。

tcp/ip 電子書籍:三本書籍 網(wǎng)絡安全相關(黑客)

斯蒂文斯:

以下的四層都是每一個計算機都有的:

應用層

傳輸層

ip層

鏈路層(靠近網(wǎng)卡)

linux網(wǎng)絡環(huán)境配置:

我自己虛擬主機的命令是:ifconfig ens33 192.168.88.22

兩個網(wǎng)絡能夠拼通 兩個網(wǎng)絡一定需要在同一個子網(wǎng)里面

linux中網(wǎng)卡分配的ip是:192.168.1.105

讓window能夠拼通linux的ip地址:

在cmd里面 ipconfig

會發(fā)現(xiàn):VMnet1 和 VMnet8這兩個網(wǎng)卡的ip地址是:192.168.169.1? 192.168.128.1

這兩個ip地址和linux 網(wǎng)卡指定的ip地址 不在同一個子網(wǎng)中 所以window與linux不能互通

現(xiàn)在我想將VMnet8這個網(wǎng)卡和linux達到互通的目的:

需要進行虛擬機設置 :將網(wǎng)絡適配器 (以太網(wǎng))設置成自定義模式 選擇VMnet8網(wǎng)卡

需要將linux網(wǎng)卡指定的ip地址更改 使其ip地址和windows的 VMnet8這個網(wǎng)卡的ip同處于一個子網(wǎng)中。

在虛擬機上輸入命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改IPADDR 為192.168.128.(2-255) 保存退出 此時windows和linux的ip同屬于一個子網(wǎng)中。

此時:

實現(xiàn)了windows和linux的互通

如何查詢linux中安裝了哪些rpm軟件

rpm -qa (quiry all)

rpm -q mysql 查詢是否安裝了mysql包

samba就是能夠使liux和windows實現(xiàn)資源互享的服務器

在linux安裝samba

1.查看是否裝了samba rpm -q samba

2.如有 就卸載? rpm -e samba

看是否還有未刪除掉的samba相關的包

rpm -q sam*

3.把自己的安裝文件 掛載到Linux下

d.把samba開頭的文件拷貝到/home下 準備安裝

cp /mnt/cdrom/Packages/samba* /home

service smb stop

service smb restart

虛擬機網(wǎng)絡適配器的三種情況分別是?:

具體講解請看:http://m.itdecent.cn/p/bb02b16d99ec

安裝虛擬機出現(xiàn)以下提示:

mount:block device /dev/sr0 is write - protected , mounting read-only

說明系統(tǒng)光驅加載成功,因為光驅是只讀的,所以提示write-protected,mounting read-only,sr0是光驅設備名,

通過以下命令:

ll /dev/cdcom

可以看到

lrwxrwxrwx. 1 root root 3 Dec 25? 2013 /dev/cdrom -> sr0

即/dev/cdcom是sr0的軟鏈接

/dev/sr0 與 /dev/cdrom 的 關系:

/dev/sr0是光驅的設備名,/dev/cdrom代表光驅

cdrom是sr0的軟鏈接.你ll /dev/cdrom和ll /dev/sr0看看顯示

用df命令查看磁盤驅動器當前的可用空間,用free顯示當前可用內存

”添加的Samba用戶首先必須是Linux用戶”

smbpasswd命令的常用方法

smbpasswd -a 增加用戶(要增加的用戶必須以是系統(tǒng)用戶)

smbpasswd -d 凍結用戶,就是這個用戶不能在登錄了

smbpasswd -e 恢復用戶,解凍用戶,讓凍結的用戶可以在使用

smbpasswd -n 把用戶的密碼設置成空.

???????????? 要在global中寫入 null passwords -true

smbpasswd -x? 刪除用戶

查看linux用戶:cat /etc/passwd

查看samba用戶:cat /etc/samba/smbpasswd

實現(xiàn)虛擬機和主機共享文件:

1.首先需要虛擬機能夠ping通主機ip

虛擬機設置里面 需要將網(wǎng)絡適配器的選擇到自定義VMnet8

需要將虛擬機的網(wǎng)絡配置文件進行修改 將配置文件的IPADDR NETWORK GATEWAY 的網(wǎng)段在和主機的VMnet8的網(wǎng)段保持一致

主機VMnet8的ip怎么知道 ?cmd 中 ipconfig /all這個命令

需要將虛擬機的網(wǎng)絡配置文件進行修改:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

同時,需要將虛擬網(wǎng)絡編輯器進行修改

在DHCP設置中

在NAT設置中

所以網(wǎng)絡配置文件中的IPADDR的地址最后一段的區(qū)間在128-254之間

網(wǎng)絡配置文件修改好后 重啟:service network restart

然后,需要將虛擬機的設置中的選項里面選擇共享文件開啟狀態(tài)

任務調度命令:

crontab? ? /etc/crontab

1.設置任務:crontab -e

2.每隔一定時間去執(zhí)行

date顯示當前系統(tǒng)時間 date > /home/mydatel?

每天凌晨兩點執(zhí)行:

先設置任務:crontab -e? 在里面加入:

0 2 * * * date >> /home/mydate2

每分鐘執(zhí)行:

* * * * * date >> /home/mydate3

怎樣去調度多個任務

1.在crontab -e 中直接寫

2.把所有任務寫入到一個可執(zhí)行文件(shell編程)(推薦)

shell文件 是以.sh結尾

如何終止任務

crontab -r 終止任務調度

crontab -l 任務調度列表

進程:進程就是正在執(zhí)行的程序

線程:1.輕量級的程序

? ? 2.進程有獨立的地址空間 線程沒有

? ? 3.線程不能獨立存在 它是由進程創(chuàng)建的

? ? 4.相對來講,線程所占的cpu和內存小于進程所占的cpu和內存

在linux中 每一個執(zhí)行的程序都成為一個進程 每一個進程都會分配一個id號

每一個進程都會對應一個父進程 而這個父進程可以復制多個子進程

每一個進程都可能以兩種方式存在 前臺與后臺 所謂前臺進程就是用戶目前屏幕上可以進行操作的 后臺進程就是實際在操作的

ps 命令查看系統(tǒng)中正在執(zhí)行的進程:

ps -a 顯示當前終端所有的進程信息

ps -u 以用戶的格式顯示進程信息

ps -x 顯示后臺進程運行的參數(shù)

ps -aux

終止進程 kill 進程號

bash 是當前進程 是終止不了的

強制終止 kill -9 進程號

top 查看執(zhí)行進程

查看指定用戶的進程 :u 輸入“u”+回車 再輸入用戶名即可

終止指定的進程 :“k”+回車 再輸入要結束的id號

指定系統(tǒng)狀態(tài)更新時間:top -d 10 :指定系統(tǒng)更新進程的時間為10秒

查看系統(tǒng)時間:date

查看指定月份月歷:cal 3 2002? 查看2002年的3月份的月歷

例子:將某一年的月歷寫入到指定文件中 cal 2021 > test

vi test? 就能看見2021年的月歷了

監(jiān)控網(wǎng)絡狀態(tài)信息

netstat 顯示網(wǎng)絡統(tǒng)計信息? (目前的鏈接 數(shù)據(jù)包傳遞數(shù)據(jù) 路由表內容)

按端口號排序 查看網(wǎng)絡統(tǒng)計信息:netstat -an

traceroute 追蹤路由? 用于顯示數(shù)據(jù)包到主機間的路徑

路由表:route 命令

mysql安裝配置使用

查看進程 netstat -anp | more

查看環(huán)境:env | more

在root 目錄下: 查看 ls -al? |? more? ? .bash_profile 是用戶變量

可以在.bash_profile文件中添加一個路徑

看表的結構:desc 表名

showUsers.java

將mysql驅動放在jdk下的jre/lib/ext下

mysql -u root -p

備份和恢復mysql數(shù)據(jù)庫:

執(zhí)行備份和恢復的命令位置是:mysql 下的bin目錄

備份:mysqldump -u root -p密碼 數(shù)據(jù)庫名>data.bak?

恢復:mysql -u root -p密碼 數(shù)據(jù)庫名<data.bak

每天凌晨兩點將數(shù)據(jù)備份到/home/spdb1.bak

1. vi my.sh

/home/mysql/bin/mysqldump -u root -p spdb1 > /home/spdb1.bak

2. chmod 744 my.sh

3. ls -l

4. crontab -e

? ? 0 2 * * * /root/my.sh

但是考慮到備份的數(shù)據(jù)被覆蓋:----》 保存的文件名稱不是一樣的 就能解決這個問題 ---》shell

cp -rf 文件夾名稱 要復制的位置

linux 配置系統(tǒng)環(huán)境變量 配置用戶環(huán)境變量

更改配置:使得tomcat 用戶root只要一登錄就啟動tomcat

vi /root/.bashrc

加入最后一行:

說明剛才的設置生效了

添加一個臨時生效的路徑:使? my.sh 可以在任何文件位置都能執(zhí)行

export PATH=$PATH:/root

取別名 alias abc='ls -l /home'? 之后命令 abc 就能相應執(zhí)行命令

壓縮文件:

一次性壓縮多個文件:

zip 壓縮后文件名.zip 文件1 文件2...

將該目錄下的所有文件壓縮:zip -r 壓縮后的文件名.zip ./workspace/

遠程連接虛擬機數(shù)據(jù)庫

cmd上:連接虛擬機的mysql數(shù)據(jù)庫

針對mysql 啟動失敗 ---? Can’t connect to local MySQL server through socket

問題關鍵在于:/etc/my.cnf

修改完成后 ?。?!一定要啟動一下mysqld 才能生效 systemctl start mysqld

本機訪問虛擬機的數(shù)據(jù)庫 !---會了

NAT模式下:具體配置時,IP設置與vmnet8同網(wǎng)段,網(wǎng)關設置成vmnet8的網(wǎng)關(在“虛擬網(wǎng)絡設置”里的Net選項卡里能找到Gateway)通常是xxx.xxx.xxx.2。一般虛擬機的網(wǎng)關都是 xxx.xxx.xxx.2? 之前你設置成192.168.128.1? 就經(jīng)常ping不動

NAT模式下 的“虛擬網(wǎng)絡編輯器”---》NAT設置---》

然后修改 vi /etc/sysconfig/network-scripts/ifcfg-ens33

保存退出 然后 service network restart

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、第八章 Samba服務器2、第八章 NFS服務器3、第十章 Linux下DNS服務器配站點,域名解析概念命令:...
    哈熝少主閱讀 3,920評論 0 10
  • 進入帶空格的文件或者文件夾 Linux文件權限詳解 文件和目錄權限概述 在linux中的每一個文件或目錄都包含有訪...
    annkee閱讀 2,804評論 0 4
  • 觀其大綱 第1部分Linux的基礎知識第1章Linux概述第2章Linux系統(tǒng)的安裝KickStart開始自動安裝...
    周少言閱讀 1,676評論 1 10
  • 第一章 1.Linux是一套免費使用和自由傳播的類UNIX操作系統(tǒng),它可以基于Intel x86系列處理器以及Cy...
    yansicing閱讀 5,600評論 0 9
  • 基礎命令 為了在 sudo 中設置權限提升,您需要編輯 sudoers 文件。 你不應該直接編輯文件,而是使用:s...
    米開朗基樂閱讀 2,100評論 0 5

友情鏈接更多精彩內容