linux 鸟哥私房菜笔记篇

用户添加删除命令篇:

useradd与adduser都是创建新的用户

在CentOs下useradd与adduser是没有区别的都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。


而在Ubuntu下useradd与adduser有所不同

1、useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。

2、adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。

userdel 删除用户,

userdel只能删除用户,并不会删除相关的目录文件。userdel -r 可以删除用户及相关目录。


gpasswd -a tom lduan #把tom用户添加到老段组

useradd bob #添加用户bob,uid,gid等都采用默认值
useradd -D  #查看默认值 默认值所在目录/etc/default/useradd

useradd -c "liushuanpeng" -s /sbin/nologin -d /home/lliu -g root -G lliu -u 1000 lliu #添加用户名及其属性


usermod -s /bin/bash lliu #更改用户lliu的shell属性
usermod -c "xxxxxx" #更改用户lliu的注释信息


passwd 用户名 #给用户名设置密码
passwd -S 用户名 #查看密码的状态
passwd -d 用户名 #删除用户名密码
passwd -S 用户名 #密码为空此时


echo 111111 | passwd --stdin lsp #给用户名lsp设置密码为111111,stdin表示标准输入
userdel -r lsp #删除用户lsp,并清除一切和该用户有关信息


chage -E 2012-12-21 tom #tom用户在该时间后过期
chage -d 2012-12-10 tom #设置tom用户最后一次更改密码时间
chage -l tom #列出tom用户的账户信息


id #查看uid gid等信息

groupadd bob #添加组
groupdel bob #删除组


gpasswd -a tom bob #将tom添加到bob组
gpasswd -d tom bob #将tom从bob组移除


问题:有四个用户,分别是:lduan,tom,bob,mary;在root目录下有一个xx文件,分别设置lduan用户对该文件具有读权限,tom对该文件具有写权限
      bob对该文件具有可执行权限,mary对该文件具有读写权限


需要用到ACL 访问工程列表

查看xx文件访问工程列表权限
getfacl xx


例如
lsp@Lenovo-IdeaPad-Y330:~$ getfacl hello
# file: hello
# owner: lsp
# group: lsp
user::rwx
group::rwx
other::r-x


setfacl -m u:tom:rw- xx #使用ACL设置tom用户对xx文件的权限为rw
setfacl -x u:tom xx #取消设置的tom用户权限


setfacl -m g:tom:rw- xx #使用ACL设置tom组对xx文件的权限为rw
setfacl -x g:tom xx #取消tom组的权限



write tom "aaaa" #向tom用户发送信息aaaa

wall广播
wall "liu" #将liu广播出去


shell script脚本篇
declare -i aa #将aa定义为整型


数字和字符比较使用不同的符号


数字 字符
-eg    ==
-gt    >
-ge    >=
-lt    <
-le    <=


aa=3
bb=4
test $aa -eq $bb
echo $?
test判断为假,输出1


[ $aa -gt $bb ]
echo $?
输出1,因为上面中括号内的判断是假


[ $aa -gt $bb ] && echo OK


if 判断语句; then
    xxxxxxx
else 判断语句; then
    yyyyyyy


例子
定义xx.sh文件
#!/bin/bash
grep -q ^$1 /etc/passwd
if [ "$?" -eq 0 ]; then
    echo "$1 存在"
else
    echo "$1 不存在"
fi


终端执行sh xx.sh lsp



#!/bin/bash
echo "请输入你的名字:"
read name
echo "欢迎你 $name"


#!/bin/bash
num=1
while [ $num ]
do

    echo 1111111111111

    sleep 5

done


#!/bin/bash
xx=0
until [[ "$xx" -gt 24 ]]
do
case $xx in 
[0-9]|1[01])
echo "上午好"
;; 
12)
echo "吃午饭"
;;
1[3-7])
echo "下午好"
;;
*)
echo "晚上好"
;;
esac
let xx+=1
done



#!/bin/bash

#case 2
case $1 in
        [Ll]s*)
                echo lsp
                ;;
        aaa | bbb)
                echo "a or b"
                ;;
        *)
                echo "all case"
                ;;
esac

#case 3
cat <<END
        1) tom
2) bob
3) mary
END
read -p "choice num: " num
case $num in
1)
echo tom
;;
2)
echo tom
;;
3)
echo mary
;;
esac


#!/bin/bash
:<<!
PS3="请选择要执行的命令"
select xx in 'ls -l' pwd date
do
$xx
done
!


echo "What is your favourite OS?"
select var in 'ls -l' pwd date cal; do
  break;
done
$var
#echo "You have selected $var"


#!/bin/bash
#for xx in value1 value2 value3
#do
    #...
#done


:<<!
for i in *
do
cp $i ${i}.bak
done
!


for i in a b c d
do
  for j in 1 2 3 4 5
    do
      echo $i$j
    done
done


bash介绍



shell是一个转译器,把我们敲的命令转译成CPU可以处理的语音,cpu处理完成后,shell在转换成我们能理解的显示。


系统shell有哪些:cat /etc/shells查看


type cd
type source
type type


cal ; date 命令之间用分号隔开


如何定义变量?


变量名=值


变量名由字母数字下划线组成
等号两边不能有空格


定义变量(本地变量,只在当前shell生效)
xx=10000
输出变量
echo $xx
取消变量
unset xx


export yy=10 定义环境变量(在所有的shell生效)
declare yyy=11 定义环境变量


declare +x yyy=11 取消环境变量


写脚本
#!/bin/bash
echo "the name of the file $0"
echo "the first parameter: $1"
echo "the second parameter: $2"
echo "the all parameters is : $#,they are : $*"


echo $PATH
echo $HOME
echo $HISTFILESIZE


env 查看环境变量
export 查看环境变量

终端命令篇


ifconfig eth0 | tee xx | grep 'inet addr'  将ifconfig eth0的结果保存到文件xx中,并过滤含有inet addr的输出


ifconfig eth0 | tee -a xx | grep 'inet addr'  将ifconfig eth0的结果保存到文件xx中,xx文件中原有内容不清空,并过滤含有inet addr的输出


选取命令 cut grep


cut -d: -f1 /etc/passwd  #c查看/ect/passwd文件中由冒号分开的第一部分
last | cut -d' ' -f1     #以空格分开last命令的执行结果,输出第一部分 
last | cut -d' ' -f1 | sort -u #sort -u表示排序并去除重复行
last | cut -d' ' -f1 | sort | uniq -c  #同上意义,-c显示重复次数


grep 关键字 file #在file中查看有关键字的行
例如: grep root /etc/passwd --color 
grep -i root /etc/passwd #-i表示忽略大小写
grep -in root /etc/passwd #-n表示输出行号


排序命令


cut -d: -f3 /etc/passwd | sort    #以字符排序
cut -d: -f3 /etc/passwd | sort -n #以数字排序
cut -d: -f3 /etc/passwd | sort -nr #以数字反向排序


sort -t: -k3 /etc/passwd #将passwd文件中使用冒号作为分隔符,将第三部分按字符形式进行排序
sort -t: -k3 /etc/passwd -n #将passwd文件中使用冒号作为分隔符,将第三部分按数字形式进行排序


wc xx.txt #显示文件中的行数,单词数,字符数,文件名


ls -1 / | wc -l  #统计/目录下的文件个数


tr 'a-z' 'A-Z' < hosts #将文件hosts中的全部小写转换成大写
tr 'a-z' 'A-Z' < hosts > xxx.txt #将转换后的文件保存到xxx.txt中


cat passwd | tr -d ':'


cut可以将一个文件切为一块一块
paste可以将一块一块的文件,结合成一个整体


将文件aa和bb的内容整合显示到屏幕
paste aa bb


split -b 10k /ect/services xxx #将services以每个10k的大小分割,分割后的文件以xxx开头
cat xxx* > services #将分割后的xxx开头的文件组合成services
diff services /etc/services




split -1 100 /ect/services xxx #将services文件按行分配,centOS中命令,ubuntu貌似不一样
split -b 12m filename xxx  #ubuntu中的命令是这样


find -name 'file*' | xargs ls -l  


vim使用命令篇


进入冒号模式(需从ESC模式,按冒号进入)
set nu命令   显示行号
set nonu命令 不显示行号
s/rhce/RHCA/  将vim打开的文件中的rhce替换为RHCA,只替换当前行的的第一个rhce
s/old/new/


s/rhce/RHCA/g  将vim打开的文件中的rhce替换为RHCA,只替换当前行的所有的rhce为RHCA


2,12s/rhce/RHCA/g  将vim打开的文件中的rhce替换为RHCA,替换2-12行的所有的rhce为RHCA
.,12s/rhce/RHCA/g  将vim打开的文件中的rhce替换为RHCA,替换当前行到12行的所有的rhce为RHCA
.,$-1s/rhce/RHCA/g  将vim打开的文件中的rhce替换为RHCA,替换当前行到倒数第二行的所有的rhce为RHCA,点表示当前行,$表示最后一行


1,$s/rhce/RHCA/g 替换全文件的rhce为RHCA
%s/rhce/RHCA/g    替换全文件的rhce为RHCA


%s/rhce//g    替换全文件的rhce为空


.,$s/^/#/g     添加注释,在所有行的前面加#,^表示行头
10,18s/^/#/g   添加注释,在10行到18行的前面加#,^表示行头
10,18s/^#//g    去掉注释#


替换文档中所有的/n为\n

:%s#/n#\\n#g

3.回车换行符\n

:%s/\\n/str/g

:%s/str/\\n/g



ESC模式(命令模式)下:


u是撤销,ctrl+r前进


2shift+g 跳到第二行
shift+gg 跳到第一行
shift+G 跳到最后一行


yy  复制当前光标所在行
4yy 复制当前行下的四行
p   粘贴
dd  删除当前行/剪切当前行
3dd 从当前行开始剪切/删除三行
r 8 当前光标位置的字符替换为8,r为replace
x   删除字符 

shift+insert #从vim复制到外面文件


进入冒号模式
sp命令 进入分屏
ctrl+w+下箭头
ctrl+w+上箭头


ctrl+v 进入可视块

vim自动排版
在命令行模式下:

1、使用“gg”将光标移动到文档开头
2、使用“v”切换到可视模式
3、再用“G”将光标移动到文档尾部(相当于全选)
4、最后使用“=”,即可完成整个文档的自动排版。



gg+=+G //先gg跳转到文件开始位置,再输入=,再输入G,vim将自动进行C和C++源码的对齐操作。

vim 2.txt 3.txt 同时打开多个文件


每次使用vim打开都显示行号

家目录下,创建.vimrc文件,写入set nu命令


正则表达式篇


. #表示一个字符
grep 't.m' passwd --color  #查找passwd文件中,符合t和m之间有一个字符的


grep 't..m' passwd --color  #查找passwd文件中,符合t和m之间有两个字符的


grep '[tT].m' passwd --color


grep '^tom' passwd --color  #查找开头为tom的,^表示开头,\<也表示开头


grep 'tom$' passwd --color  #查找结尾为tom的,$表示结尾,\>也表示结尾


sed工具
sed '1,2d' hosts #删除hosts文件中的第一行和第二行 结果显示在屏幕上
sed -i '1,2d' hosts #删除hosts文件中的第一行和第二行,结果更新到hosts文件内
sed '$d' hosts #删除最后一行
sed 's/root/ROOT/g' hosts #将hosts文件中的所有的root替换为ROOT,同时将bin换为BIN
sed -e 's/root/ROOT/g' -e 's/bin/BIN/g' hosts #将hosts文件中的所有的root替换为ROOT
sed '/adm/ixxxxxxxxxxxxxxxxxxx' xx #xx文件中含有adm的上一行添加一行,内容为xxxxxxxxxxxxxxxxxxx
sed '/adm/axxxxxxxxxxxxxxxxxxx' xx #xx文件中含有adm的下一行添加一行,内容为xxxxxxxxxxxxxxxxxxx
sed '/adm/cxxxxxxxxxxxxxxxxxxx' xx #将xx文件中含有adm的行替换为xxxxxxxxxxxxxxxxxxx


可以将上述命令写入的文件yy中,然后执行
sed -f yy xx #对xx文件执行yy文件中命令


awk:好用的数据处理工具
可以从一个文档中,找出想要的部分内容,然后重新排版
awk -F分隔符 #默认分隔符为空格
awk '条件{操作}' 文件名  #不写条件的话,默认为全文
例如
awk -F: '{print $0}' hosts


ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}' #取出ip地址
awk -F: '$3<=3 {printf $1}' hosts #$3字段小于等于3的行对应的$1
awk -F: 'BEGIN{OFS="\t\t"; ORS="\n"}{print $1,$2}' hosts #OFS表示字段之间分隔符,ORS表示行之间分隔符


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值