Linux命令行与shell脚本编程大全学习(linux命令行部分)

第一章 初识Linux shell

第二章 走进shell

第三章 基本的bash shell命令

  • cd
  • pwd:显示出shell当前目录
  • ls -F -R -l
  • *和?和[ ]和[ a - i ]和!可以作为元字符通配符
  • touch
  • cp -i -R
  • 制表键自动补全
  • 硬链接和符号链接(ln -s)
  • mv -i
  • rm -i -r -f
  • mkdir -p
  • rmdir:只能在文件夹为空的时候才能删除
  • tree
  • file
  • cat -n -b -T
  • more
  • less:more的升级版
  • tail -n 2
  • head -n 2

第四章 更多的bash shell命令

  • ps -ef… 有一个ps-forest挺有意思
  • top:动态显示进程
  • kill -s(支持其他信号):不过kill只能接进程的pid
  • killall:可以接进程名称
  • mount
  • umount
  • df:查看所有已挂载的磁盘的使用情况
  • du:显示特定目录的磁盘使用情况
  • sort:以行排序
  • grep
  • gzip;gzcat(我用的时候要zcat);gunzip实现对单个文件的压缩
  • tar

第五章 理解shell

  • shell不单单是一种CLI,是一个时刻都在运行的复杂交互式程序
  • 存在默认的交互shell和默认的系统shell(用于那些需要在启动时使用的系统shell脚本),ubuntu的前者为bash后者为dash
  • 启动子shell:如bash,然后可以随时exit
  • 进程列表:在()里的一串命令,用;分割,如(sleep 2 ;echo $BASH_SUBSHELL;sleep 10);进程列表使得生成了一个子shell来执行对应的命令
  • 后台模式:(sleep 2 ;echo $BASH_SUBSHELL;sleep 10)&,多加一个&就行
  • jobs -l
  • 协程:coproc sleep 10 (没建立子shell)coproc my_job{ sleep 10; }(建立子shell):作用是在后台建立一个子shell,并在这个shell中执行命令
  • coproc(sleep 2 ;echo $BASH_SUBSHELL;sleep 10)这种复合用法会产生嵌套的子shell(我测试发现好像只额外建了一个shell)
  • shell的外部命令:如ps,需要创建出一个子进程(衍生forking)
  • shell的内建命令:如cd,exit,alias不需要借助外部程序文件来运行,速度快,执行效率高
  • type -a echo 查看echo命令是外部还是内建
  • which:查看命令位置(只能查到外部的)
  • history -a
  • alias -p 和alias ll = ‘ls -alF’

第六章 使用Linux环境变量

  • 全局环境变量(能传到所有子shell里);局部环境变量
  • my_var=hello
  • echo $my_var
  • export my_var
  • unset my_var
  • 一般情况用到变量加$,操作不加
  • 在shell输入外部命令:在PATH里找,用:分割;添加PATH=$PATH:/home/christine
  • 登陆shell:/etc/profile和其他四个文件作为启动文件;第一个文件又会调用/etc/profile.d目录下的所有文件;剩下的所有$HOME目录下的启动文件的作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量 ; $HOME/.bash_profile或 $HOME/.profile会调用 $HOME/.bashrc
  • 交互式shell:不是登陆系统时启动的(如命令行提示符下输bash):它不会访问/etc/profile文件,只会检查$HOME/.bashrc
  • 非交互式shell:系统运行shell脚本用的shell;BASH_ENV来查看他的启动文件
  • 数组变量:mytest=(1 2 3 4 5)
  • echo $mytest
  • echo $(mytest[2]) echo $(mytest[*])
  • mytest[2]=6 unset mytest[2] unset mytest

第七章 理解Linux文件权限

  • root的UID:0
  • 系统账户:系统上运行的各种服务进程访问资源用的特殊账户,所有运行在后台的服务都需要用一个系统用户账户登陆到Linux系统上
  • /etc/passwd /etc/shadow(有加密的密码和关于密码的日期那些东西)
  • useradd -D(查看默认参数) -m(可以创建其HOME目录,并将/etc/skel目录中的文件复制过来) useradd -D -s /bin/tsh(改变默认shell)
  • userdel -r(会删除对应的HOME目录和邮件目录)否则不会删除系统中属于该账户的任何文件
  • usermod -g -G(前者还改变了默认用户组)
  • passwd chpasswd
  • chsh chfn chage
  • /etc/group 当一个用户在/etc/passwd文件中指定某个组为默认组时,用户账户不会作为该组成员再出现在/etc/group中
  • groupadd 如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,此时组关系的更改才会生效
  • groupmod
  • umask umask 022 文件的全权限值:666;目录的全权限制:777
  • chmod 760 newfile 或者符号模式下指定权限的格式:chmod o+r newfile
  • chown options owner[.group] file 如chown dan newfile
  • chgrp
  • SUID;SGID;SBIT:详细描述

第八章 管理文件系统

  • fdisk
  • 这章具体看鸟哥吧,鸟哥细
  • sudo mkfs.ext4 /dev/sdb1
  • mount
  • fsck
  • LVM相关问题:逻辑卷管理器

第九章 安装软件程序

  • aptitude是完整的软件包管理系统;dpkg是软件包管理系统工具
  • aptitude show package_name dpkg -L --search package_name(得到所有跟某个软件包相关的所有文件列表)
  • aptitude search(install remove purge) wine
  • aptitude safe-upgrade
  • 另一种yum
  • 直接从源码中下载安装

第十章 使用编辑器

  • 很多种编辑器

1.前置

1.MAC,Linux都是由Unix系统发展而来的,而Windows不是Unix系统

2.CLI(command line interface):命令行界面 CLI是shell的一部分

2.linux基本命令

1.man,–help

直接man+指令,获取bash手册

eg: man ls

bash手册分为很多方面的内容,man默认只查询第一部分内容(可执行程序或shell命令)

ls --help

2.文件系统相关 cd,pwd

FHS(filesystem hierarchy standard)文件系统层级标准

每一行中$为提示符,而一开始的~代表着主目录(/home/jzy)

cd +绝对路径 或 相对路径 , 如果cd 后没接路径,则切换到~中

pwd显示当前工作目录(不包括程序名称,只是路径)

3.ls

ls -F,用以区分文件与目录

ls -a,显示所有文件包括隐藏文件(通常是配置信息,以.开头的文件,eg:.config)

ls -R,递归显示子目录下的文件

ls -l,显示详细信息

ls -i,显示inode号

组合使用:ls -alF

**ls支持过滤器(文件扩展匹配):其中?代表一个字符,*代表零或多个字符,[ai]代表a或i,[a-i]代表a-i,[!a]代表不要a **

4.touch,cp

touch file

如果没有这个名称的文件,新建一个空文件;如果已经存在,则改变文件的修改时间(不会改变文件内容)

touch -a file,只改变访问时间,access time

cp filea fileb(fileb可以是目录,也可以是文件名),cp会改变复制出的文件的修改时间

cp -i,表示确认,否则会直接覆盖

cp -R,表示递归复制,复制目录及目录中的所有内容,所有文件都有新的修改日期

cp也支持通配符

制表键自动补全:按一下tab或者两下tab

5.ln,mv,rm

符号链接(软链接,不同inode,这个文件的内容就是指向另一个文件)

eg:ln -s data_file sl_data_file

硬链接(同一inode)

eg:ln code_file hl_code_file

不同文件系统下只能用软链接

mv:移动或者重命名,不改变时间信息

mv /home/fzll /home/fall,这个改变了位置和名称

mv -i,表示确认,防止覆盖已有的文件

rm -i

rm -r,递归删除

rm -f,直接删除,不受提示符干扰

注意:rm删除的东西不会有回收站,较难找回

6.mkdir,rmdir,tree

mkdir New_dir

mkdir -p A/b/c,可以同时创建多个目录和子目录

rmdir只能删除空目录,一开始要先用rm删除其中的目录与文件

tree Dir,树形展示目录结构,需要下载tree工具

7.file,cat,more,less,tail,head

file,查看文件的类型

cat -n test1,给所有的行加上行号

cat -b test1,只给有文本的行加上行号(空行不加)

cat -T test1,不让制表符出现,用^I来替换制表符

cat缺点:只能一闪而过

more,一页一页显示,不过缺点是不能回退

less,可以上下翻,并且有查找等功能

tail -n 5 File,显示文件最后几行内容(不用等着慢慢翻),默认10行

tail -f,允许其他进程使用该文件时查看文件的内容,tail命令会保持活动状态,并不断显示添加到文件中的内容(适合看日志)

head -5 File,默认10行

8.ps,top,kill,killall,后台模式&,jobs,协程coproc,bg,fg

ps -ef,显示全部进程的完整格式输出的信息,-l可以更长格式

ps --forest,树形显示进程关系

ps的缺点:不是实时的,只能观察一刻的状态

top实时显示系统信息,包括整体信息,CPU,内存,进程信息

kill 3940,kill后跟的PID,发送TERM信号(尽可能终止)

kill -s HUP 3940,可以指定发送其他信号

killall http*,支持用进程名结束进程,支持通配符

sleep 3000&,&表示置于后台运行

jobs,显示后台进程

jobs -l,显示PID

coproc MY_JOB { sleep 10; },协程使得在后台生成一个子shell来执行命令

bg 2,对可能被已经停止的作业以后台模式重启

fg 2,对可能被已经停止的作业以前台模式重启

9.mount,umount,df,du,sort,grep

mount,不加参数会显示当前系统挂载的设备列表

mount -t type device directory,手动挂载

umount directory或者device,卸载设备

df,显示已挂载设备的磁盘使用情况,以1k-blocks为单位

df -h,用M和G代替字节

du,显示特定目录的磁盘使用情况

sort,默认按字符串比较规则进行排序,-n,按数值排序,-M,按月(可以识别月份单词)排序

sort -t ‘:’ -k 3 -n /etc/passwd,按:分割,取第三个区间进行按数值排序

grep [options] pattern [file],按行匹配

grep -v t file1,反向匹配,找不包含t的行

-n,显示行号

-c,只输出有几行匹配

grep -e t -e f file1,指定多个匹配模式

grep支持Unix风格正则表达式

而egrep(衍生)支持POSIX扩展正则表达式

grep “let’s go”,在shell脚本中向终端输出

grep -n,让文字与下面命令的输出在同一行

10.gzip,tar

gzip file,用来压缩文件,可以用通配符一次压缩多个文件

gzcat,用来查看压缩过的文本文件的内容

gunzip,解压

tar function [options] object1 object2…

tar -cvf test.tar test/ test2/ ,创建了一个归档文件(就是压缩包)

tar -tf test.tar,列出压缩包内容

tar -xvf test.tar,提取内容

11.exit与进程列表,echo

在运行/bin/bash后可以用exit退出子shell

pwd;ls;cd/etc;pwd 这样可以一行依次运行多个命令

(pwd;ls;cd/etc;pwd) 这样才是进程列表(生成了一个子shell来执行对应的命令)

echo &BASH_SUBSHELL,显示有几个子shell

12.外部命令,内建命令,which,type,history,alias

外部命令在shell之外,执行时需要创建出一个子进程(衍生)

which ps,找到这个命令的位置,只显示外部命令文件

type ps,查询命令类型(只显示第一个匹配到的)

type -a ps,给出命令所有不同的实现(有内建有外部)

history,显示最近用过的命令列表

history -a,强制刷到.bash_history文件中

!20,执行历史列表中第20行的命令

!!,执行上一条命令

alias -p,alias为内建命令,显示当前可用的别名

alias li=‘ls -li’,只能在本shell中使用别名,因为是内建命令

13.全局变量,局部变量,printenv,env,set,export,unset,数组变量,getopt

env,printenv,显示所有全局变量(一般都是大写)

env HOME,printenv HOME,显示某个变量

echo $HOME

ls H O M E ,使用时要加上 HOME,使用时要加上 HOME,使用时要加上,不过操作变量时一般不用加上$

set,显示所有变量

set – ( g e t o p t − q a b : c d " (getopt -q ab:cd " (getoptqab:cd"@"),将命令行参数替换成后面的值,而getopt可以将参数转换一下

设置局部变量:my_var=HELLO或my_var=“HELLO WORLD”

export my_var,把局部变量变成全局变量

直接在子shell中改变全局变量只对当前子shell有用,无法反映到父shell中

unset my_var,删除环境变量

PATH=$PATH:/home/jzy/scripts,把某个目录加入到PATH后面(PATH为查找命令的路径),这种只能保存到关机状态

如果想要持久化:需要把设置放在各种形式shell对应的启动文件中

mytest=(one two three four five)

echo $mytest,只会显示第一个值

echo ${mytest[2]},下标从0开始

echo ${mytest[*]}

unset mytest[2]

unset mytest

14.useradd,userdel,usermod,以及一系列ch命令

root的UID:0

/etc/passwd /etc/shadow记录了用户与密码的相关信息

useradd -D,查看新建用户的默认设置

useradd -m test,创建test用户,-m表示创建用户的HOME目录

useradd -D -s /bin/tsch,改变默认的shell属性

userdel test,只会删除/etc/passwd文件中test用户的信息

userdel -r test,也会删除用户的HOME目录与邮件目录

usermod -L,锁定用户,-l修改用户账户的登录名,-p修改账户密码,-U解除锁定让用户可以正常登录

usermod -G shared rich,-g为替换账户默认组,-G为将该组添加到用户的属组的列表中

passwd,chpasswd修改密码

chsh,改shell;chfn,改备注;chage,改账户过期时间

15.groupadd,groupmod,umask,以及另一部分ch命令

groupadd shared,创建新组

groupmod -n sharing shared,-n为改组名,-g为改GID

umask,显示默认权限 0022

文件的全权限为666,没有x

umask 026,修改默认值

chmod 760 newfile

chmod u+x newfile,改变文件权限

chown jzy.shared newfile,改变文件属主与属组

chgrp shared newfile,改变属组

当 SGID 作用于普通文件时,和 SUID 类似,在执行该文件时,如果有文件的x权限,用户将获得该文件所属组的权限。当 SGID 作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组

SBIT :目前只对目录有效,用来阻止非文件的所有者删除文件,SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和 root 才有权力删除。

16.date,who,wc,read,lsof

date,显示当前日期

date +%y%m%d,显示230706这种信息

who,显示当前都有谁登录到终端

wc,对数据中的文本进行计数,可以配合<输入重定向一起用

read name,把输入读到name变量中

read -p “Please enter your age: ” age,在同一行输入提示字体

read,直接read,会将数据放进REPLY环境变量中,一次可以读一行

read -t,设置超时时间

read -n5,就接受5个字符

read -s,隐藏输入读取

lsof -a -p $$ -d 0,1,2 列出打开的文件的有关信息,-a表示对-p与-d与布尔和运算,-p表示指定PID,$$为当前进程的PID,-d表示指定文件描述符编号

17.mktemp,tee,trap,nohup,nice,renice

mktemp test.xxxxxx,会自动生成唯一的xxxxxx,mktemp返回的值就是文件名

mktemp -t test.xxxxxx,在临时目录/tmp中创建文件,返回的是完整路径

mktemp -d dir.xxxxxx,建立临时目录

date | tee testfile,tee将date的内容同时输出到STDOUT和testfile中,不过会覆盖testfile的文件

date | tee -a testfile,加上-a就是往文件追加内容了

trap "echo ‘you r good’ " SIGINT,trap用来捕获信号并处理

trap “echo exit…” EXIT,捕获脚本退出的信号

trap对同一信号的处理在不同位置可以修改

trap – SIGINT,来移除信号的捕获,让脚本按默认行为处理信号

nohup ./test.sh &,nohup来阻断发送给该进程的SIGHUP信号(关闭终端时,发送给终端上进程的信号),并将输入输出都转到nohup.out中

nice -n 10 ./test.sh,nice可以调整进程优先级(CPU),-20~+19(高到低)

renice -n 10 -p 5055,改变已经运行进程的优先级

18.at,atq,atrm,crontab,anacron,local,source

at -f testfile time,会将正常输出和错误输出以电子邮件的形式发送,可以给它重定向,这个命令表示会定期执行一次

-M可以屏蔽作业产生的输出信息

atq,列出系统中有哪些作业在等待

atrm 18,删除指定作业号对应的作业

crontab -l,列出已有的cron时间表

crontab有hourly,daily,monthly,weekly目录

anacron会尽快运行已经错过的作业

local,在函数内用,可以生成局部变量

source /myfuncs,点操作符,引入库函数,会在当前shell上下文中执行命令,快捷别名:.

你可能感兴趣的:(linux,学习,bash)