20210206-1 Linux基礎與應用(上)

1、安裝與配置java

千萬不要點擊 「我已複製該虛擬機」,會引發MAC地址的衝突,由於每一臺linux服務器都有一個MAC地址,若是複製,MAC地址也會被拷貝node

能夠經過Xshell 進行遠程鏈接python

 

node1 node2 node3 在之後作 大數據開發中能夠做爲三個hadoop節點linux

如今須要打開 node3 後續會安裝 docker應用ios

爲node3設置ip,選擇網卡時,能夠直接按 Tab 鍵,自動補全存在的網卡nginx

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33docker

BOOTPROTO=dhcp    意思是計算機啓動時,分配ip 是動態分配,dhcp指動態分配shell

TYPE=Ethernet數據庫

PROXY_METHOD=none編程

BROWSER_ONLY=no

# BOOTPROTO=dhcp

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

UUID=7bfe3a1c-3e6c-476c-bf7e-4be727e6602c

DEVICE=ens33

ONBOOT=yes

DNS1=192.168.56.2

IPADDR=192.168.56.130

GATEWAY=192.168.56.2

Ip地址每臺不一樣,DNS1和Gateway node1 node2 node3和CentOS 6這些臺都是相同的

 

ip地址改完後,須要輸入如下命令

[root@localhost ~]# service network restart

就會把修改的配置從新加載,才能成功

 

若是想修改主機名

[root@localhost ~]# vi /etc/sysconfig/network

# Created by anaconda

NETWORKING=yes

HOSTNAME=node3

[root@localhost ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

:1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.56.130 node3

這樣之後就能夠不用經過ip訪問,而是能夠直接經過主機名訪問了

 

安裝操做系統

● 設置IP:

● VM:編輯>虛擬網絡編輯器

● vi/etc/sysconfig/network-scripts/ifcfg-eth0

● 刪除UUID和MAC地址

● ONBOOT=yes

● BOOTPROTO=static

● IPADDR=172.16.233.131

● NETMASK-255.255.255.0

● GATEWAY=172.16.233.2

● DNS1=172.16.233.2

● rm-fr/etc/udev/rules.d/70-persistent-net.rules

拷貝虛擬機,MAC地址會改變,剛剛選擇已移動,因此vmware自動解決了這個問題,若是是 老版本的vmware或者不當心選擇我已複製,則 須要刪除規則,使它失效,目前是沒有必要用 rm-fr/etc/udev/rules.d/70-persistent-net.rules 處理的

 

● VM:

● 默認維護,每一臺克隆,或新建的虛擬機,MAC地址不重複

 

● 若是虛擬機保留/etc/udev/rules.d/70-persistent-net.rrules這個文件,在經過該虛擬機克隆的時候:

● 1.文件被帶到新的虛擬機中

● 2.vm變動了新的虛擬機的mac地址

● SO:新機器不能使用eth0接口

● 你配置的/etc/sysconfig/network-scripts/ifcfg-eth0就不能應用

 

● 關閉防火牆&Selinux

● service iptables stop

● chkconfig iptables off

 

● vi/etc/selinux/config

● SELINUX=disabled

● 關機

● 拍攝快照

● 注意:往後,虛擬機必定要用快照克隆

 

2、Linux介紹

Linux概況

Linux簡介

什麼是Linux

簡單地說,Linux是一套無償使用和自由傳播的類Unix操做系統,它主要用於基於Intel x86系列CPU的計算機上。其目的是創建不受任何商品化軟件的版權制約的、全世界都能自由使用的Unix兼容產品

 

內核

庫:.so共享對象,windows:dll動態連接庫,應用程序

Unix是須要付費的

linux命令分爲內部命令和外部命令 ,內部命令都在kernel內核中

 

Linux核心

● LINUX的內核:內核是系統的核心,是運行程序和管理像磁盤和打印機等硬件設備的核心程序。

程序啓動時,首先主板有一個Bios系統,上面有一小塊內存,會把kernel加載進去,kernel在經過各類目錄調用linux的功能,好比bash人機交互界面等;把操做系統須要的文件一個又一個的加載到內存裏,成爲咱們的操做系統,操做系統也是一個程序,只是這些程序全都運行在內存裏

Win10須要更多的內存運行,因此比win7更吃內存

● LINUX SHELL:Shell是系統的用戶界面,提供了用戶與內核進行交互操做的一種接口。

● LINUX文件系統:Linux文件系統是文件存放在磁盤等存儲設備上的組織方法。Linux能支持多種目前滸的文件系統,如EXT二、EXT三、FAT、VFAT、ISO9660、NFS、SMB等。

● LINUX應用系統:標準的Linux系統都有一整套稱爲應用程序的程序集,包括文本編輯器、編程語言、XWindow、辦公套件、Internet工具、數據庫等。

 

3、Linux簡單命令

簡單命令

● type:命令類型

● 外部命令 & 內部命令

[root@localhost ~]# type ifconfig

ifconfig 是 /usr/sbin/ifconfig

[root@localhost ~]# cd /sbin

[root@localhost sbin]# ll -l | grep ifconfig

-rwxr-xr-x. 1 root root       82000 8月   3 2017 ifconfig

-rwxr-xr-x. 1 root root        3104 6月  10 2014 pifconfig

type+命令 後,若是返回一個路徑,那麼這個命令就是外部命令,是經過調用文件系統中的命令啓動的

內部命令都是在linux內核裏的,好比

[root@localhost sbin]# type echo

echo 是 shell 內嵌

● help:內部命令幫助

● help:內部命令清單,附帶語法格式,描述

● help  具體內部命令

一般用於內部命令

● man:幫助手冊manual

● yum install man man-pages -y

一般用於外部命令,man也是一個操做文檔軟件,能夠經過 yum install man的方式安裝

用type 區分外部命令和內部命令

● whereis:定位命令位置,定位外包命令。

[root@localhost ~]# whereis ifconfig

ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

[root@localhost ~]# whereis bash

bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

bash是一個shell程序,一個bash文件能夠讀取標準輸入流,或者從腳本文件進行讀取

● file:文件類型

[root@localhost ~]# file /sbin/ifconfig

/sbin/ifconfig: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=dff548da1b4ad9ae2afe44c9ee33c2365a7c5f8f, stripped

ELF至關於windows中的可執行文件

bash能夠理解爲腳本解釋器,至關於linux的腳本解釋器,能夠把命令寫到文件裏,經過bash執行

● echo:打印到標準輸出

[root@localhost ~]# echo "hello"

hello

● $PATH:環境變量:路徑

環境變量是系統中的總體變量,能夠理解爲全局變量,全部程序,包括shell程序

這裏是linux的全局變量,因此程序只要進入linux系統,都可以定義它

[root@localhost ~]# $PATH

-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: 沒有那個文件或目錄

sbin在全局變量中,因此即便不在當前文件夾,ifconfig也能夠執行

就是經過環境變量找到文件夾的

linux系統以冒號進行隔離

[root@localhost ~]# echo $aaa

[root@localhost ~]# aaa=66

[root@localhost ~]# echo $aaa

66

這個叫shell變量,輸入以後才能夠有,可是環境變量至關於java中的全局變量

● $LANG

[root@localhost ~]# echo $LANG

zh_CN.UTF-8

$LANG 也是一個環境變量,表示系統是英(中)文的,同時支持utf-8

 

linux內核經過shell程序(殼)調用bash解釋器,bash至關於腳本解釋器,會解釋用戶輸入的命令,執行後會在path中給定的目錄從左向右進行尋找

外部程序ifconfig可以執行起來就是經過bash解釋器執行的程序

空白符用於切割不一樣的命令

 

[root@localhost ~]# type yum

yum 已被哈希 (/usr/bin/yum)

因此yum 也是一個外部命令,做用是安裝

 

[root@localhost ~]# file /usr/bin/yum

/usr/bin/yum: Python script, ASCII text executable

能夠看出這是一段python的腳本,進入目錄查看一下

 

[root@localhost ~]# vi /usr/bin/yum

#!/usr/bin/python 注入瞭解釋器,#!/,表明注入解釋器,如下的程序都用解釋器執行

import sys

try:

    import yum

except ImportError:

    print >> sys.stderr, """\

若是是bash解釋器執行,一樣的是 #!/

 

[root@localhost ~]# yum install man

其實是調用python文件/usr/bin/yum腳本去指定作相應操做

 

● type yum

● file /usr/bin/yum

● /usr/bin/yum:a /usr/bin/python script text executable

● vi /usr/bin/yum

● #!/usr/bin/python

● ps -fe進程列表

● type ps

● man ps

ps就至關於任務管理器,PID就至關於windows中的進程

[root@localhost ~]# ps

  PID TTY       TIME CMD

 57179 pts/2    00:00:00 bash

 58836 pts/2    00:00:00 ps

若是想查看更多的信息

[root@localhost ~]# ps -ef

UID         PID   PPID  C STIME TTY          TIME CMD

root          1      0  0 08:45 ?        00:00:08 /usr/lib/systemd/systemd --switch

root          2      0  0 08:45 ?        00:00:00 [kthreadd]

……

……

 

[root@localhost ~]# type ps

ps 已被哈希 (/usr/bin/ps)

ps也是一個外部命令,因此能夠輸入man ps查看

 

● echo

● type echo

● help echo

● echo hello

 

變量

● a=3

● echo $a

[root@localhost ~]# a=3

[root@localhost ~]# echo $a

3

[root@localhost ~]# echo $a=3

3=3

● b=(1,2,3)

● echo $b

[root@localhost ~]# b=(1,2,3)

[root@localhost ~]# echo $b

1,2,3

 

● b=(1 2 3)

● echo $b

● echo ${b[2]}

[root@localhost ~]# b=(1 2 3)

[root@localhost ~]# echo $b

1

[root@localhost ~]# echo $b[2]

1[2]

[root@localhost ~]# echo ${b[2]}

3

由於linux默認識別空格爲分隔符,逗號是不行的。因此 b=(1 2 3)至關於輸入了三個數,就是一個數組了,echo $b[2]的結果是1[2],至關因而把 1 和 [2]鏈接起來的,並不認爲b[2]是一個數組,用大括號標註起來,至關於作一個轉義,整個做爲一個變量

linux是從左到右,一個一個解釋的

 

● echo hello$agod

● echo hello${a}god

[root@localhost ~]# echo hello$agod

hello

[root@localhost ~]# echo $a

3

a有值,echo hello$agod 只打出了hello,由於把 agod總體當成了一個變量,可是agod是沒有值得

[root@localhost ~]# echo hello${a}god

hello3god

${a}表示a是一個變量名傳給$

 

● unset myurl

若是給一個變量賦值後,想要取消掉,unset系統中就沒有這個變量了,能夠經過這種方式取消變量

[root@localhost ~]# myurl=baidu

[root@localhost ~]# echo $myurl

baidu

[root@localhost ~]# unset myurl

[root@localhost ~]# echo $myurl

 

[root@localhost ~]#

 

● echo $$ 當前shell的PID

[root@localhost ~]# echo $$

57179 → 這是一個 PID,當前shell的PID

shell也是一個程序,shell鏈接kernel和應用程序

既然是程序,就有一個本身的PID

經過兩個不一樣的shell,至關於 兩個接入點訪問,就會有兩個PID

● ps -fe

● bash

● whereis bash

● /bin/bash

● shell腳本第一行的定義~!

shell腳本第一行,#和!的意義就至關於使用bin/bash去實現

 

● PATH:windows。linux:環境變量

● 記錄查詢執行命令所在的路徑

● 分割:

● hash -r清除緩存

[root@localhost ~]# hash

命中 命令

   3 /usr/bin/file

   6 /usr/bin/ps

   4 /usr/bin/whereis

   2 /usr/bin/yum

   1 /usr/bin/vi

   2 /usr/bin/man

至關於把應用程序調到內存中

● shell:對於命令查找的方式,在PATH記錄的目錄中查找,緩存到內存hash中

這樣下次不用從linux系統中查找,直接在hash緩存中查找

 

● man

● 1:用戶命令(/bin,/usr/bin,/usr/local/bin)

● 2:系統調用

● 3:庫用戶

● 4:特殊文件(設備文件)

● 5:文件格式(配置文件的語法)

● 6:遊戲

● 7:雜項(Miscellaneous)

● 8:管理命令(/sbin,/usr/sbin,//usr/local/sbin)

● shell,bash:程序

● /etc/profile是bash的配置文件

● source/etc/profile   至關於加載了配置文件,把更改的東西加載到上面

 

4、文件系統命令

文件系統命令

● 文件權限:9位,每3位一組,3組權限(U,G,0)每一組:rwx(讀,寫,執行),r--

U User G Group O Other

[root@localhost ~]

User是root 組也就是root組,Other是除了root之外的其餘的任何用戶

[root@localhost etc]# ls -l

總用量 1368

drwxr-xr-x.  3 root root      101 2月   4 06:01 abrt

-rw-r--r--.  1 root root       16 2月   4 06:12 adjtime

-rw-r--r--.  1 root root     1518 6月   7 2013 aliases

-rw-r--r--.  1 root root    12288 2月   4 06:27 aliases.db

drwxr-xr-x.  2 root root       51 2月   4 06:02 alsa

……

……

rw- 給當前用戶 r-- 給group組 後面的r-- 是給其餘用戶的

-rw-r--r--.  1 root root    數字 1 1 1 2 表明被引用的次數,被軟(硬)鏈接的次數

至關於一個文件建一個快捷方式

1 後面的兩個root分別表明所屬的用戶和所屬組

在日後是建立時間和文件名

 

● 文件硬連接的次數

● 文件的屬主(owner)

● 文件的屬組(group)

● 文件大小(size),單位是字節

● 時間戳(timestamp):最近一次被修改的時間

● 訪問:access

● 修改:modify,文件內容發生了改變

● 改變:change,metadata,元數據

ls 查詢,前面是d的爲目錄,前面是 -的爲文件

 

● Filesystem Hierarchy Standard(文件系統層次化標準)

● /boot:系統啓動相關的文件,如內核、initrd,以及grub(bootloader)

● /dev:設備文件

[root@node3 dev]# df -h

文件系統                 容量  已用  可用 已用% 掛載點

/dev/mapper/centos-root   17G  7.5G  9.5G   45% /

……

/dev/sda1               1014M  157M  858M   16% /boot

/dev/sr0                 4.2G  4.2G     0  100% /run/media/root/Cen

/dev/mapper/centos-root /dev/sda1 能夠理解爲分區的概念

設備文件就是指磁盤的設備文件

● /etc:配置文件

系統啓動時會調用一些配置文件

● /home:用戶的家目錄,每個用戶的家目錄一般默認爲/home/USERNAME

除了root用戶,root用戶在root目錄下;在home下能夠建立多個用戶

每一個用戶的文件夾都是隔離的,不一樣的用戶之間不能訪問

從root權限退到普通用戶,不須要輸入密碼

[root@node3 ~]# su wm01

[wm01@node3 root]$ pwd

/root

[wm01@node3 root]$ cd ~

[wm01@node3 ~]$ pwd

/home/wm01

[wm01@node3 ~]$ cd ..

[wm01@node3 home]$ cd wm02

bash: cd: wm02: 權限不夠

cd ~ 直接進入家目錄,不一樣的用戶是隔離開的

 

● /root:管理員的家目錄;

● /lib:庫文件

● /media:掛載點目錄,移動設備

● /mnt:掛載點目錄,額外的臨時文件系統

● /opt:可選目錄,第三方程序的安裝目錄

好比nginx能夠安裝在這裏

● /proc:僞文件系統,內核映射文件

linux一切皆爲文件,因此進程相關的文件都會在這裏

[root@node3 ~]# cd /proc/$$ 進入當前進程

[root@node3 66448]# ls

attr             cwd       map_files   oom_adj        schedstat  task

autogroup        environ   maps        oom_score      sessionid  timers

cgroup           fd        mountinfo   pagemap        smaps      wchan

……

[root@node3 66448]# cd fd

[root@node3 fd]# ls

0  1  2  255

0表明輸入輸出和錯誤

 

● /sys:僞文件系統,跟硬件設備相關的屬性映射文件

● /tmp:臨時文件,/var/tmp

● /var:可變化的文件     通常會把日誌文件放在這裏

● /bin:可執行文件,用戶命令

● /sbin:管理命令

 

● df:顯示磁盤使用狀況

[root@node3 ~]# df -h 顯示disk的分配狀況

● du:顯示文件系統使用狀況

切換用戶無需退出操做系統,能夠用 su 進行切換,su表明switch user 切換用戶

[root@node3 var]# du -h

h表明human,人類,就是human readable

s表明summary,總結

linux是多人共用的,磁盤愈來愈少的狀況下,查看文件夾使用是否超量

就能夠用 du -sh ./* 對當前目錄全部文件進行總結查找

./表明當前目錄,*表明全部的

[root@node3 var]# du -sh ./*

0 ./account

0 ./adm

3.3M ./cache

0 ./crash

8.0K ./db

0 ./empty

……

[root@node3 ~]# du -sh

4.2G .

[root@node3 ~]# cd /var

[root@node3 var]# du -sh

111M .

若是想查特定的文件夾,能夠 du -sh /文件夾名

[root@node3 var]# du -sh /root

4.2G /root

 

[root@node3 var]# type du

du 已被哈希 (/usr/bin/du) 存在路徑,因此 du 也是一個外部程序

● ls:顯示目錄

● cd:切換工做目錄 Linux 的目錄要加 / 直接跳是跳不過去的

[root@node3 ~]# cd /

[root@node3 /]# cd /etc/sysconfig/

[root@node3 sysconfig]# cd ..

[root@node3 etc]# cd - 若是不當心返回上層,能夠用這種方式進入

/etc/sysconfig

[root@node3 sysconfig]# pwd

/etc/sysconfig

 

[root@node3 sysconfig]# cd ~    回到家目錄,root回到root,其他用戶回到home

[root@node3 ~]# pwd

/root

[root@node3 ~]# cd /

[root@node3 /]# pwd

/

 

● pwd:顯示當前工做目錄

● mkdir:建立目錄

在當前目錄,深度建立目錄;./表明當前目錄

[root@node3 ~]# mkdir -p ./em/db/v8

也能夠水平建立目錄,能夠用變量的方式實現

[root@node3 ~]# mkdir abc

[root@node3 ~]# mkdir ./abc/{x,y,z}dir

[root@node3 ~]# cd abc

[root@node3 abc]# ls

xdir  ydir  zdir

 

● rm:刪除

● cp:拷貝

● mv:移動

● ln:連接

● stat:元數據

● touch

● mkdir:建立目錄

● mkdir -p./a/b/c

● mkdir a/{1,2,3}dir

● rm:刪除

● rm -f

● rm -rf /

-rf r recursive f force

-r 會出現交互式提示

-rf 強制刪除,不會出現交互式提示

[root@localhost tmp]# rm profile

rm:是否刪除普通文件 "profile"?y

● cp:拷貝

● cp/etc/{profile,inittab} ./

● cp -r./a./new

● cp -l cp-s

當前目錄下的文件須要加 點. ./表明當前目錄

[root@localhost etc]# cp ./profile /tmp

[root@localhost etc]# cd /tmp

[root@localhost tmp]# ls

profile

……

若是拷貝目錄,須要加 -r,有一個循環的意思,目錄下面還有目錄;拷貝目錄不須要加 ./

[root@localhost em]# cp -r nginx /tmp

[root@localhost em]# cd /tmp

[root@localhost tmp]# ls

nginx

……

● mv:移動

其實就是剪切的意思,移動常常有兩個用途,更名或者移動到另外一個文件夾

如今給nginx 更名

[root@localhost tmp]# mv nginx nginx1

[root@localhost tmp]# ls

nginx1

ssh-4Bij5yBn3SJl

……

把 nginx1 移動到別的目錄

[root@localhost tmp]# mv nginx1 /opt/em

[root@localhost tmp]# cd /opt/em

[root@localhost em]# ls

em1  nginx  nginx1

[root@localhost em]# rm -rf nginx1

[root@localhost em]# ls

em1  nginx

 

● ln:連接

● ln默認硬連接ln install.log wm.txt 就會生成 wm.txt文件

● ln -s 軟連接 ln -s wm.txt bjwm.log

前面的數字 272678 等,叫作索引號,能夠理解爲在磁盤上的位置

數字相同能夠 理解爲兩個引用變量指向同一個對象

-rw-r--r--. 2   後面的數字2 是同一個索引號被引用的次數

 

[root@localhost ~]# ll -li

總用量 8

33574978 -rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

33574987 -rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

[root@localhost ~]# ll -l

總用量 8

-rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

-rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

ll -li 能夠把索引號顯示出來

硬連接後,改變一個文件的內容,另外一個文件的內容也會跟着改變,相似於快捷方式

不加參數項默認硬連接

加上 -s 是軟連接,執行連接的文件就至關於執行很深層的文件;不須要在同一目錄下操做

 

[root@localhost ~]# ln -s em.txt infmajem.log

[root@localhost ~]# ll -l

總用量 8

-rw-------. 1 root root 1523 1月  25 15:15 anaconda-ks.cfg

lrwxrwxrwx. 1 root root    6 2月   6 12:38 infmajem.log -> em.txt

-rw-r--r--. 1 root root 1571 1月  25 15:24 initial-setup-ks.cfg

……

硬連接各自是各自的,並無誰指向誰,能夠彼此理解爲是一個變量,都指向統一的位置

軟鏈接存在一種依賴關係,兩個文件的索引號不一樣,至關於新生成了一個值,至關於建立一個快捷方式,若是把源刪掉,快捷方式也會很差使

紅色的意思是在報警找不到源,因此沒法連接

 

• 元數據

元數據指描述文件或者數據的數據

• stat

stat用於描述 profile

[root@localhost ~]# cd /etc

[root@localhost etc]# stat profile

  文件:"profile"

  大小:1819       塊:8          IO 塊:4096   普通文件

設備:fd00h/64768d Inode:16787062    硬連接:1

權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

環境:system_u:object_r:etc_t:s0

最近訪問:2021-02-06 04:14:17.982017594 +0800

最近更改:2018-04-11 12:18:26.000000000 +0800

最近改動:2021-01-25 15:06:21.110000857 +0800

profile 是交互外殼啓動時的配置文件,stat profile可以看到修改狀況或者訪問

開發的時候通常不會給root權限,只有系統管理員有系統root權限

 

|是管道至關於把文件經過管道傳到另外一個命令上,linux以空格切割命令

一個輸入流經過管道輸入到另外一個命令上面

[root@localhost etc]# cat profile | more

 

• touch

能夠建立文件

[root@localhost em]# ls

nginx

[root@localhost em]# touch test

[root@localhost em]# ls

nginx  test

touch後面能夠跟路徑,可以指定路徑建立

[root@localhost em]# touch /opt/shell/tst

相關文章
相關標籤/搜索