Linux常用命令复习

help   # 学习的关键;help直接回车就是显示所有内部命令
eg: ls --help
type  # 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
    -t:输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
file  文件名 # 辨识该文件的类型。ELF为二进制编码文件,是不是可执行文件。windows右键属性。
yum install man man-pages  # 通过yum安装man,操作手册man-pages
ps -fe # 查看进程,静止的
pstree # 多任务目录查看,两个bash代表两个用户
whereis # 定位命令位置
man utf-8  # 帮助信息  # man ascll;man 2 read  
man wc
df # 磁盘空间与分区;
df -h  # sda3 根级目录的第三个分区,Windows是cdef,h代表human,人类可读的
useradd #添加用户。添加的用户归属于/ 目录,如果有个用户把内存占满了,可以让该用户的目录指向新加的硬盘。
umount /boot # 卸载boot目录的挂载
mount /dev/sda1 /boot # 挂载
du -sh ./*   # s代表汇总,h代表人类可读取的   
# du命令是对文件和目录磁盘使用的空间的查看
ll
ls -la # 呈现列表的形式l, a代表所有的,i node号-磁盘位置。*****短的化可以两个一块*****;ls -l -ascll码才是最原始的,
ls --help  # 长字符
ls -l ./a* # 显示名称含a的文件
ls -l ./a?? # 显示名称含a的文件,?单个任意字符(正则表达式:[^12]取反)
ls -l /etc | grep "init"
cd # 回家
cd - # 上一次路径
cd .. # 上一级目录,. 当前目录
cd ~ # 家目录
cd ~用户名 # 回用户家;
clear
pwd
mkdir -p ./x/y/z/c/# 深度创建目录
mkdir -p ./x/{x,y,z}/ # 深度之后广度创建目录
rm -rf # f强制删除、r递归删除、rm -rf / 有点会提示危险,有的没有,
rm -rf ./* # 删除当前目录所有文件
cp 文件 目录/文件  # cp /etc/{profile,init/inittab} ~
ln -s 文件 软连接 # 删除原始文件会提示错;
ln 文件 硬连接;# 两个变量指向了同一存储位置
stat 文件 # 查看文件的描述性数据  ->  元数据:数据的描述性数据;
chmod +x 文件名 # 权限修改 chmod [u g o a] [+ -] [x w r] 
touch 文件 # 把文件刷新成当前时间点;可以触发事件;
touch 文件名 # 创建一个文件
cat 文件 # 读取文件并输出到shell

more 文件 # 读取文件并输出到shell,分屏显示后等你输入回车显示更多

 less 文件 # 读取文件并输出到shell,分屏显示后等你输入回车显示更多,b回看

 head -行数 文件 # 截取文件前面n行
 tail -行数 文件 # 截取文件后面n行

 head -i | tail -1 # 组合:读取第i行

echo "hello world"  # 显示字符串到屏幕
echo $$  # 显示当前使用的进程id;
echo -n "hello world" # 只换行,不回车
echo $PATH  #查看PATH
tail -f 文件名 # 阻塞,可以另外打卡一个窗口 echo "hello world" 1>> 文件名
管道 head -3 文件 | tail -1  # 截取文件中间的多少行,基于文本流的加工方式
     ls -l /etc | more  # 衔接前面的输出和输入流,管道前后各是可以解析的字符串
     echo "/" | xargs ls -l  # xargs
vi +行号 文件名 # 排错
vi + 文件名 # 定位最后一行
vi + /字符串 文件名 # 打开 查找
grep -v 字符串 文件名  # 不含字符串的行
grep "\<xxoo\>" 文件名 # 查找含xxoo的行
grep "^xxoo" 文件名 # 查找开头含xxoo的行
grep "^xxoo\>" 文件名 # 查找开头含xxoo单词的行
grep "xx[0-9]oo" 文件名 # 查找:xx数字oo
grep "xx[0-9]\+oo" 文件名 # 查找:xx多数字oo
grep "xx[0-9]\{4\}oo" 文件名 # 查找:xx4个数字oo
grep "xxoo.*ooxx" 文件名 # 查找:xxoo任意字符xxoo
grep "\(xx\)\(oo\).*\1\2" 文件名 # 查找:xxoo任意字符xxoo
cut -d' ' -s -f1,3 文件名 # 以空格切割,显示第一三列; -s 成功切割; 1到3表示为1-3;
cat 文件名 | cut -d' ' -s -f1-3
sort -t' ' -k2 -nr 文件名 # 以空格切割,以第2列数值(-n)倒叙(r)排序
wc -l 文件 # wordcount
cat sort.txt | wc -l #统计文件行数
sed "1a\hello world" 文件名 # 给文件在1行后追加hello world,会输出到屏幕,源文件不会变;
sed -i "1a\hello world" 文件名 # 给文件在1行后追加hello world,会输出文件;
sed -i "2d" 文件名 # 删除文件第2行
sed -i "/apple/d" 文件名 # 删除文件中含apple的行
sed -i "s@hello@nihao@" 文件名 # 查找hello换成nihao
sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab # 查找id:x:initdefault: x换成5;  查找该替换的替换,不替换的不管
awk -F':' '{ print $1}' 文件名 #打印第一列,以:作为分隔符切割
awk -F':' '{ print $1 "," $7}' 文件名 # 以逗号分割
awk -F':' '{ print $1 "\t" $7}' 文件名 # 以制表符分割
awk -F':' 'BEGIN{ print "name\tshell"} { print $1 "\t" $7} END{ print "blue\tnosh"}' 文件名 # 以制表符分割,开头和结尾分别有标志
# 数据
awk.txt
Tom        0    2012-12-11    car        3000
John    1    2013-01-13    bike    1000
vivi    1    2013-01-18    car        2800
Tom        0    2013-01-20    car        2500
John    1    2013-01-28    bike    3500

# 案例1 统计每个员工1月份的工资合计
# 输入
awk '{split($3,date,"-");if(date[2]=="01"){ name[$1]+=$5}} END{for(i in name){print i"\t"name[i]}}' awk.txt  # $3第三列
# 输出
vivi    2800
Tom        2500
John    4500

cut -d':' -f1,7 文件名 | sed "1i\name:shell"
cut -d':' -s -f1 文件名 # 打印第一列
sxt=100  # 变量定义
echo "$sxt" # 输出100
echo '$sxt' # 单引号可以组织字符串扩展,就是编译解释;输出$sxt
useradd sxt01  # 添加用户
useradd sxt02  # 添加用户
passwd  # 给root用户改密码
passwd sxt01 # 给用户sxt01设置密码
ssh 用户名@ip  # 登录 $


# 用户、资源、权限设置
# 1. 添加组
groupadd sharesxt
id sxt01
usermod -a -G sharesxt sxt01  # a追加、G组
id sxt01
usermod -a -G sharesxt sxt02
id sxt02
# 2. 修改文件
chown root:sharesxt sxtshare/ # change owner; sxtshare目录; 用户:组
chmod g+w sxtshare/ # u g o a +/- rwx
chmod o+rx sxtshare/  # 重新登录刷新权限

su sxt02 # switch user
chown sxt01:sharesxt 文件名 # 将文件的拥有者设置为sxt01,群体的使用者是sharesxt
# install tar.gz
tar xf 文件名.tar.gz  # x撕毁,f文件。解压后会有一个Makefile
# 打开README,Installation
./configure --help | more
./configure --prefix=/opt/sxt/nginx # 安装到/opt/sxt/nginx
yum install gcc  # 安装c编译环境,会补充缺失东西
yum search pcre  # 查询yum库有没有pcre
yum install pcre-devel
# /install 查找install
make
make install
cd /opt/sxt/nginx/sbin 
./nginx
192.168.9.21:80
# install rpm
rpm -ivh 文件名.rpm # i安装,vh详细信息;
rpm -qa | more  # 查询已经安装的所有包
rpm -qa | grep "jdk"  # 过滤;例如jdk的java和javac
whereis ifconfig
mv /sbin/ifconfig /tmp
ifconfig
rpm -qf /sbin/ifconfig  # 查询/sbin/ifconfig是由于那个包产生的(追根溯源)
mv /tmp /sbin/ifconfig 
umount /mnt  # 卸挂载
mount /dev/cdrom /mnt  # 挂载  /dev/cdrom 光盘,  /mnt目录
ls -l | wc -l  # 算下当前目录有多少个文件
ls -l httpd*  # httpd开头的文件
yum install wget  #https://mirrors.163.com/ 帮助
yum clearn all # 清除
yum makecache  # 同步元数据信息
yum repolist # 显示有的仓库
yum update # 更新
yum list | more  # 罗列
# 中文支持;
yum grouplist | more
yum groupinstall "Chinese Support"  # 空白符敏感
echo $LANG
LANG=zh_CN.UTF-8  # 中文文档
# https://developer.aliyun.com/mirror/
# epel

yum groupinstall "Eclipse"

 

# 输入与输出重定向
cd /proc/$$/fd #启动后会有 pwd ps -fe | grep nginx # 进程状态,查nginx # 每个程序都有基本的流0 1 2(文件描述符);0:输入,1:标准输出,2:错误输出; # 输出 # 覆盖重定向 ls -l / 1>ls.txt # > :重定向; # 追加重定向 ls -l / 1>>ls.txt # > :重定向; # 错误输出 ls -l /god 2>ls.txt # 没有/god # 两者都有 ls -l / /god 1>ls03.txt 2>ls04.txt # 不同文件 ls -l / /god 1>>ls05.txt 2>>ls05.txt # 相同文件 ls -l / /god 1> ls06.txt 2>& 1 # 1指向文件,2指向1;文件描述符可以互相指向 ls -l / /god >& ls08.txt # 特殊写法 ls -l / /god &> ls09.txt # 特殊写法 history # 显示历史命令 # 文件描述符(1)重定向操作符(>)文件(ls.txt) # 输入 read sxt # 打开输入阻塞,接收输入的字符到sxt直到出现换行符; echo $sxt read 0<<<"hello" read sxt 0<<<"hello" echo $sxt read sxt 0<<XXOO dada fsgfsdg daffgg XXOO echo $sxt # 输出daffgg # 输出一些东西 vi h.txt # 写入 { echo "hello" echo "nihao" echo "byebye" ls cat 0<<OOXX hello nihao byebye OOXX } # 推荐这个 source h.txt cat 0< h.txt # 打印百度:模拟浏览器方法,Http协议属于7层协议,后面还有个4层协议 # 1. 建立链接:Secoke描述上打开文件->流 help exec exec ls -l # pstree查看是否是一个bash。 cd /proc/$$/fd # 查看当前的进程 exec 8<> /dev/tcp/www.baidu.com/ # 多了一个8,建立了一个链接与8号文件描述符打通了 echo -e "GET / HTTP/1.0\n" echo -e "GET / HTTP/1.0\n" 1>& 8 cat 0<& 8 # 考验手速
# shell及脚本的执行方式
sxt =100
echo $sxt
type source
bash # bash 是一个程序,可以单独启动一个bash

# 编写一个文件file.txt
{
#!/bin/bash    # 这个是写的对应的解释器
echo "hello.txt"
echo $$
echo $sxt
ls -l /
}


# 四种执行方式
[1] source file.txt  
[2] . file.txt 
[3] bash file.txt
[4] chmod +x file.txt  # x代表执行,绿色; 
./file.txt
# 区别,[1,2]是当前的bash,[3,4]是新bash

# 变量
sxt =100
echo $sxt

# 方法或函数:一切皆命令;命令有内部命令,外部命令(执行程序、脚本、文本、函数方法)
sxt01(){
echo "hello.txt"
echo $$
echo $sxt
ls -l /
}
sxt01
type sxt01
# 变量
#
local变量 sxt(){ local sxt1=100 echo $sxt1 } sxt # 打印100 echo $sxt1 # 打印空,因为local变量只在函数内有效 vi h1.txt # 写入 { echo $# #参数个数 echo $* #参数列表 echo $@ #参数列表 echo $$ #当前进程pid echo $BASHPID #当前进程pid;管道|两边会触发子进程,两个bash;$$优先级比|高 echo ${1} echo ${2} echo ${11} } . sh01.sh 1 2 3 4 5 6 7 8 9 0 a b c sxt="sxt" echo {sxt}good ls -l # 执行正确 echo $? # 0 每个命令完成都有个退出状态,$?取出上一个命令的退出状态,0成功,非0错误 ls /god echo $? # 2 bash # 新建立子进程;新建立子进程后,定义的变量会消失; export sxt # 导出当前子进程数据 bash sh02.sh # 文件里边写的是 echo $sxt bash sh03.sh & # 后台运行脚本 # 引用 echo $sxt echo "$sxt" #可以替换,就是变量,命令在执行上会删除引用 echo '$sxt' # 阻止替换 # 命令替换 var01=`echo $sxt` var01=`echo $(echo $sxt)` # 退出状态 echo $? # 逻辑判断 ls -l / && echo ok ls -l /gof || echo ok # 算数表达式 a=1 b=2 ((a++)) echo $a c=$((a+b)) echo $c # 条件表达式 help test test 3 -gt 8 # >重定向操作,gt大于 echo $? # 1 test 3 -gt 2 echo $? # 0 test 3 -gt 2 && echo ok type test # shell builtin type '[' # shell builtin [ 3 -gt 2 ] && echo ok # 这个写法推荐 # 练习 # 添加用户 # 静默运行脚本 # 避免捕获用户接口 # 程序自定义输出 # 用户密码同用户名 vi userAdd.sh { #!/bin/bash [ ! $# -eq 1] && echo "args erro..." && exit 2 # 输入参数为1向下执行,写命令时候尽量用&& id $1 &> /dev/null && echo "user exist..." && exit 3 # 输出到数据黑洞 useradd $1 &> /dev/null && echo $1 | passwd --stdin $1 &> /dev/null && echo "userAdd succeed." && exit 0 echo "wo ye bu zhi dao ..." && exit 9 } chmod +x userAdd.sh ./userAdd.sh sxt03 id sxt03 su sxt03 ./userAdd.sh echo $? ./userAdd.sh sxt04 echo $? man passwd # ssh root@192.168.9.21 # bash的7步扩展?命令替换
# 流程控制
help if
if ls -l / ; then echo "ok"; else echo "no ok"; fi

help for
for ((i=0;i<10;i++)); do echo $i; done
for i in xada aff afaf; do echo $i; done
seq 3 # 输出1-3
for i in `seq 10`; do echo $i; done  # `seq 10` 将其当作命令

help while
mkdir /god
while ls -l /god; do rm -rf /god; echo "ok"; done

# 练习
# 用户给定路径
# 输出文件中最大的文件
# 递归子目录
ll
du -a
du -a | sort -nr # 使用数据排序n,倒序r
vi findMax.sh
{
#!/bin/bash

oldIFS=@IFS  #默认以空白、制表符、换行符进行切分
IFS=$'\n'    #使用换行符切割
for i in `du -a | sort -nr`; do
    echo $i
    fileName = `echo $i | awk '{print $2}'`
    if [ -f $fileName ]; then
        echo $fileName
        exit 0
    fi
done
IFS=oldIFS
}
./findMax.sh ./  # 新建shell执行
. findMax.sh ./  # 当前shell执行,会销毁当前进程,exit指代当前进程


# 练习
# 循环遍历文件每一行:流程控制语句
# -定义一个计数器num
# -打印num正好是文件行数
vi test.txt
{
a 1
b 2
c 3
}
vi test.sh
{
#!/bin/bash

echo "**************way1**************"
oldIFS=@IFS 
IFS=$'\n' 
num=0
for i in `cat test.txt`; do
    echo $i
    ((num++))   # (()) 可以免去$的使用,里边就是变量,不是字符串
done
echo num:$num
IFS=oldIFS

echo "**************way2**************"
num=0
lines=`cat test.txt | wc -l`
for ((i=1;i<=lines;i++));do
    line=`head -$i test.txt | tail -1`
    echo $line
    ((num++))
done
echo num:$num

echo "**************way3**************"
num=0
while read line; do  # read对换行符特别敏感
    echo $line
    ((num++))
done < test.txt  # 输入重定向
echo num:$num

echo "**************way4**************"  # 右边开启两次子进程
num=0  # 管道的父子进程,父子进程是导出,而非共享;
# 管道开始时候,左右两个各自启动一个子进程,将左边进程的输出作为右边进程的输入;
# 此时前面的num=0的命令执行的时候是父进程和这两个没有关系;
cat test.txt | (while read line; do 
                    echo $line
                    ((num++))
                done; echo num:$num)
                
echo "**************way5**************"  # 右边开启一次子进程
num=0  
cat test.txt | {while read line; do 
                    echo $line
                    ((num++))
                done; echo num:$num);} # 大括号最后一个命令需要;
}
./test.sh ./

vi text.sh
{
$1
$2

$*
$@

echo "------------$*----------------"
for i in "$*"; do  # $*会把参数列表作为一个元素
    echo $i
done

echo "------------$@----------------"
for i in "$*"; do  # $*会把参数列表按照空白切割
    echo $i
done
}
. text.sh a b b d e f g 

 

视频链接:https://www.bilibili.com/video/BV1Nb411P7Mf?p=23&spm_id_from=pageDriver

posted @ 2022-05-01 15:14  落月_YU  阅读(69)  评论(0编辑  收藏  举报