Linux 的 基礎 與shell腳本的基礎

来源:https://www.cnblogs.com/lingedu/archive/2018/01/06/8214489.html
-Advertisement-
Play Games

1、安裝vmware和創建虛擬機2、載入centos6.5的鏡像3、linux的介紹linux是一個操作系統(免費開源),來源unix linux是一個典型的樹形文件系統,一切都是基於文件。"/"稱之linux的根目錄即頂級目錄linux的每一個軟體都有缺點的用途,最小化安裝linux中僅有一個超級 ...


1、安裝vmware和創建虛擬機
2、載入centos6.5的鏡像
3、linux的介紹
linux是一個操作系統(免費開源),來源unix

linux是一個典型的樹形文件系統,一切都是基於文件。"/"稱之linux的根目錄即頂級目錄
linux的每一個軟體都有缺點的用途,最小化安裝
linux中僅有一個超級用戶root

linux的特點:


linux的版本:
red hat(RHEL) 收費但有免費試用版本
centos
debian
ubuntu

linux的目錄結構:
/bin
/sbin
/etc
/var
/usr
/opt
/home
/root
/dev
/sys


linux中的基礎命名:
command [option] [file/path]
man command

uname 顯示
date 時間
hostname 主機名
ps -ef | grep pid 列出等於pid的進程
| 管道
grep 過濾
top 實時顯示系統中各個進程的資源占用狀況
free 顯示Linux系統中空閑的、已用的物理記憶體及swap記憶體,及被內核使用的buffer。
jps 顯示運行的java進程
kill -9 強行殺死進程
cat inittab 進入初始化界面


df 查看磁碟
fdisk / 對原有的分區進行擴容或者對整個伺服器擴容
du 顯示每個文件和目錄的磁碟使用空間。
fsck 文件系統檢查修複
mount 掛載
mkfs.ext4 格式化分區


useradd 添加用戶
groupadd 添加組
gpasswd -a:添加用戶到組;gpasswd -a peter users
-d:從組刪除用戶;
-A:指定管理員;gpasswd -A peter users
-M:指定組成員和-A的用途差不多;
-r:刪除密碼;
-R:限制用戶登入組,只有組中的成員才可以用newgrp加入該組。
**********************************************************************
usermode-c<備註>:修改用戶帳號的備註文字;
-d<登入目錄>:修改用戶登入時的目錄;
-e<有效期限>:修改帳號的有效期限;
-f<緩衝天數>:修改在密碼過期後多少天即關閉該帳號;
-g<群組>:修改用戶所屬的群組;
-G<群組>;修改用戶所屬的附加群組;
-l<帳號名稱>:修改用戶帳號名稱;
-L:鎖定用戶密碼,使密碼無效;
-s<shell>:修改用戶登入後所使用的shell;
-u<uid>:修改用戶ID;
-U:解除密碼鎖定。
userdel 刪除用戶
groupdel 刪除組
**********************************************************************
修改文件許可權read write executable
a 超級用戶、屬主、其他用戶
chmod ugo+-rwx /file.txt
chmod 765 /file.txt

進入目錄
cd
cd - ~ $JAVA_HOME
pwd 查看當前所在目錄
相對目錄和絕對目錄:


創建目錄:
mkdir
mkdir -p ./123/1/2/3
mkdir ./123/t1 ./123/t2

創建文件
touch ./123/666 ./123/667
echo "hello world" >> ./123/668
vi ./123/669
vim ./123/669
nano ./670


列出:
ls
ll = ls -l


複製目錄文件
cp ./123/666 ./123/668 ./
cp -r ./123/1 ./ 複製目錄一定要 -r (改變文件屬性所用的遞歸為R)

移動剪切重命名目錄文件
mv ./123/666 ./123/668 ./123/t1/
mv ./123/1/ ./123/t1/
mv ./123/t1/668 ./123/668.doc
mv ./123/t1/1/ /home/test/123/12
mv ./123/12/ ./123/1


批量重命名目錄文件
for i in `seq 2 20`; do touch /home/test/123/${i}.doc ;done
rename .doc .txt *.doc
rename .txt .doc ./123/*.txt

修改文件內容
vi ./123/666.doc
vim ./123/666.doc
nano ./123/666.doc
echo "6666" >> ./123/666.doc (追加)
echo "7777" > ./123/666.doc (覆蓋)

查看文件內容
cat -n ./123/666.doc
head ./123/666.doc
head -30 /var/log/boot.log
tail /var/log/boot.log
tail -30 /var/log/boot.log
tail -f /var/log/boot.log
more /var/log/boot.log
less /var/log/boot.log

vi ./123/666.doc
vim ./123/666.doc
nano ./123/666.doc

刪除目錄文件
rm -rf ./666.doc
rm -rf ./1

改變文件屬性
a
u g o
rwxrw-r-x
- rw- r-- r-- 2 root root 4096 Jan 1 21:00 123
d rw- --- --- 2 biman1 biman1 4096 Jan 1 21:00 biman1
d rwx r-x r-x 2 root root 4096 Jan 1 21:00 test
d rw- --- --- 2 tom tom 4096 Jan 1 21:00 tom

r 4
w 2
x 1

chomd 765 ./123

chmod -R(遞歸) o+w ../test/ (複製目錄所用遞歸為r)

r 讀:查看文件內容、查看目錄列表、文件列表
w 寫:修改文件內容、創建文件、刪除
x 執行: 執行腳本文件

chown tom ./hw.sh 改變屬主
chown tom:tom ./hw.sh 改變屬主:組

chown -R tom:tom ./hw.sh 遞歸改變屬主和組
chown :root ./hw.sh 改變組
chgrp tom ./hw.sh 改變組

 


編輯器:
vi ./hw.sh
i
o

esc
shift + :
w
q
wq
q!


tar:
tar -zcvf ./123.tar ./123/ 打包到123下
tar -zxvf ./123.tar 解壓到當前文件夾
tar -zxvf ./123.tar -C /home/ 打包到home下

/usr/bin/zip zip打包命令
/usr/bin/unzip unzip解壓命令

/bin/gzip
/bin/gunzip
gzip -cr(遞歸) 123 > ./123.gz

> :追加
>> :重定向

linux中的查找:
which 可執行的命令
whereis 安裝包所在的目錄和文件
updatedb 更新資料庫
locate hw.sh 查找資料庫(必須是資料庫跟新後)中的關健字
按照要求查找
find / -name 'hw.sh'
find / -size
find / -atime
find / -ctime

別名:
alias
alias cle='clear'
unalias cle
分臨時和永久:

cd -
cd ~
cd ./
cd ../../../

網路:
netstat -tlp 顯示網路狀態
(lots of)lsof -i:22 顯示好多信息(-i是顯示網路信息)

vi /etc/hosts
vi /etc/sysconfig/network
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/udev/rules.d/70-persistent-net.rules

service network restart/status/start/stop
service iptables restart/status/start/stop
service mysql restart/status/start/stop
service nginx restart/status/start/stop

chkconfig iptables --list
chkconfig iptables off/on


linux中軟體安裝:
一、二進位程式安裝(**.rpm)
(利用命令使用rpm包進行安裝,類似於exe安裝)
優點:簡單容易
缺點:對平臺有限制
rpm的安裝
優點:簡單容易
缺點:安裝包存在依賴
包的組成:
大概由五部分組成
man rpm

查詢:
rpm -q
rpm -qa | grep mysql
rpm -ql
安裝:
rpm -ivh /包的絕對路徑
更新:
rpm -Uvh /包的絕對路徑
卸載:
rpm -e --nodeps
驗證:
rpm -V
二、yum的安裝(聯網進行安裝)
查詢:
yum list
yum grouplist
yum info
yum search

安裝:
yum install gcc
yum -y install gcc
yum groupinstall 組包

更新:
yum -y upgrade gcc
yum -y update gcc
yum -y groupupdate 組包

卸載:
yum -y remove nc
yum -y groupremove 組包

製作緩存:
yum clean gcc
yum clean all
yum makecache

三、源碼安裝(**.gz)
1、下載源碼並解壓
2、執行源碼目錄下的configure文件,後面可以加參數。(讀取readme文件或者下載的官網)
3、執行編譯安裝 make && make install

===========================shell===========================
shell:腳本語言。腳本包含一系列的可執行的linux的命令的集合

shell 解釋器類別:
/bin/bash 預設
/bin/sh
/bin/tcsh
ksh 需要自己安裝

執行方法:
1、 sh ./first.sh 可以不用授予執行許可權
2、 授予./first.sh執行許可權

 

shell中的變數:
變數名=值


註意:
變數名不能是關鍵字
變數名和等號 值和等號之間不能有空格
變數首字母不能是數字和特殊符號 ???

賦值:

取值:

"" :識別轉移符和取值的符號
'' :不識別轉移符和取值的符號,原樣輸出
`` :linux中的命令

設置只讀變數:
readonly 變數名

刪除變數:
unset 變數名

字元串的拼接:

字元的截取:
${name:1:3} 1:起始位置 3:長度

shell中註釋:
單行註釋
多行註釋

shell中的運算:
數學運算: 藉助`expr ` *需要轉義
關係運算:-eq -ne -lt -le -gt -ge
邏輯運算:-a:and -o:or
字元串運算:= != -z:為0返回true -n:為0返回false str:不為空返回true
文件運算:-e:存在 -r:可讀 -w(寫) -x(可執行) -d(目錄) -f(文件) -s(size):大小不為0返回true
布爾運算: !


shell中的數組:
基本數據類型簡單,都是字元串,但是兩個都是字元串的數字即可參加運算
數組定義:
arr1=(1 2 3 4 5 6 7 8)

arr2=(
1232
30
30
23
43
23
)

arr3[0]=123
arr3[3]=999
arr3[6]=[666]

賦值:
arr2[1]=9999

取值:角標從0開始,但是越界不報異常
echo ${arr1[1]}
echo ${arr1[2]}


取數組長度:
${#arr1[*]}


shell中的控制條件:
if [] ; then 控制體 ; fi
定義格式:
if []
then
控制體
fi

if []
then
控制體
else
控制體
fi

if []
then
控制體
elif []
then
控制體
else
控制體
fi

if [ $1 -eq 1 ]
then
echo "男"
fi


if [ $1 -eq 1 ]
then
echo "男"
elif [ $1 -eq 2 ]
then
echo "女"
else
echo "泰國"
fi

有if的地方,後面就有then
沒有elseif 只有elif
每一個控制體都必須寫
if 和 中括弧之間的空格必須嚴格遵守

shell中的迴圈:
定義:
for i in 迴圈條件
do
迴圈體
done

while 迴圈條件
do
迴圈體
done

until [控制體] 滿足條件跳出迴圈
do
迴圈體
done

迴圈
(1)for迴圈
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
(2)while迴圈
i=1
while(i < 11)
do
echo $i
let i++
done
(3)until迴圈
startDate=
endDate=
until [ $# -eq 0 ]
do
if [ $1'x' = '-sdx' ]
then
shift
startDate=$1
elif [ $1'x' = '-edx' ]
then
shift
endDate=$1
fi
shift
done

continue:調出當次迴圈
break:調出迴圈

case 值 in(類似於switch)
(匹配值)
語句
;;
(匹配值)
語句
;;
esac
迴圈 switch break continue
while :
do
echo "輸入1-5"
read num 鍵盤輸入
case $num in
1|2|3|4|5)
echo "在1-5之間"
break
;;
*)
echo "在6-10之間"
continue
;;
esac
done

方法無參無返回值
#!/bin/bash

function fuck(){
echo "第1個參數"$1
echo "第2個參數"$2
echo "第3個參數"$3
echo "第4個參數"$4
echo "第10個參數"${10} #參數個數超過9個之後參數取值要加{}
echo "第所有參數"$*
echo "參數個數 "$#
}
fuck 1 2 3 4 5 6 7 11 22 33 44

方法無參有返回值
#!/bin/bash

function fuck(){
echo "第一個參數:"
read anum
echo "第2個參數:"
read bnum
return $(($anum+$bnum))
}
fuck
echo $? #返回值不能超過255

$1去參數 $#取個數 $* $@ 取所有個數 $?取返回值

shell中的文件引入
#!/bin/bash
#source /home/shell/1.sh #第一種
. /home/shell/1.sh #第二種
echo ${name}
echo "aaaaaaa"
func

shell的簡單調試
語法檢測:相當於java的編譯
1、shell語法檢測:
sh -n ./test.sh (sh是/bin/sh 是系統提供的可執行腳本)
2、shell的普通調試:
sh -x ./test.sh
3、在調試過程中可以按Ctrl + Z中斷調試,觀察結果,然後再按fg鍵繼續調試即可。(先按f在按g鍵)

shell中的時間
years weeks days hours minutes seconds
echo `date -d "x days ago" "+%Y-%m-%d %H:%M:%S"`
x大於0 為 之前 x小於0 為之後

crontab -e(定時列表編輯)
* * * * * 可執行的命令與腳本
分時天月周
00 2-4 * * * 凌晨兩點到四點(2,4)兩點和四點
00 */4 * * * 每兩個小時跑一次
*/1 * * * * 每一分鐘跑一次 echo "hello" >> ./home/cronttab.log

sudo 讓普通用戶得到root許可權
前提是先修改sudo的文件 /etc/sudoers 添加普通用戶
root用戶不能修改sudo文件,需要修改文件許可權後編輯 chmod a+w
sudo rm -rf 1.sh (此時需要輸入密碼)
不輸入密碼重新修改sudo文件 nopass

 

 

//修改尾碼名待修改
#!/bin/bash
#read dir
#function ff(){
dir=/home/abc
cd $dir
for file in 'ls $dir'
do
name=$(ls $file | cut -d . -f1)
mv $file ${name}
done
#}
#ff

=====================================
#!/bin/bash

basedir=/home/shell
rename .sh .txt *.sh
=============有兩個.sh=============
#!/bin/bash

basedir=/home/shell
rename .sh .txt $basedir/*.sh
==============定時刪除一周前的日誌================
oneweekago=date -d "1 weeks ago" "+%Y-%m-%d"
pwatimestamp=echo `date -d "1 weeks ago" "+%s"`#時間戳
#代碼
#!/bin/bash
logdir='/home/logs'
pwatimestamp=echo `date -d "1 weeks ago" "+%s"`#時間戳
for i in `ls $logdir`
do
logdate=`basename $i .log`
ldtimestamp=`date -d "$logdate" "+%s"`
if [ $ldtimestamp -le $pwatimestamp ]
then
rm -rf ${logdir}$i
fi
done

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本系列將分析ASP.NET Core運行原理 "【ASP.NET Core】運行原理(1):創建WebHost" "【ASP.NET Core】運行原理(2):啟動WebHost" "【ASP.NET Core】運行原理(3):認證" 【ASP.NET Core】運行原理(4):授權 在認證階段通過 ...
  • 前兩天在博客園看到 .NET開發一個微信跳一跳輔助程式, 原來可以通過C#連接手機操作。正好朋友圈有人分享“沖頂大會”。沖頂大會是一個線上答題APP。每次12道題,每道題有10秒鐘的答題時間,全對者瓜分1萬或10萬獎金。於是試著答了一次,大部分題目都不算難,即便不知道但通過關鍵詞搜索應該也很容易找到 ...
  • Unity除了一些基本的數據類型,幾乎所有的API都不能在非unity線程中調用,如果項目中有一段很耗時操作,unity可能會出現“假死”。如果這段操作是和unity無關的,我們可以把這個耗時的操作放到子線程中去運行,防止unity假死提高性能,如下麵這個偽代碼 必須保證LoadLocalFile( ...
  • 每次更新、發佈新的dll到Nuget,都好煩,煩命令行的各種操作,今天就寫一個WinForm小工具來發佈自己的項目到Nuget: 由於此工具沒啥技術含量(所調用的DLL已封裝併發布到Nuget,可以在VSNuget包管理器搜索Gaofajin),故此處就不貼代碼。,代碼在附件中打包上傳! https ...
  • 最近在做mvc5的練習 ,結果到了資料庫連接這一階段就出現了問題,開始我以為<add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies ...
  • 假設你想在Linux Nginx中用不同的功能變數名稱訪問不同的目錄,這時就要配置多個vhost,具體配置如下,假設網站根目錄設定在/var/www/ 1、在/var/www/下新建兩個目錄 2、編輯/etc/nginx/nginx.conf 3、在/etc/nginx/conf.d下新建兩個conf文件, ...
  • 一、find命令的好處 有時會經常在目錄下找文件或目錄的具體存放在哪,但是該目錄下的文件又很多不好找出。這時並不需要手動查看所有的文件,用find命令來幫助查找就行了。所以文件或目錄一定歸好類,存放有序,這樣找起來會方便許多。如果遇到網路高峰期,儘量少用find命令,網路高峰期查找會慢許多。 二、f ...
  • 一. 系統休眠(crontab) 示例說明(創建一個 root 定時任務實現每天晚上 11 點 15 分定時關機): 示例說明(僅在周一至周五運行) 另外可以直接在/etc/crontab文件中添加定時服務 二. 喚醒(Wake-On-LAN) 1. 查看是否直接Wake-On-LAN和開啟,必須支 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...