作者:Grey
原文地址:Linux學習筆記
檔案系統

除了/boot的資料,其他目錄下的資料都存在了sda3里面了
/var 可變化的檔案,比如:日志檔案,資料檔案
更多檔案型別說明見:

## 級聯創建目錄
mkdir -p a/adir/bdir
mkdir a/adir a/bdir a/cdir
mkdir a/{1,2,3}dir
## 復制檔案夾
## 將a檔案夾復制到cpp檔案夾中,復制檔案夾用
cp -r a cpp/
stat和touch 組合使用,可以增量監控資料改變的時間 linux命令系列 stat & touch
?
掛載/卸載
/boot目錄的加載和卸載
在/下:
umount /dev/sda1
mount /dev/sda1 /boot
掛載實驗
演示塊設備
# 生成100m的空img檔案
# dd命令可以用于硬碟的互相拷貝
dd if=/dev/zero of=mydisk.img bs=1048576 count=100
losetup /dev/loop0 mydisk.img
mke2fs /dev/loop0
mkdir /mnt/myos
mount -t ext2 /dev/loop0 /mnt/myos
# 搜索一下bash的位置 whereis bash
mkdir /mnt/myos/bin
cd /mnt/myos
cp /bin/bash /bin
cd /mnt/myos/bin
# 查看bash需要的依賴
ldd bash
# linux-vdso.so.1 (0x00007ffe0413d000)
# libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007fa608cb0000)
# libdl.so.2 => /lib64/libdl.so.2 (0x00007fa608aac000)
# libc.so.6 => /lib64/libc.so.6 (0x00007fa6086e9000)
# /lib64/ld-linux-x86-64.so.2 (0x00007fa6091fb000)
cd /mnt/myos
mkdir lib64
cp /lib64/{libtinfo.so.6,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} ./lib64/
chroot ./
echo "d" > /abc.txt
檔案描述符實驗
https://blog.csdn.net/qq_31186123/article/details/82190776
# 創建一個檔案,寫入一些內容
vi abc.txt
# 寫入如下內容:
dfasdfasdfasdfa1
asdfasdfasd2
sadfasdfasd3
# 將abc.txt讀入fd4
exec 4< abc.txt
# 查看當前行程所有檔案描述符
[root@sec fd]# ll /proc/$$/fd
....
lr-x------. 1 root root 64 May 18 10:11 4 -> /root/abc.txt
[root@sec fd]# lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
....
bash 1719 root 4r REG 253,0 43 33576569 /root/abc.txt
....
# 將abc.txt第一行讀出來
[root@sec fd]# read a 0<& 4
[root@sec fd]# echo $a
dfasdfasdfasdfa1
檔案偏移量實驗
每個行程的偏移量互不影響,每個fd會單獨維護一個seek(指標)
# 查看檔案偏移量
# 一開始偏移量:0t17
[root@sec fd]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1719 root 4r REG 253,0 0t17 33576569 /root/abc.txt
....
# 重新打開一個
# 偏移量0t0
[root@sec fd]# exec 4< /root/abc.txt
[root@sec fd]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1719 root 4r REG 253,0 0t0 33576572 /root/abc.txt
....
模擬socket實驗
[root@sec fd]# echo $$
1719
[root@sec fd]# cd /proc/1719/fd
[root@sec fd]# exec 8<> /dev/tcp/www.baidu.com/80
[root@sec fd]# ll
total 0
....
lrwx------. 1 root root 64 May 18 10:11 8 -> 'socket:[32794]'
[root@sec fd]# lsof -op $$
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
....
bash 1719 root 8u IPv4 32794 0t0 TCP sec:55974->183.232.231.174:http (ESTABLISHED)
....
重定向運算子
[root@sec ~]# ls ./
abc.txt anaconda-ks.cfg
[root@sec ~]# ls ./ 1> ~/ls.out
[root@sec ~]# ll
total 12
-rw-r--r--. 1 root root 80 May 18 10:18 abc.txt
-rw-------. 1 root root 1060 Apr 20 17:15 anaconda-ks.cfg
-rw-r--r--. 1 root root 31 May 18 10:34 ls.out
[root@sec ~]# cat ls.out
abc.txt
anaconda-ks.cfg
ls.out
[root@sec ~]# cat 0< ls.out 1>cat.out
[root@sec ~]# cat cat.out
abc.txt
anaconda-ks.cfg
ls.out
# 覆寫操作
[root@sec ~]# read a
fasdfasdfasdfas
[root@sec ~]# echo $a
fasdfasdfasdfas
[root@sec ~]# read a 0< cat.out
[root@sec ~]# echo $a
abc.txt
標準輸入輸出,錯誤輸出
# 由于asdfasdfasdf目錄不存在,所以執行ls會報錯
[root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out
ls: cannot access '/asdfasdfasdf': No such file or directory
[root@sec ~]# cat ls01.out
./:
abc.txt
anaconda-ks.cfg
cat.out
ls01.out
ls.out
# 如果要保存錯誤資訊
[root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out 2>ls03.out
[root@sec ~]# cat ls03.out
ls: cannot access '/asdfasdfasdf': No such file or directory
# 或者這樣
[root@sec ~]# ls ./ /asdfasdfasdf 1> ls04.out 2>& 1
[root@sec ~]# cat ls04.out
ls: cannot access '/asdfasdfasdf': No such file or directory
./:
a
abc.txt
anaconda-ks.cfg
cat.out
ls01.out
ls02.out
ls03.out
ls04.out
ls.out
管道
# 查詢第五行[root@sec ~]# head -5 abc.txt | tail -1d123
父子行程
[root@sec ~]# echo $$1719[root@sec ~]# /bin/bash[root@sec ~]# echo $$1824# pstree,安裝:yum install psmisc -y [root@sec ~]# pstreesystemd─┬─NetworkManager───2*[{NetworkManager}] ├─auditd───{auditd} ├─crond ├─dbus-daemon───{dbus-daemon} ├─firewalld───{firewalld} ├─login───bash ├─polkitd───5*[{polkitd}] ├─rngd───{rngd} ├─sshd───sshd───sshd───bash───bash───pstree ├─sssd─┬─sssd_be │ └─sssd_nss ├─systemd───(sd-pam) ├─systemd-journal ├─systemd-logind ├─systemd-udevd └─tuned───3*[{tuned}] # 父子行程的資料是無法互相訪問的[root@sec ~]# x=100[root@sec ~]# echo $x100[root@sec ~]# exitexit[root@sec ~]# echo $x[root@sec ~]# a=1[root@sec ~]# echo $a1[root@sec ~]# { a=9 ; echo "dassdf"; } | catdassdf[root@sec ~]# echo $a1# $$ 和 $BASHPID 優先級 , $$ 優先級高, $BASHPID 優先級低[root@sec ~]# echo $$2163[root@sec ~]# echo $$ | cat2163[root@sec ~]# echo $BASHPID | cat2191# 如果父子行程資料互相訪問,需要用export[root@sec ~]# a=10[root@sec ~]# export a[root@sec ~]# /bin/bash[root@sec ~]# echo $a10
永久關閉SELinux的方法
vim /etc/selinux/config
把SELinux設定為disabled

配置ssh密鑰連接Linux
首先Win10系統上需要有OpenSSH,像這樣:終端輸入ssh

這樣就是有的(好像Win10 1809+默認就是有的),
然后生成密鑰對:
ssh-keygen -t rsa
接著按提示資訊可根據個人需求選擇,這里是默認(連續三個回車即可),
生成的密鑰對默認保存在當前用戶的根目錄下的.ssh目錄中(C:\Users\username.ssh):

接著我們將公鑰id_rsa.pub上傳至Linux服務器(保存到你要連接的用戶根目錄下~/.ssh/中,沒有.ssh目錄則創建):
修改/etc/ssh/sshd_config配制檔案,修改以下內容
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
上傳好后,將Linux中的id_rsa.pub重命名為authorized_keys,更改檔案權限為600,更改.ssh目錄權限為700:
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
chmod 700 .ssh
然后就可以通過ssh方式連接到Linux

Linux的命令
分為內部命令和外部命令 內部命令(Shell自帶的命令)

外部命令(不是Shell自帶的命令,由用戶安裝的)

查看命令是一個什么型別的檔案

查看ifconfig命令在哪個位置
whereis ifconfig
什么是Shell? bash shell,就是一個程式,就是Linux系統安裝的一個軟體
root/密碼寫對后,直接進入bash shell軟體


echo $PATH

內部命令的幫助用help指令,外部命令的幫助用man指令
echo $$: 當前bash shell的行程號
如果平時退出不了某個程式,可以復制一個ssh對話,用ps -ef找到那個行程,用kill -9 退出即可
bash shell在執行命令的時候,做了兩步優化:
- 通過PATH來
- 通過hash來,hash查看,hash -r(清空hash)
Shell
撰寫腳本時候要賦予該檔案執行權限chmod u+rx filename
如果bash執行,不需要賦予執行權限
bash ./filename.sh
./filename.sh
以上兩種執行方式都是新開一個行程
source ./filename.sh
.filename.sh
這種方式執行不會產生新的子行程
#!/bin/bash/cd /tmppwd
輸入重定向符號 <
read var < /path/to/a/file
輸出重定向 > >> 2> &>
echo 123 > /path/to/a/file 清空輸入
echo 123 >> /path/to/a/file 追加
echo 12343 2> /path/to/a/file 錯誤輸入
echo 122 &> /path/to/a/file 全部輸入
#!/bin/bashcat > /data/m.sh << EOFecho "hello bash"EOF
變數賦值
- a=123
- let a=10+2
- l=ls
- letc=$(ls -l /etc) 或 letc=
ls -l /etc - 變數值有空格等特殊字符可以包括在"" 或 ``中
- echo ${變數名} 查看變數的值
變數的默認作用范圍
默認自己的shell行程中
變數的匯出,讓子行程獲得父行程的變數值
- export 變數名
變數的洗掉 - unset 變數名
環境變數:每個Shell打開都可以獲得的變數
-
set和env命令
-
$? 上一條命令是否正確執行(正確:0, 錯誤:1)
-
$PATH
-
$PS1
位置變數
- $1 $2 ... $n
#!/bin/bash# $1 $2 ...$9 ${10}echo $1# 默認列印第二個引數值,如果為空則顯示_echo ${2-_}
環境變陣列態檔所在目錄
- /etc/profile
- /etc/profile.d/
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
說明:/etc/下的組態檔,表示所有用戶通用的配置,用戶家目錄的組態檔只能特定用戶使用,
su - 用戶名 login shell 所有都可以執行
su 用戶名 nologin shell /bashrc, /etc/bashrc
所用終端都應用新的環境變數: export PATH=$PATH:/new/to/path
讓環境變數立即生效:source /etc/profile
定義陣列
# 陣列定義IPTS=(10.0 1.0 3.0)# 顯示陣列中所有元素echo ${IPTS[@]}#顯示陣列元素個數echo ${#IPTS[@]}顯示陣列的第一個元素echo ${IPTS[0]}
Q:
- 內建命令不需要創建子行程
- 內建命令對當前shell有效
stat && touch命令
https://www.cnblogs.com/z-joshua/p/10042681.html
命令積累
與時間服務器上的時間同步
- 安裝ntpdate工具
yum -y install ntp ntpdate
- 設定時間為阿里服務器的時間
ntpdate ntp1.aliyun.com
- 將系統時間寫入硬體時間
hwclock –systohc
一屏可以顯示的檔案,可以用cat 一屏顯示不出來的內容,用more命令,space翻頁,無法回看 使用less 命令就可以往后推(space),按b鍵往前翻(less是將檔案一次性load記憶體,所以檔案大的時候只能用more)
head -n 檔案名 前n行的資料 tail -n 檔案名 后n行資料 tail -f 檔案名 監控檔案內容改變
管道命令 cat xxx | head -3 cat xxx作為輸出流的形式作為后面命令的輸入流
ls -l 無法接受前面的輸出流的內容,如果要解決,需要這樣用: echo "/" | xargs ls -l
head -5 xxx | tail -1 獲取第五行的資料
screen -S yourname ## 新建一個叫yourname的session
screen -ls ## 列出當前所有的session
screen -r yourname ## 回到yourname這個session
screen -d yourname ## 遠程detach某個session
screen -d -r yourname ## 結束當前session并回到yourname這個session
硬連接
ln /data/x.txt /data/b.txt
stat x.txt
stat b.txt
Innode號一致
修改任何一個,另外一個都可以同步修改
刪掉任何一個,不會影響另外那個
軟連接
ln -s /data/x.txt /data/b.txt
Innode號不一致
刪掉x.txt個,b.txt的鏈接會丟失
拒絕用戶登錄
Linux用戶管理之使用/bin/false和/usr/sbin/nologin拒絕用戶登錄及其功能分析(轉)
參考資料
Linux命令列大全
Linux就該這么學
Linux預習資料 提取碼:7w30
CentOS6.x升級到CentOS7.x的注意事項視頻 提取碼: yhfd
Linux內核設計與實作
極客時間-Linux實戰技能100講
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/299825.html
標籤:其他
上一篇:k8s 常用命令
下一篇:Linux 配置Java環境變數
