2、权限、变量、for 学习笔记

ls 显示目录内容,不包含以点开头的文件

ls -a           显示目录内容,包含以点开头的文件

ls -l 长格式显示目录内容

ls -d 显示目录自身的信息,通常与-l同时使用

ls -r 逆序显示目录内容

ls -R 递归显示目录内容

ls -h 以易读的方式显示文件大小,通常与-l同时使用

ls -i 显示inode信息

tree 树状形式显示目录内容

alias         显示当前shell中定义的所有别名

alias 别名=‘原始命令‘ 定义别名

unalias 别名 删除命令别名

file FILE... 查看文件内容格式

cat -E FILE 显示行结束符

cat -v FILE 显示非打印字符

cat -e FILE 相当于-vE

cat -n FILE 显示时给行按顺序编号

cat -s FILE 多个连续的空白行显示为一个空白行

head -# 显示文件顶部#行的内容

tail -# 显示文件尾部#行的内容

tail -#f 动态显示文件尾部#行的内容

echo命令的用法:

echo -e "\033[##;##m string \033[0m"

第一个#: 3表示前景色,4表示背景色

第二个#:颜色,0-7

0 黑色

1 红色

2 绿色

3 黄色

4 蓝色

5 紫色

6 天蓝

7 白色

echo -e "\033[31;42;5m LINUX \033[0m"

效果:绿底红字闪烁

通配符:

* 匹配任意长度的任意字符

? 匹配任意单个字符

[] 匹配指定字符范围内的任意单个字符

[^] 匹配指定字符范围外的任意单个字符

[:upper:]]              所有大写字母

[:lower:]] 所有小写字母

[:alpha:]] 所有字母

[:digit:]] 0-9

[:alnum:]] 0-9及所有字母

[:space:]] 所有空白字符

[:punct:]] 所有标点符号

练习:复制/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位数字的文件或目录至/tmp下

cp -r /var/1*[0-9]*[a-z] /tmp

练习:如果符合条件是目录,也要复制;

1、复制/etc目录下以p开头,中间跟了任意字符,并以d结尾的文件至/tmp目录中;

2、复制/etc/目录下以p开头,中间跟了4个任意字符,并以d结尾的文件至/tmp/a目录中;如果a不存在,先创建出来;

3、复制/etc/目录下以任意一位数字开头,并以非数字结尾的文件至/tmp/b目录中;

4、复制/etc/目录下以非字母开头,后面跟了一个字母及其它任何长度字符的文件至/tmp/c目录中;

1、cp -r /etc/p*d /tmp

2、cp -r /etc/p????d  /tmp/a

3、cp -r /etc/[0-9]*[^0-9] /tmp/b

4、cp -r /etc/[^[:alpha:]][[:alpha:]]* /tmp/c

cp命令的长用选项:

-r:递归

-d: 当源为链接文件时,复制链接文件本身而非指向的源文件

-p: 保持原有属性

mv: 移动文件,或重命名

rm: 移除文件

删除非空目录:# rm -rf

stat FILE 显示文件或文件系统信息,包含(access、modify、change时间)

touch FILE 创建空文件或修改文件时间信息

-c: 不创建空文件

-a: 仅修改访问时间

-m: 仅修改修改时间

-t STAMP: [CC]YYMMDDhhmm.ss 修改当前时间

/etc/passwd:

用户名:x:UID:基本组ID:comment信息:HOME:默认shell

useradd: adduser

-u UID:指定UID

-g GID: 指定GID,即指定用户的基本组,但GID要事先存在

-G GID:指定用户的额外组,组要事先存在;

-c "Comment":

-d /path/to/somewhre:

-s /path/to/shell: 指定默认shell,应该指定使用/etc/shells文件中出现的shell;

-m: 创建用户时,强制给用户创建家目录;

-M: 创建用户,但不创建家目录;

-r: 创建系统用户

id: 1-499

不会为用户创建家目录

默认shell为/sbin/nologin

groupadd GrpName

-g GID: 创建组并为其指定GID

用户类别:

管理员:0

普通用户:1-65535

系统用户:1-499

登录用户:500+

用户组:

管理员组

普通组

以用户为视角,组可为两类:

基本组: 显示在/etc/passwd中GID字段组,为用户的基本组;

额外组,附加组: /etc/group

userdel: 删除用户, 默认会保留家目录

格式:userdel UserName

-r: 一并删除家目录

设定用户密码: passwd

普通用户:passwd

管理员:

改自己密码:passwd

改其它用户密码:passwd UserName

/etc/shadow文件的格式:

UserName:加密的密码:最近一次密码修改时间:最短使用期限:最长使用期限:警告区间:非活动区间:帐号的过期期限:预留段

passwd -l UserName 锁用户

passwd -u UserName 解锁

设定组密码:gpasswd GroupName

usermod:

-u UID:

-g GID:

-G GID: 默认会覆盖原有的附加组;如果是添加,则同时使用-a选项;

-c String:

-d /path/to/New_Home: 默认不会迁移用户的家目录;如果要迁移,则同时使用-m

-s SHELL:

-l New_login_name:

-L: 锁定用户帐号

-U: 解锁

如何修改组属性定义:

groupmod:

-g GID

-n New_Group_Name:

UserName:加密的密码:最近一次密码修改时间:最短使用期限:最长使用期限:警告区间:非活动区间:帐号的过期期限:预留段

修改帐号日期属性:chage

-m 修改最短使用期限。为零时代表任何时候都可以更改密码

-M 修改最长使用期限。密码保持有效的最大天数

-W 修改警告区间。用户密码到期前,提前收到警告信息的天数

-I 修改非活动区间或停滞日期。如果一个密码已过期这些天,那么此帐号将不可用

-E 修改帐号的过期期限。过了这天,此帐号将不可用

查看用户相关信息id:

id UserName

-u: 显示UID,跟-n一起使用则显示用户名

-g: 显示基本组ID,跟-n一起使用则显示基本组名

-G: 显示所有组ID,跟-n一起使用则显示所有组名

su -l UserName 切换用户,且切换到该用户的家目录

练习:

1、创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux;

# groupadd linux

# groupadd -g 3003 distro

# useradd -u 2002 -g distro -G linux mandriva

2、创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;

# useradd -c "Fedora Community" -s /bin/tcsh fedora

3、修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora;

# usermod -u 4004 -g linux -G distro,fedora mandriva

4、给fedora加密码,并设定其密码最短使用期限为2天,最长为50天;

# passwd fedora

# chage -m 2 -M 50 fedora

5、将mandriva的默认shell改为/bin/bash;

# chsh -s /bin/bash mandriva

Linux文件类型:

普通文件 -

目录 d

链接文件 l

字符设备 c

块设备 b

命名管道 p

套接字文件         s

权限:read, write, execute

用户不拥有某位权限,则使用 - 占位;

文件:

r: 可以使用内容查看类的命令来显示其相关内容;

w: 可以使用编辑器修改其内容;

x: 可以将其发起一个进程;

目录:

r: 可以使用ls命令查看目录内容的文件信息;

w: 可以创建、删除文件;

x: 可以使用ls -l命令查看目录内容的文件信息,并且可用cd命令切换此目录为工作目录;

chmod命令:

操作三类用户的权限:使用8进制形式

chmod [-R] OCTAL-MODE file...

-R可以递归修改目录下文件的权限

操作指定类别用户的权限:使用u,g,o,a来赋权,基于=或+/-来进行

u: 属主

g: 属组

o: 其它

a: 所有

=:操作指定类别用户的权限;u=, ug=,     u=,g=

+/-: 操作指定类别用户的单个权限: u-x, g+r, o-x, +x

参照其它文件的权限为当文件赋权

--reference=要参照的文件   要修改权限的文件

umask

创建文件:666-umask

文件默认决不允许出现执行权限,如何具有执行权限,则权限值加1;

创建目录:777-umask

root用户的umask为022;用户名和基本组组名一致umask为002,否则umask为022;

修改文件的属主或属组:chown, chgrp

-R: 递归

--reference=

chown [option] UserName[{:|.}GroupName] file...

权限应用模型:

进程的属主,是否与文件的属主相同;如果相同,进程则以文件属主的权限来访问文件;否则

进程的属主所属的组,是否其中之一与文件的属组相同;如果相同,进程则以文件属组的权限来访问文件;否则,

进程则以文件的其它用户的权限来访问文件;

练习:

1、新建一个用户openstack,但不给其创建家目录;创建完成后使用su命令切换至此用户,查看其命令提示符及PATH和HOME两个环境变量的值;

# useradd -M openstack

# su - openstack

# echo $PATH $HOME

2、复制/etc/skel目录为/home/openstack;

# cp -r /etc/skel /home/openstack

3、改变/home/openstack及其内部文件的属主属组均为openstack;

# chown -R openstack.openstack /home/openstack

4、/home/openstack及其内部的文件,属组和其它用户没有任何访问权限;

# chmod -R go= /home/openstack

# su - openstack

# echo $PATH $HOME

练习:

完成以下任务:

(1)新建系统组mysql;新建系统用户mysql,属于mysql组,要求其没有家目录且shell为/sbin/nologin;

# groupadd -r mysql

# useradd -r -s /sbin/nologin -g mysql mysql

(2)新建GID为600的组magedu;新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;

# groupadd -g 600 magedu

# mkdir /users

# useradd -d /users/gentoo gentoo

# passwd gentoo

(3)新建用户centos,其家目录为/users/centos,密码同用户名;

# useradd -d /users/centos centos

# passwd centos

(4)新建用户www,其家目录为/users/www;删除www用户,但保留其家目录;

# useradd -d /users/www www

# userdel www

(5)用户gentoo和centos均以magedu为其附加组;

# usermod -a -G magedu gentoo

# usermod -a -G magedu centos

bash特性之六:bash的快捷键

Ctrl+a: 跳至命令行首

Ctrl+e: 跳至命令行尾

Ctrl+u: 删除命令行首至当前光标所在处的内容

Ctrl+k: 删除当前光标所有处至命令行尾的内容

Ctrl+l: 清屏,相当于clear命令

Ctrl+c: 取消或终止;

Ctrl+z: 将当前命令送至后台,fg调回前台

ELF:

#!/bin/bash

程序=指令+数据

变量:

弱类型语言:

1、不强制区分变量的类型,无论存储何种数据,均以字符格式进行;

2、无须事先声明;用到时,直接使用,直接赋值;

bash: 动态编程语言,是弱类型语言;

bash的特性之九:bash中的变量

变量的类型:

本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效;

定义变量: [set]Var_Name="Value"

引用变量: ${Var_Name}

撤销变量: unset Var_Name

局部变量:仅对局部代码生效

local Var_Name="Value"

环境变量:对当前shell进程及其子shell都有效;

export Var_Name="Value"

Var_Name="Value"

export Var_Name

位置变量:

$1, ..., $n

./first.sh 2 8

特殊变量:

$0: 脚本名称自身

$?: 上一条命令的执行状态;

状态用数字来表示:0-255;

0: 成功

1-255: 失败

$$

$!

$# 位置参数的个数

$* 所有的位置参数

变量的命名要求:

只能使用数字、字母和下划线组成;

不能以数字开头;

不能使用程序中的关键字;

见名知义;totalWeight

set

环境变量:用来bash的工作特性,用于保存当前会话的属性信息;

显示所有环境变量:export, env, printenv

定义:export Var_Name="Value"

PATH, PS1

bash的配置文件:持久保存用户配置

profile类:为交互式登录的用户提供配置

/etc/profile:全局

/etc/profile.d/*.sh:全局

~/.bash_profile:个人配置,仅对当前用户有效

功能:

设定环境变量

运行命令或脚本

bashrc类:非交互工登录用户提供配置

/etc/bashrc: 全局

~/.bashrc: 个人配置

功用:

设定本地变量

定义命令别名

登录类型:

交互式登录:

直接通过终端输入用户信息登录系统;

su - UserName或su -l UserName;

非交互式登录:

su UserName

图形界面的终端

执行脚本

新增配置的生效方式:

通知shell重读配置文件的命令:

source (.)

. FILE

重新登录

交互式登录用户:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录用户:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

bash脚本:面向过程的编程中

顺序执行:默认法则,逐条执行各语句

选择执行:分支,条件判断,符合条件的分支予以执行;

循环执行:将同一段代码反复执行有限次,所以,循环必须有退出条件,否则将陷入死循环;

for循环:

for var_Name in 列表; do

语句1

语句2

...

done

语法错误检测:

# bash -n 脚本文件

列表的生成方法:

生成数字序列:{start..end}、seq [start] [step] end

练习:写一个脚本,列出1-10的奇数

#!/bin/bash

for num in `seq 1 2 10`;

do

echo $num

done

练习:写一个脚本,用file命令显示/var/log目录下每个文件的内容类型;

提示:列表生成的方法为/var/log/*

#!/bin/bash

#

dirName=/var/log

for fileName in $dirName/*; do

file $fileName

done

练习:写一个脚本,

1、创建/tmp/scripttest目录,用变量保存目录名;

2、在目录里创建测试文件tfile1-tfile20;

3、创建用户testuser1和testuser2;

4、将tfile1-tfile10的属主和属组改为testuser1;

5、将tfile11-tfile20的属主和属组改为testuser2;

#!/bin/bash

dirName=/tmp/scripttest

mkdir $dirName

for fileNo in {1..20}; do

touch $dirName/tfile$fileNo

echo "Create $dirName/tfile$fileNo finished"

done

useradd testuser1

useradd testuser2

for fileNo in {1..10}; do

chown testuser1:testuser1 $dirName/tfile$fileNo

done

for fileNo in {11..20}; do

chown testuser2:testuser2 $dirName/tfile$fileNo

done

文本处理类的命令:wc, word count

wc [option] [file]...

-l: 统计行数

-c: 统计字节数

-w;统计单词数

tr: 转换字符或删除字符

tr ‘集合1‘ ‘集合2‘   将集合1替换为集合2

tr -d ‘字符集合‘ 删除字符集合

cut -d字符 -f# 操作对象

-d字符:指定分隔符

-f#: 指定要显示字段

单个数字:一个字段

逗号分隔的多个数字:指定多个离散字段

-:连续字段,如3-5;

sort: 默认按字符进行比较

sort [option] file...

-f: 忽略字符大小写;

-n: 比较数值大小;

-u: 重复的行,只显示一次;

-t: 指定分隔符

-k: 指定分隔后进行比较字段

uniq: 移除重复的行

-c:显示每行重复的次数

-d:仅显示重复过的行

-u: 仅显示不曾重复的行

练习:

1、统计/bin、/usr/bin、/sbin和/usr/sbin等各目录中的文件个数;

# ls /bin | wc -l

2、显示当前系统上所有用户的shell,要求,每种shell只显示一次;

# cut -d: -f7 /etc/passwd | sort -u

3、取出/etc/passwd文件的第7行;

# head -7 /etc/passwd | tail -1

4、显示第3题中取出的第7行的用户名;

# head -7 /etc/passwd | tail -1 | cut -d: -f1

# head -7 /etc/passwd | tail -1 | cut -d: -f1 | tr ‘a-z‘ ‘A-Z‘

5、统计/etc目录下以P或p开头的文件个数;

# ls -d /etc/[Pp]* | wc -l

练习:写一个脚本,用for循环实现

显示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行;

#!/bin/bash

for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab; do

wc -l $fileName

done

#!/bin/bash

for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab; do

lineCount=`wc -l $fileName | cut -d‘ ‘ -f1`

echo "$fileName: $lineCount lines."

done

#!/bin/bash

for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab; do

echo "$fileName: `wc -l $fileName | cut -d‘ ‘ -f1` lines."

done

练习:写一个脚本

将上一题中三个文件的复制到/tmp目录中;

用for循环实现,分别将每个文件的最近一次的修改时间改为2011年9月15号13点27分;

#!/bin/bash

for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab; do

cp $fileName /tmp

baseName=`basename $fileName`

touch -m -t 201109151327 /tmp/$baseName

done

练习:写一个脚本

显示/etc/passwd中第3、7和11个用户的用户名和ID号;

#!/bin/bash

#

for lineNo in 3 7 11; do

userInfo=`head -n $lineNo /etc/passwd | tail -1 | cut -d: -f1,3`

echo -e "User: `echo $userInfo | cut -d: -f1`\nUid: `echo $userInfo |cut -d: -f2`"

done

for:通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环;

总结:生成列表的方式

1、直接给出列表;

2、使用文件名通配的机制生成列表

3、可以使用{}或seq命令生成数字序列  1, $lineCount   `seq 1 $lineCount`  {1..$lineCount}

4、使用命令生成

时间: 2024-08-09 14:41:36

2、权限、变量、for 学习笔记的相关文章

JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记四)

1.宿主对象与宿主环境 宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象.所有的BOM和DOM都是宿主对象. 宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器等. 2.日期的转换 var now =new Date(); typeof(now+1) //string typeof(now-1) //number now==now.toString(); //true now>(now-1) //tr

奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记

指针变量的定义: 存放地址的变量称为指针变量 1. 定义指针变量的一般形式如下: 类型名 * 指针变量名1,* 指针变量名2,... * 指针变量名n ; 例如:  int * X, *Y, *Z; 等同于: int * X; int * Y; int * Z; 实例: #include<stdio.h>void main(){    int x = 1;    int y = 2;    int* A;        //声明一个指向整形变量的指针变量A    int* B;        

PHP学习笔记——1.变量

目录: PHP学习笔记——1.变量 PHP学习笔记——1.常量 1.变量的组成 包括:变量名.变量值.存储地址 例:$a = 23; 执行后,在变量表中添加了$a这个变量名,在内存中开辟出一块空间,空间值为23,而$a指向23所在空间位置 例:echo $a; 执行后,先从变量表中找到$a,再根据其地址找到相应内存空间地址,读出23的值 2.变量的声明 $变量名 = 变量值; 3.变量名命名规范 字母.下划线.数字的组合 数字不能作为开头 区分大小写 4.变量的类型 ①五种标量: 整型:0 2

mysql学习笔记--第1天

1.像网页上的账户.图片.文章都是存在数据库里面2.Oracle .DB2 .SQL server等等多钟数据库 PHP中选择使用mysql PHP+mysql黄金搭档 PHP和mysql都是开源的,免费实用,配置性好. mysql中小型适合,但没有Oracle强大.3.mysql的架构:C/S client/server 在server端开启,client端操作 mysql DBMS(DB代表数据库 M代表管理 S代表系统)客户端操作 服务器端---数据库--数据表--(行(记录),行(字段)

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()". 2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一个变

PHP学习笔记——1.常量

目录: PHP学习笔记——1.变量 PHP学习笔记——1.常量 1.常量的意义 在实际应用中,PHP文件会引入其它文件 而当前文件中的普通变量有可能会被其它文件重新赋值覆盖 所以将重要变量定义为常量,不允许被覆盖定义 2.定义常量 define('APP_NAME', 'Noah Zhao'); //习惯将常量名全部大写 echo APP_NAME;  //注意不含$符 3.常量的特点 一旦被定义,则不能重新赋值.重复定义 常量具有'全局有效性',页面任何一处都能访问:在某个函数的内部,是不能访

PHP学习笔记——3.运算符

目录: PHP学习笔记——1.变量 PHP学习笔记——2.常量 PHP学习笔记——3.运算符 1.算术运算符 + - * / %(求模) %:余数的正负值是由被除数决定的 2.比较运算符 == != > < >= <= === !== ===与!==比较的是变量的值和类型 注:在不同类型进行比较时 PHP会将前一个变量先转换成和后一个变量同一类型,再进行比较 布尔->字符串 true->'1' false->'' 字符串->数字 '123abc456'-&g

Linux学习笔记033_10

网卡命名: eth0,eth1 子接口(一个网卡上多个IP):eth0:1,eth0:2 ifconfig: 查看网卡信息 ifup ethx:开启网卡 ifdown ethx:关闭网卡 配置网卡: 图形 命令: ONBOOT为yes表示启动计算机时通过网卡 全局网络配置: 第一行为开启ipv4,第二行为开启ipv6,第三行为计算机名,注意计算机名在DNS要解析到,如clc.com 可以加一行:GATWAY=192.168.1.254,不过以network-scripts中的网关优先级高 DNS

PHP学习笔记——4.控制结构

目录: PHP学习笔记——1.变量 PHP学习笔记——2.常量 PHP学习笔记——3.运算符 PHP学习笔记——4.控制结构 PHP学习笔记——5.函数 1.顺序结构 按书写顺序从上往下执行 2.分支结构 ①单路 if ②双路 if..else ③多路 if..else if..else ④多路 switch..case switch($day) { case 1: echo '星期一'; break; case 2:echo '星期二'; break; ... default: echo '星

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件