Linux目录结构:

bin (binaries)————————> 存放二进制可执行文件

sbin (super user binaries)——> 存放二进制可执行文件,只有root才能访问

etc (etcetera)————————-> 存放系统配置文件

usr (unix shared resources)—-> 用于存放共享的系统资源

home —————————————> 存放用户文件的根目录

root ————————————-> 超级用户目录

dev (devices)—————————> 用于存放设备文件

lib (library)————————-> 存放跟文件系统中的程序运行所需要的共享库及内核模块

mnt (mount)—————————-> 系统管理员安装临时文件系统的安装点

boot —————————————> 存放用于系统引导时使用的各种文件

tmp (temporary)———————-> 用于存放各种临时文件

var (variable)————————> 用于存放运行时需要改变数据的文件

Linux常用命令:

hostname ———————-> 查看主机.

ifconfig ————————> 查看ip地址.

ping ip地址 ——————-> 测试网络的连通性 ip 192.168.3.4

shutdown ———————-> 系统关机.

  1. -r 关机后, 立即重启.
  2. -h 关机后, 不重新启动.

halt ——————————> 关机后,关闭电源.

reboot —————————> 重新启动.

crtl c ———————-> 停止当前进程.

history————————-> 查看命令历史.

crtl l ————————> 清屏.

clear—————————-> 清屏.

su ——————————-> 切换用户,低权限用户切换时,默认切换为root, 需要输入密码. 高权限切为低权限需要指定用户名.

top ——————————> 显示当前系统中耗费资源最多的进程

ps ——————————-> 显示瞬间的进程状态

  1. -e /-A 显示所有进程,环境变量
  2. -f 全格式
  3. -a 显示所有用户的所有进程(包括其它用户)
  4. -u 按用户名和启动时间的顺序来显示进程
  5. -x 显示无控制终端的进程

ps -ef | more ————-> 查看进程

kill -9 pid值 —————> 杀死一个进程 , kill -9 3727

df ——————————-> 显示文件系统磁盘空间的使用情况.

free——————————> 显示当前内存和交换空间的使用情况

netstat ————————> 显示网络状态信息

  1. -a 显示所有连接和监听端口
  2. -t (tcp)仅显示tcp相关选项
  3. -u (udp)仅显示udp相关选项
  4. -n 拒绝显示别名,能显示数字的全部转化成数字。
  5. -p 显示建立相关链接的程序名

netstat -an | grep 8080 ——-> 查找8080端口的程序.

ls -la /usr ——————> 查看文件和目录列表. ls -lt /usr , ls -l /usr , ls -a /usr , ll(查看默认目录内容)

  1. -a 显示所有,包括隐藏文件.
  2. -l 以长列表形式显示long.

ls -lhR mnt/ ——> 表示查看大小, R表示递归查看, 可以查看mnt下的所有的文件夹及文件.

cd /usr ———————> 切换目录 , cd . , cd .. , cd /usr/local/java , cd 跳出当前环境.

cd - ————————-> 返回进入此目录之前所在的目录

cd !$ ————————> 把上个命令的参数作为cd参数使用。

pwd ——————————> 查看当前工作目录.

help + 命令 ——————> 内部命令, 查看帮助文档. eg: help cd

man + 命令 ——————> 外部命令, 查看文档帮助. eg: man ls

mkdir 文件目录 ————> 创建文件目录 mkdir /usr/local/jdk , mkdir /hello ,

创建项目的目录结构:
mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

创建的目录结构如下:
scf/
|— bin
|— doc
| |— info
| -- product |-- lib |-- logs | |-- info |— product
-- service— deploy
|— info
`— product

mkdir room-1,room-2,room-3 , 可以一次性创建多个目录.

mkdir -p 文件目录 ——-> 创建文件目录, 父目录不存在, 先创建父目录. mkdir -p /java/jdk7

mkdir -m 777 dirname ——> 创建权限为777的文件目录.

cp 文件 目录 ————-> 复制文件到目录下. cp book room-a, 复制book文件, 并放在room-a目录下.

cp -r 目录/文件 目录————> 递归处理,将指定目录下的文件与子目录一并拷贝 . cp -r /usr/java /family/room , 将java下的左右内容复制到room下.

touch:
1). touch 文件 ——————> 创建一个空文件. touch book , 创建一个文件book.

  1. 2). touch -r file1.log file2.log -----> 更新file2.log的时间戳与file1.log的时间相同.(file1.log的时间戳不变)
  2. -r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
  3. 3). touch -t 201502072137.50 file3.log ----> 手动设定文件的时间戳.
  4. -t time : 使用指定的时间值 time 作为指定文件相应时间戳记的新值.此处的 time规定为如下形式的十进制数: [[CC]YY]MMDDhhmm[.SS]

echo ‘内容’ > 文件名——> 在创建文件时, 添加文件内容. echo ‘think in java’ > book, 创建book文件时, 添加内容”think in java”.

echo ‘content’ > filename ——-> 往文件中追加信息.

文件 ————————-> 创建一个空文件, 与touch 效果相同.

mv :
1). 文件改名 : mv test1.log test2.txt ——> 将test1.log 名字改为 test2.txt

  1. 2). mv dir1 dir2 ---------> 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。
  2. 3). mv 目录/文件(*) 目录 --> 将目录或文件,移动到另一个目录中.
  3. 4). mv book room-a room-c/ , 将文件book及目录room-a移动到room-c目录中.
  4. eg: mv * ../ -----> 将本目录下的内容全部移动到上一级目录.
  5. 5). mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt 命令将三个文件移动到test4目录中去
  6. -t: 加上这个, 就可以将目录放在前面, 文件放在后面.

rm 目录 ———————-> 移除文件. rm room , 删除文件, 会有确认, 移除目录, 只能移除空目录.

  1. -r 同时删除该目录下的所有文件(recursive),递归删除
  2. -f 强制删除文件或目录(force
  3. rm -rf room , 移除room目录及其中的所有内容.

rmdir 空目录——————> 删除空目录.

cat :
1). cat 文件 ———————-> 查看文件中的信息, 全部显示. cat install.log , 查看其全部信息, 全部显示.

  1. 参数:
  2. -A, --show-all 等价于 -vET
  3. -b, --number-nonblank 对非空输出行编号
  4. -e 等价于 -vE
  5. -E, --show-ends 在每行结束处显示 $
  6. -n, --number 对输出的所有行编号,由1开始对所有输出的行数编号
  7. -s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行
  8. -t -vT 等价
  9. -T, --show-tabs 将跳格字符显示为 ^I
  10. -u (被忽略)
  11. -v, --show-nonprinting 使用 ^ M- 引用,除了 LFD TAB 之外
  12. 2). cat > filename ----------> 从键盘创建一个文件,只能创建新文件,不能编辑已有文件.
  13. 3). 将几个文件合并为一个文件: cat file1 file2 > file .
  14. cat 1.txt 2.txt > new.txt -------> 1.txt2.txt文件的内容合并到new.txt文件中, 前提是new.txt文件是存在的.
  15. 4). tac file1.log ------> 反向列示, 就是讲文件的内容从后向前, 倒过来显示.
  16. 5). here doc 来生成文件.
  17. cat > 1.log << eof
  18. > ...
  19. > ...
  20. >eof
  21. --------> 系统会将...键盘接受的输入的内容输出到文件1.log中, eof为开始和结束标志, 注意语法.

nl 命令:

  1. 1). nl file.log --------------> 带行号查看文件, 如果为空行, 则不计算该行的行号
  2. 2). nl -b a file.log ---------> 带行号查看文件, 如果该行为空行, 也计算该行的行号.
  3. 3). nl -n ln file.log --------> 在屏幕的最左方显示行号.
  4. 4). nl -n rn file.log --------> 在屏幕的最右方显示行号.
  5. 5). nl -n rz file.log --------> 行号在自己栏位的最右方显示,且加 0

more/less 文件 ————-> 分页显示文件内容. more install.log

  1. 1). more +5 file.log ------------> 查看文件file.log自第五行之后的文件内容.
  2. 2). more +/day3 log2012.log -----> 从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出
  3. 3). more -10 menu.sh ------------> 设定每屏显示行数
  4. 4). ls -l | more -5 ------------> 列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来
  5. -------> 每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。

head/ tail ———————> 查看文本中开头或结尾部分的内容,默认显示十行. head install.log, tail install.log.

tail -n 5 install.log——> 查看文本的末尾的5条数据.

tail -f install.log——> 循环读取文本中的数据.

wc install.log—————-> 统计文本的行数、字数、字符数. // 920 1853 39317 install.log

  1. -m 统计文本字符数 -w 统计文本字数(word) -l 统计文本行数(line)
  2. wc -m install.log wc -w install.log wc -l install.log

find 指定目录(选) -name 文件/目录名—-> 在文件系统中查找指定的文件 , 指定目录可以不填.
find -name book , 将从文件系统中查找所有的book的路径

grep ‘内容’ 文件 ———————-> 在指定的文本文件中查找指定的字符串 . grep ‘java’ book.

ln -s family/room-c/ link ———-> 建立链接文件

  1. -s 对源文件建立符号连接,而非硬连接

time [command] ——> 查看指定命令的执行时间.

which 命令:

  1. 1). which 查看可执行文件的位置。
  2. which pwd ----------> /bin/pwd
  3. which useradd ------> /usr/sbin/useradd
  4. 2). whereis 查看文件的位置。
  5. 3). locate 配合数据库查看文件位置。
  6. 4). find 实际搜寻硬盘查询文件名称。
  7. 5). which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

gzip 文件 ————————————> 压缩(解压)文件或目录,压缩文件后缀为gz

  1. -d将压缩文件解压(decompress
  2. -l显示压缩文件的大小,未压缩文件的大小,压缩比(list
  3. -v显示文件名和压缩比(verbose
  4. -num用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),
  5. -9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
  6. eg: gzip install.log , 压缩. gzip -d install.log.gz, 解压.
  7. gzip -9 install.log , 高压缩比压缩.

bzip2 文件 ———————————-> 压缩(解压)文件或目录,压缩文件后缀为bz2

  1. -c将压缩的过程产生的数据输出到屏幕上
  2. -d解压缩的参数(decompress
  3. -z压缩的参数(compress
  4. -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),
  5. -9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
  6. bzip2 install.log, 压缩. bzip2 -d install.log.bz2, 解压.

tar 文件————————————-> 文件、目录打(解)包

  1. -c 建立一个压缩文件的参数指令(create
  2. -x 解开一个压缩文件的参数指令(extract
  3. -z 是否需要用 gzip 压缩
  4. -j 是否需要用 bzip2 压缩
  5. -v 压缩的过程中显示文件(verbose
  6. -f 使用档名,在 f 之后要立即接档名(file
  7. tar -czvf ff.tar.gz family/, 将文件解压到family目录下.

nohup ——-> 不挂断的运行命令. 如: nohup java -jar sendMessage.jar & —-> & 表示后台运行,需要加上

  1. ----> 后台运行, 原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

nohup command > myout.log 2>&1 & ——> 也可以指定输出日志的文件 , 2>&1 表示错误输出也指向正常日志, 也就是, 错误正确都指向这个日志文件.

VIM/VI 文本编辑器:

  1. vim install.log ----> 进入文本详情:
  2. i ----------> 在光标前插入.
  3. I ----------> 在光标当前行开始插入.
  4. a ----------> 在光标后插入.
  5. A ----------> 在光标当前行末尾插入.
  6. o ----------> 在当前行的下一行插入新的空行.
  7. O ----------> 在当前行的上一行插入新的空行.
  8. :set nu-----> 显示行号.
  9. :set nonu---> 取消行号.
  10. gg----------> 到文本的第一行.
  11. G-----------> 到文本的最后一行.
  12. :n----------> 到文本的第n行.
  13. x-----------> 删除光标所在处的字符.
  14. nx----------> 删除光标所在处后的n个字符.
  15. dd----------> 删除光标所在行
  16. ndd---------> 删除n行.
  17. dG----------> 删除光标所在行到末尾行的所有行.
  18. D-----------> 删除光标所在处到行尾的内容.
  19. :n1,n2d ----> 删除指定范围的行.
  20. u-----------> 取消上一步操作.
  21. crtl+r------> 返回到undo之前.
  22. r-----------> 替换光标坐在处的字符.
  23. R-----------> 从光标所在处开始替换,按esc键结束.
  24. shift+zz ---> 保存退出
  25. :wq --------> 保存并退出,与上述作用相同.
  26. :x ---------> 保存并退出
  27. :q! --------> 不保存退出
  28. v shift+v----> 进入行可视模式.
  29. crtl+v -----> 进入块可视模块.

用户与账户管理:

/etc/passwd ————————> 保存用户信息的文件:
/etc/shadow ————————> 保存密码的文件
/etc/group ————————-> 保存用户组的文件
/etc/gshadow ———————-> 保存用户组密码的文件
/etc/default/useradd ———-> 用户配置文件

查看其中的内容就可以使用: cat , more, less, tail, head.

操作用户命令:

————————————————> account:password:UID:GID:GECOS:directory:shell <———————————-

添加用户命令:useradd username——-> 添加用户. useradd lisi

  1. -u 指定组IDuid
  2. -g 指定所属的组名(gid
  3. -G 指定多个组,用逗号“,”分开(Groups
  4. -c 用户描述(comment
  5. -e 失效时间(expire date

查看用户的命令: id username —> id root ===> uid=0(root) gid=0(root) groups=0(root) ;

查看系统的所有的用户信息: cat /etc/passwd —> 对于普通用户, uid都是从500开始排的.

设置密码命令: passwd username————-> 为哪个用户设置密码, eg: passwd lisi—-> 为lisi用户设置密码.

ll /home/ —————> 查看用户及组.
cat /etc/passwd——-> 查看用户信息.

cat /etc/shadow ——> 查看当前系统中的账户的密码信息.

cat /etc/group ——> 查看当前用户的组信息.

修改用户命令:usermod(user modify)

  1. -l 修改用户名 loginusermod -l a bb改为a ----------- eg : usermod -l LiSi zhangsan 将用户名张三修改为LiSi.
  2. -g 添加组 usermod -g sys tom
  3. -G添加多个组 usermod -G sys,root tom
  4. L 锁定用户账号密码(Lock
  5. U 解锁用户账号(Unlock

删除用户命令:userdel(user delete) —-> 删除用户的同时,会删除该用户的组,密码, home下的所有信息.
-r 删除账号时同时删除目录(remove)

查看系统中组的信息: cat /etc/group

添加组:groupadd
-g 指定gid

修改组:groupmod
-n 更改组名(new group)

删除组:groupdel
groups 显示用户所属组

将用户添加到组中:

  1. gpasswd -a user1 root -----> 将用户user1 添加到root组中. 一个用户可以同时属于多个组. 该用户的权限, 是两个组的权限之和.

把组中的用户删除:

  1. gpasswd -d user1 root -----> root组中的user1用户删除.

权限管理:

三种基本权限
r 读权限(read)
w 写权限(write)
x 执行权限 (execute)

d r w x r - x r - x - r w - r - - r - - l r w x r w x r w x

  1. 1位:文件类型(d 目录,- 普通文件,l 链接文件)
  2. 2-4位:所属用户权限,用uuser)表示
  3. 5-7位:所属组权限,用ggroup)表示
  4. 8-10位:其他用户权限,用oother)表示
  5. 2-10位:表示所有的权限,用aall)表示
  6. 完整信息:一个文件,所属用户具有读写执行权限;所属组的用户
  7. 有读写权限,没有执行权限;其他用户只有读权限

//———- chmod 权限分配

chmod修改文件权限命令(change mode)
参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)

  1. -----> chmod u+x a.txt --- 增加权限 | chmod u-x a.txt ---- 减少权限
  2. -----> chmod g+x a.txt --- 增加权限 | chmod g-x,g-w a.txt ---- 减少权限
  3. -----> chmod a+x a.txt

用数字来表示权限(r=4,w=2,x=1,-=0)

  1. -----> chmod 750 b.txt
  2. rwx用二进制表示是111,十进制4+2+1=7
  3. r-x用二进制表示是101,十进制4+0+1=5
  4. 7 5 0
  5. 1 1 1 1 0 1 0 0 0
  6. r w x r _ x - - -

// —————- acl 权限 ———

1). getfacl root.txt ——> 获取文件的权限信息. 返回文件名,文件拥有者, 所属组, 用户权限,组权限,其他权限.

2). setfacl -m u:deng:rw root.txt ——> 为用户deng分配root.txt文件的权限. -m表示更改modify

3). setfacl -x u:deng root.txt ——-> 删除给deng这个用户层设置的所有权限. 通过acl设置的权限.

4). setfacl -b root.txt ———————> 擦除给文件root.txt上的所有的acl权限.

  1. setfacl -bR deng ------> 遍历擦除deng文件夹下的所有的acl权限.

5). linux中的文件如果没有执行(x)的权限, 是不能切换到该目录下的. 切换的瞬间是执行该文件夹.

6). 如果要在目录下 删除/创建 一个文件, 需要对该目录设置权限.

  1. setfacl -m u:deng:rwx /mnt

7). 如何对一个目录及子目录和文件设置权限:

  1. setfacl -m u:deng:rwx -R /mnt -----> -R 表示, 递归设置权限.
  2. ---> 这样设置是可以解决当前目录下当前所有文件的acl权限, 但是后期新加的子目录和文件, 无法继承父目录的权限.
  3. 解决方法:
  4. ①. setfacl -m u:deng:rwx -R /mnt ----> 给现有是目录文件递归添加权限.
  5. ②. setfacl -m d:u:deng:rwx -R /mnt ----> 给目录做默认权限操作.

//—————- visudo 权限 ———————

设置用户对命令的执行权限-visudo ——> sudo授权.配置中配置.

  1. 设置

visudo ——> 进入权限设置文件配置.

下列这种方式需要密码:

①. user1 locahost=/usr/sbin/useradd —-> 给user1分配useradd命令的执行权限.
②. user1 localhost=/usr/sbin/userdel —-> 给user1分配userdel命令的执行权限.

下列的这种方式不需要使用密码:

user1 ALL = NOPASSWD:/usr/sbin/useradd —-> 不需要当前用户输入密码.
user1 localhost = NOPASSWD:/usr/sbin/useradd —-> 不需要当前用户输入密码.

2.使用sudo授权的命令, 需要在命令前加上sudo

sudo /usr/sbin/useradd user2
sudo /usr/sbin/userdel -r user2

  1. 使用无密码的sudo授权命令

rpm命令使用:

  1. rpm的常用参数:
  2. i:安装应用程序(install
  3. e:卸载应用程序(erase
  4. vh:显示安装进度;(verbose hash
  5. U:升级软件包;(update
  6. qa: 显示所有已安装软件包(query all
  7. 结合grep命令使用
  8. exrpm -ivh 3.el6.x86_64.rpm -C /usr/java-------> 直接安装.
  9. rpm -Uvh xxxxxxxxxxx.rpm -C /usr/java -------> 更新升级安装包.

tomcat的安装:

  1. 解压: tar -zxvf apache-tomcat-7.0.47.tar.gz -C /usr/local/src/

启动tomcat:

  1. 1). cd /usr/local/src ----> [root@itcast01 src]# ./
  2. 2). cd /usr/local/src ----> [root@itcast01 src]# sh apache-tomcat-7.0.47/bin/startup.sh --- > 推荐.
  3. 3). [root@itcast01 bin]# sh startup.sh ---> 这种可以推荐使用.

防火墙:
service iptables status; ————> 查看防火墙.
service iptables stop; —————> 关闭防火墙.

source /etc/profile———————————> 刷新文件. 当配置文件修改时, 需要刷新文件.

IP地址的配置:

  1. 1). 直接通过图形化界面, 来配置ip地址.
  2. 2). 通过setup指令, 进入网络设置.
  3. 3). vim /etc/sysconfig/network-scripts/ifcfg-eth0

vim /etc/sysconfig/network —————> 修改hostname.

vim /etc/hosts———————————-> 配置hosts.系统内部的DNS

yum -y install mysql-server —————> 联网自动下载需要安装的软件. -y 表示提示安装过程.

yum update ——> 全部更新

yum check-update ——-> 检查可更新的程序.

//————————————————- Shell 脚本编程 ———————————————

  1. 历史命令
    history 查看历史命令;

    1. ! 指定的命令索引, 可以调用该命令 !5 --> 执行第五条命令
    2. !vi --> 调用历史中最后一次使用vi开头的命令. !ser --> 执行历史中最后一次执行的ser*开头的命令
  2. history -c 清除历史命令
    init 0 关闭系统
    tr —-> 转换字符, 如: 将大写转为小写,选项可以让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个.

  3. 命令别名
    alias x=’ll’ —-> 给命令起别名, 然后可以使用简短的别名操作

    1. ---> 这样的别名, 服务器重新启动后就会失效 ; 持久化, 可以将其存储在 .bashrc文件中
  4. alias —-> 查看系统中的所有的命令的别名.
    unalias x —-> 清除指定的别名.

  5. 输出重定向
    ll >> root.txt ——-> bash输出重定向. 将查找到的数据放在root.txt文件中.

    和 >> 的区别:

  1. 1).都是重定向, > 是覆盖式重定向, >> 是追加式重定向.
  1. 1> 和 2> 的区别:(覆盖式) 1>> 2>> (追加式)

    1. 1). 1> 是正确重定向, 如果前面的命令是正确的, 将该命令的返回结果存储在指定的文件中.
    2. 2). 2> 是错误重定向, 如果前面的命令是错误的, 将该命令的返回结果存储在指定的文件中.
  2. &> 把正确的或者错误的输出结果存储在文件中. (是覆盖式的输出, 并非追加式输出)
    bash red.sh 1>>note.txt 2>&1 —-> 将正确的输出结果存在note.txt中,将错误的结果也通过1的通道存储在note.txt中, 而且还是追加.
    < 输入数据.

  3. shell的管道操作.
    free -m | grep -i mem ——> 通过管道|, 将前面的查询结果, 交给后面, 由后面的grep来过滤.

    1. --> 1). free 查看内存信息, -i 表示忽略大小写匹配, grep 表示查找.
  4. free -m | grep -i mem | awk ‘{print $1”\n”,$2”\n”,$3”\n”,$4”\n”}’; ——> 此处使用了awk编程. “\n”表示换行 , 查找指定的列.

  5. 执行shell脚本的方式:
    1). bash test.sh ——-> 不需要再文件中写解析器
    ——-> 不需要给脚本设置执行权限
    2). ./test.sh ——-> 需要些解析器
    ——-> 需要给脚本设置执行权限.
  6. crontab LINUX下的任务调度:
    格式:
    分 时 日 月 周 命令
    30 21 * /usr/local/etc/rc.d/lighttpd restart
    ——> 上面的例子表示每晚的21:30重启apache
    30 17 5 /opt/deng/test.sh
    ——> 表示每周五17:30执行test.sh脚本;

vi crontab ——> 可以将定时任务放在crontab中,linux会定时执行这里的任务.

printf 与 echo的功能基本相同, 只是printf不会自动换行,需要”\n”来操作换行 , 这两个命令的标准不同.

printf “this is a test program , %s , %s \n” Hello world ————> this is a test program , Hello , world

与C语言中的printf用法很相似.

  1. 变量的定义: 变量的引用 $
    1). shell 中的变量只能以 字母 或者 下划线_ 开头, 并且字母区分大小写.
    2). 在LINUX下的, 所有的文件名, 路径都是区分大小写的.
    3). 变量可以使用双引号””, 也可以使用单引号’’, 都可以使用
    name=”dengchangtao” —-> 注意,这里的空格都会影响执行的结果.
    echo $name ——> 变量可以直接引用输出.
    echo “my name is $name” ——> “my name is dengchangtao” 变量也可以在一段话中输出.
    echo “my name is $nameDeng” ——> “my name is “ 这种方式不能正常输出, 会寻找变量nameDeng, 不能自动识别.
    echo “my name is ${name}Deng” ——> “my name is dengchangtaoDeng” —-> 可以通过${}将变量封装在{}中引用输出.
  2. read -p ————-> 接受键盘输入事件 : /* read [-p “信息”] 变量名
    $name ——> 表示变量name, $ 引用变量.
    read -p “please input your name :” name ——-> 读取键盘事件接受到的内容, 将其赋值给变量name
    echo “my name is $name”
  3. name=”dengchangtao”
    echo $name
    echo ‘my name is $name’ —-> my name is $name —->
  4. 1). 单引号 ‘’ 是不能解析变量的. ‘my name is $name’ —-> 其中的name变量是不能被解析的.
    2). 双引号 “” 可以解析变量. “my name is $name” —-> 其中的name变量是可以解析的.
    3). 反引号 ` 可以将其中的命令,输出的结果,返回给前面的变量. ---> str =echo dengchangtaoecho "$str" ----> "dengchangtao"<br />-----> num=expr 1 + 2 + 3` —-> 将表达式的执行结果, 赋值给变量num.
  5. date ——> linux 命令可以直接输出当前的日期时间.
    set -x ——-> 打开shell脚本的执行跟踪功能;
    set +x ——-> 关闭shell脚本的执行跟踪功能.
  6. unset 变量名 —-> 清除变量.
    name=”dengchangtao”
    echo $name —-> dengchangtao
    unset name
    echo $name —-> 没有输出内容
  7. 位置变量:
    $n n<9 ---> $1 $2 $3 $4 $5 $6 $7 $8 $9 —> 位置变量就只要这9个. 可以超过10,十个以上,引用变量就需要使用${10},需要{}括号括起来.
    echo $1
    echo $2
    echo $3
    sh test.sh 11 22 33 —-> 一次输出11 , 22 , 33
  8. 位置变量的使用案例; —> case in esac 语句的使用. 注意语法格式.

case $1 in
start)
echo “this is starting…..”
;;
stop)
echo “this is stoping….”
;;
esac

  1. linux 中是不支持 echo 1+2 这种直接运算操作的, 会原样输出
    echo $(( $1+$2 )) —-> 这种语法可以解析. 输出变量1和变量2 之和.
    expr 10 + 20 —-> 可以解析运算符. 注意 “+”的左右是有空格的, 否则会报错.
    expr 10 - 20 ,expr 10 \ 20,expr 10 20,expr 10 % 20 ——> 是特殊字符, 需要转义.
  2. 预定义变量:
    1). $# : 命令行中位置参数的个数
    2). $* : 所有位置参数的内容
    3). $? : 上一条命令执行后返回的状态, 当返回的状态值为0是,表示
    执行正常,非0值表示执行异常或者出错
    4). $0 : 当前执行的进程或者程序名.

eg:
#!/bin/bash
#deng

  1. echo "参数的个数为:$#"------> 可以直接写 $#
  2. echo "参数分别是$*"
  3. echo "该执行的文件名或者程序名是:${0}" ------> 也可以写 ${0}, ${#} , ${?} ,${*}
  4. echo ${?}

eg2:
total=0
for i in $; do ——> for循环,i表示遍历到的变量. $表示所有的参数.
total=$(( $i+$total )) ——> 遍历获取动态参数的值.
done

  1. echo $total

eg3:
ls
if [[ $? == 0 ]]; then
echo “上条命令执行成功, 执行成功就是返回0”
else
echo “上条命令执行失败,执行失败返回非0”
fi

  1. =====>> 注意: 这里检测命令是否正常执行, 当使用简写命令时,将提示命令错误, 执行不成功. ll --> 执行失败.

———— shell的输入, 输出 ———-

  1. echo -e “my name is user1\nmy name is user2”; ———————-> \n 表示换行.
  2. echo -e “\033[32;40m[ok]\033[0m” ———————> 设置字体颜色. 注意: 颜色部分用双引号包括.
    \033[前景颜色;背景颜色m
    \033[0m —-> 系统默认颜色.
    前景颜色: 30 黑色,
    31 红色
    32 绿色
    33 棕色
    34 蓝色
    35 紫色
    36 青色
    37 白色
    背景颜色: 40 黑色
    41 红色
    42 绿色
    43 棕色
    44 蓝色
    45 紫色
    46 青色
    47 白色

/——————— 文件测试 和 整形测试 ———————

  1. 测试文件的状态:
    格式: [ 操作符 文件或目录 ] ————-> 执行结果为真,则返回0, 如果为假, 则返回非0 ;
  2. 常用的测试操作符
    1). -d: 测试是否为目录(Disctory) ;
    2). -e: 测试目录或文件是否存在(Exist);
    3). -f: 测试是否为文件(File);
    4). -r: 测试当前用户是否具有权限读取(Read);
    5). -w: 测试当前用户是否具有权限写入(Write);
    6). -x: 测试当前用户是否可以执行(Excute);
    7). -L: 测试是否为符号链接(Link)文件;
  3. 条件测试在shell脚本中的使用:
    #!/bin/bash
    #deng
    if [ -f ./file1 ]
    then
    echo “file1 is exists”
    else
    echo “file1 is not exists”
    touch file1
    fi
    ——> 判断文件file1是否存在,如果存在则输出 “file1 is exists”, 如果不存在,则输出”file1 is not exists” ,并创建文件.
  4. 挂载和未挂载:
    mount —-> 挂载

    1. mount /dev/cdrom/media ----> 挂载光盘
    2. 在挂载光盘时,会输出许多挂载光盘是的日志信息, 可以屏蔽掉
    3. mount /dev/cdrom/media &> /dev/null -----> 屏蔽掉信息,也就是将其输出重定向到null这个黑洞中.
  5. unmount ——> 未挂载.

    1. unmount /dev/cdrom/media ----> 未挂载光盘
  6. 整型数据的比较:
    格式: [ 整数1 操作符 整数2 ]
    0). 操作符:
    1). -eq : 等于 (Equal)
    2). -ne : 不等于(Not Equal)
    3). -gt : 大于(Greater Than)
    4). -lt : 小于(Lesser Than)
    5). -le : 小于等于(Lesser or Equal)
    6). -ge : 大于等于(Greater or Equal)
    1). who 查看当前系统中登陆的用户;

    1. root pts/0 2015-01-13 06:37 (192.168.3.4)
    2. root pts/1 2015-01-13 06:38 (192.168.3.4)
  7. 2). who -l 系统当前登陆用户的信息.

    1. LOGIN tty3 2015-01-13 06:36 2210 id=3
    2. LOGIN tty2 2015-01-13 06:36 2208 id=2
    3. LOGIN tty4 2015-01-13 06:36 2212 id=4
    4. LOGIN tty5 2015-01-13 06:36 2218 id=5
    5. LOGIN tty6 2015-01-13 06:36 2220 id=6
  8. 3). who | wc -l ; 登陆的用户的数量. 是一个数字, 也就是几条数据.

    1. who | wc -l ----> 4
  9. 4). [ who | wc -l -ge 2 ]&& echo “当前用户已被入侵….” ——> 打印 “当前用户已被入侵…”

    1. ---> 注意其中的空格.
  10. 5). 使用shell脚本编写程序:

    1. #!/bin/bash
    2. #deng
    3. if [ `who | wc -l ` -ge 2 ]
    4. then
    5. echo "当前登陆用户系统的人数大于等于两人,可能被入侵..."
    6. else
    7. echo "当前登陆用户系统的人数小于等于两人"
    8. fi
  11. 6). df -Th ——-> linux的文件挂载情况; 或系统的分区情况.
    7). df -Th | grep boot ——> 从df -Th的查询结果中查找出boot , 分区的使用系统.

    1. /dev/sda1 ext4 291M 34M 242M 13% /boot
  12. 8). df -Th | grep boot | awk ‘{print $6}’| cut -d ‘%’ -f1 —-> 13

    1. ----> $6 , 表示第六个参数.
    2. ----> cut -d '%' , 表示以"%"进行分割.
    3. ----> -f1 , 表示取第一部分.
  13. 9). 例子:
    #!/bin/bash
    #deng

    1. bootspace=`df -Th | grep 'boot' | awk '{print $6}' | cut -d '%' -f1`
    2. if [ $bootspace -ge 14 ]
    3. then
    4. echo "boot分区的使用空间已经大于等于14%" | mail -s 'boot space Warning!!!' root@localhost
    5. else
    6. echo "boot分区的使用空间已经xiao于等于14"
    7. fi
  14. 10). ls -lh ——> 可以将查看的文件的大小, 让其显示成单位为M.
    11). mail ——> 打开linux下的邮件系统.
    12). & 后面跟上数字, 就可以查看第几封邮件 ; &1 , &2 —-> 打开第一封 , 第二封邮件.
    13). q ——> 退出邮件系统.

  15. 字符串测试和逻辑测试:
    1). 字符串比较:

    1. 格式: [ 字符串1 = 字符串2 ]
    2. [ 字符串1 != 字符串2 ]
    3. [ -z 字符串 ] -------> 字符串为空.
    4. 常用的测试操作符:
    5. =: 字符串内容相同
    6. !=: 字符串内容不同,!表示相反的意思
    7. -z: 字符串内容为空
  16. 2). read -p ‘name:’ name —-> 提示name,键盘输入名称, 将输入的值赋给变量name.
    3). 字符串判别, shell实例: ——> if条件判断下面的这两种写法都是可以的.

    1. ①. #!/bin/bash
    2. #deng
    3. read -p 'please input your name :' name
    4. read -p 'please input your pass :' pass
    5. if [[ 'deng' = $name && '1234' = $pass ]]
    6. then
    7. echo "Login success ! "
    8. else
    9. echo "Login failure !"
    10. fi
    11. ②. #!/bin/bash
    12. #deng
    13. read -p 'please input your name :' name
    14. read -p 'please input your pass :' pass
    15. if [ 'deng' = $name ] && [ '1234' = $pass ]
    16. then
    17. echo "Login success ! "
    18. else
    19. echo "Login failure !"
    20. fi
    21. ---> shell执行:
    22. please input your name :deng
    23. please input your pass :1234
    24. Login success !
  17. 4). 逻辑测试:

    1. 格式: [ 表达式1 ] 操作符 [ 表达式2 ]
    2. 常用的测试操作符:
    3. ①. -a && 逻辑与, '而且'的意思
    4. ②. -o || 逻辑或,'或者'的意思
    5. ③. !: 逻辑否, 当指定的条件不成立时, 返回的结果为真.
  18. 流程控制.
    1). if条件判断
    eg1: ——————-> 双分支结构

    1. if [ $1 -lt 60 ]
    2. echo '小于60'
    3. else
    4. echo '大于60'
    5. fi
  19. eg2: ——————-> 多分支结构.
    #/bin/bash
    #deng ```

    成绩级别

    60以下

    60-75之间

    75-90之间

    90以上

if [ $1 -lt 60 ];then echo ‘此成绩不及格啊,得努力!!’ elif [ $1 -ge 60 ]&&[ $1 -lt 75 ];then echo ‘此成绩是个中等成绩,加油!!’ elif [ $1 -ge 75 ]&&[ $1 -lt 90 ];then echo ‘此成绩是个比较优秀的成绩,fighting!!’
else echo ‘此成绩是个给非常好的成绩!’ fi

—-> ./0118.sh 78 ==> ‘此成绩是个比较优秀的成绩,fighting!!’

  1. 7. eg3: ---> eg2中的判定有些多余, 可以精简如下:

if [ $1 -lt 60 ];then echo ‘此成绩不及格啊,得努力!!’ elif[ $1 -lt 75 ];then echo ‘此成绩是个中等成绩,加油!!’ elif[ $1 -lt 90 ];then echo ‘此成绩是个比较优秀的成绩,fighting!!’
else echo ‘此成绩是个给非常好的成绩!’ fi

——> 因为流程判断时,从上面往下走,结果只能是一个,不能是多个.

  1. 7. 2). case条件判断, 相当于其他语言中的switch.<br />①. 注意语法格式, case开始,esac结束, 每一个条件判断中间,以";;"分割开.<br />:<br />case $1 in<br />1 )<br />echo '周一'<br />;;<br />2 )<br />echo '周二'<br />;;<br />3 )<br />echo '周三'<br />;;<br />4 )<br />echo '周四'<br />;;<br />* )<br />echo '其他' -------> 如果不符合上述的任何条件,则进入该条件中.<br />;;<br />esac<br />:<br />week=`date +%w`<br />case $week in<br />1 )<br />echo '周一'<br />;;<br />2 )<br />echo '周二'<br />;;<br />3 )<br />echo '周三'<br />;;<br />4 )<br />echo '周四'<br />;;<br />* )<br />echo '其他' -------> 如果不符合上述的任何条件,则进入该条件中.<br />;;<br />esac

====> 日期格式化命令.

  1. 7. ②. date +%w ----> 查看当前是星期几<br />③. date +%d -----> 可以查看当前是几号<br />④. date +%m -----> 查看当前的月份.<br />⑤. date +%M -----> 查看当前的月份.<br />:

case $1 in start ) net start mysql ——> 如果传入的是start, 则启动mysql ;; stop )
net stop mysql ——> 如果传入的是stop, 则停止mysql ;;

  1. * )
  2. echo 'command not found'
  3. ;;

esac

—-> 这样就可以在shell后面加上 位置参数启动mysql.

  1. 8. 循环控制.<br />1). while ... do ... done 循环

** 注意 while条件判断后面是有个空格的.

  1. 8. [eg1:]()<br />#/bin/bash<br />#deng

num=10 //注意while后面的空格. while [ $num -gt 0 ] ——————-> 符合条件执行do之后的代码. 执行完毕之后,执行done的代码. do echo $num num=$(($num-1)) done echo ‘最后一个num是’$num

  1. 8. [eg2:]() <br />//求连续数字的和.<br />num=100<br />tot=0

while [ $num -gt 0 ] do tot=$(($tot+$num)) num=$(($num-1)) done echo $tot

  1. 8. [eg3:]()<br />i=0<br />while [ $i -lt 5 ]<br />do<br />useradd user$i<br />echo '123'|passwd --stdin user$i<br />i=$(($i+1))<br />done

语句解读: useradd user$i ——> 循环遍历创建用户.

  1. echo '123'|passwd --stdin user$i -----> 123输出的结果,通过管道作为密码,并作为标准输出流 赋给用户.
  1. 8. [eg4:]() --- 隔行换色, while结合if语句. [[]] (()) 的嵌套使用,是为了转义,这样在shell中就可以直接使用运算符了 <br />i=0<br />while [[ $i -lt 10 ]]; do<br />if [[ $i%2 -eq 0 ]]; then / if [ $(($i%2)) -eq 0 ]]; then<br />echo -e "\033[32;43m${i}\033[0m"<br />else<br />echo $i<br />fi<br />i=$(($i+1))<br />done<br />2). for循环

①. 针对于操作系统中的操作 , for ..in是非常实用的.


for .. in .. 循环:

  1. #/bin/bash
  2. #deng
  3. for i in user0 user1 user2 user3 user4 ; do
  4. echo $i
  5. done
  6. ---------------------------------------------
  7. #/bin/bash
  8. #deng
  9. for i in `cat user.txt` ; do
  10. echo $i
  11. useradd $i
  12. done
  13. ----> 将文件user.txt中的数据读出来,以空格分开.

—> 将系统中所有的用户信息的用户名部分,输出到一个文件中.

  1. for i in `cat /etc/passwd | awk -F: '{print $1}'` ; do
  2. echo $i
  3. echo $i >> user.txt
  4. done
  5. --> 解析命令: cat /etc/passwd | awk -F: '{print $1}'
  6. **: /etc/passwd ---> 该目录下存放的是用户的信息.
  7. **: -F: -----------> 表示以第一个:分开.
  8. **: '{print $1}'---> 表示输出第一个参数.

②. 普通的for 循环: for 循环类似于java中的for循环, ((初始条件;判断条件;执行后操作))

  1. #/bin/bash
  2. #deng
  3. for (( i = 0; i < 10; i++ )); do
  4. echo $i
  5. sleep 1
  6. done

  1. #/bin/bash
  2. #deng
  3. for (( i = 0; i < 10; i++ )); do
  4. echo $i
  5. useradd user$i
  6. echo 1234 | passwd --stdin user$i
  7. done

for (( i = 0; i < 10; i++ )); do echo $i sleep 1 if [ $i -eq 5 ]; then break; // continue ————> break , continue 和java中for循环中的作用相同. fi done

③. 接受键盘输入, 并判定键盘上的键的类型, [a-z][A-Z] [0-9]

  1. #/bin/bash
  2. #deng
  3. read -p 'please input your one key :' key
  4. case $key in
  5. [a-z][A-Z])
  6. echo '字母键!'
  7. ;;
  8. [0-9])
  9. echo '数字键!'
  10. ;;
  11. *)
  12. echo '功能键!'
  13. ;;
  14. esac
  1. 9. shift 迁移语句:<br />1). 用户迁移位置变量,将$1~$9依次想左传递:

①. 例如,若当前脚本程序获得的位置变量如下:

  1. $1=file1 , $2=file2 , $3=file3 , $4=file4

②. 则执行依次shift命令后,各位置变量为:

  1. $1=file2 , $2=file3 , $3=file4

③. 再次执行shift命令后, 各位置变量为:

  1. $1=file3 , $2=file4
  1. 9. 1 :<br />#/bin/bash<br />#deng

tot=0 while [ $# -gt 0 ]; do tot=$(($tot+$1)) shift ————> 位置参数左偏移. done echo $tot

——> ./0122.sh 1 2 3 4 5 ——> 输出 15

  1. 10. shell函数<br />1). 函数的定义:

/bin/bash

deng

function add(){ echo ‘dengchangtao go go go !!!’ }

add ———-> 在脚本中调用函数.

  1. 10. 2). 函数的传参:<br />#/bin/bash<br />#deng

function add(){ num=$1 —————> 接受传递进来的第一个参数. tot=0 for (( i = 0; i < $num; i++ )); do tot=$(($tot+$i)) done echo $tot }

add 10 ——-> 调用函数并传参. add 100 add 1000 add 10000

  1. //---------------------------------------------------------- VI编辑器命令大全 ----------------------------------
  2. 进入vi的命令
  3. vi filename :------------------ 打开或新建文件,并将光标置于第一行首
  4. vi +n filename :-------------- 打开文件,并将光标置于第n行首
  5. vi + filename :--------------- 打开文件,并将光标置于最后一行首
  6. vi +/pattern filename:-------- 打开文件,并将光标置于第一个与pattern匹配的串处
  7. vi -r filename :-------------- 在上次正用vi编辑时发生系统崩溃,恢复filename
  8. vi filename....filename :----- 打开多个文件,依次进行编辑
  9. 移动光标类命令
  10. h :--------------------------- 光标左移一个字符
  11. l :--------------------------- 光标右移一个字符
  12. space:------------------------ 光标右移一个字符
  13. Backspace:-------------------- 光标左移一个字符
  14. kCtrl+p:-------------------- 光标上移一行
  15. jCtrl+n :------------------- 光标下移一行
  16. Enter :----------------------- 光标下移一行
  17. wW :------------------------光标右移一个字至字首
  18. bB :------------------------光标左移一个字至字首
  19. eE :------------------------光标右移一个字至字尾
  20. ) :------------------------光标移至句尾
  21. ( :------------------------光标移至句首
  22. }:------------------------光标移至段落开头
  23. {:------------------------光标移至段落结尾
  24. nG:------------------------光标移至第n行首
  25. n+:------------------------光标下移n
  26. n-:------------------------光标上移n
  27. n$:------------------------光标移至第n行尾
  28. H :------------------------光标移至屏幕顶行
  29. M :------------------------光标移至屏幕中间行
  30. L :------------------------光标移至屏幕最后行
  31. 0:------------------------(注意是数字零)光标移至当前行首
  32. $:------------------------光标移至当前行尾
  33. 屏幕翻滚类命令
  34. Ctrl+u:------------------------向文件首翻半屏
  35. Ctrl+d:------------------------向文件尾翻半屏
  36. Ctrl+f:------------------------向文件尾翻一屏
  37. Ctrlb;-----------------------向文件首翻一屏
  38. nz:----------------------------将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
  39. 插入文本类命令<br />i :------------------------在光标前
  40. I :------------------------在当前行首
  41. a:------------------------光标后
  42. A:------------------------在当前行尾
  43. o:------------------------在当前行之下新开一行
  44. O:------------------------在当前行之上新开一行
  45. r:------------------------替换当前字符
  46. R:------------------------替换当前字符及其后的字符,直至按ESC
  47. s:------------------------从当前光标位置处开始,以输入的文本替代指定数目的字符
  48. S:------------------------删除指定数目的行,并以所输入文本代替之
  49. ncwnCW:------------------------修改指定数目的字
  50. nCC:------------------------修改指定数目的行
  51. 删除命令
  52. ndwndW:------------------------删除光标处开始及其后的n-1个字
  53. do:------------------------删至行首
  54. d$:------------------------删至行尾
  55. ndd:------------------------删除当前行及其后n-1
  56. xX:------------------------删除一个字符,x删除光标后的,而X删除光标前的
  57. Ctrl+u:------------------------删除输入方式下所输入的文本
  58. 搜索及替换命令
  59. /pattern:------------------------从光标开始处向文件尾搜索pattern
  60. ?pattern:------------------------从光标开始处向文件首搜索pattern
  61. :set hlsearch ------------------- 将搜索到的内容高亮显示.
  62. :set nohlsearch ----------------- 将搜索到的内容取消高亮显示.
  63. n:------------------------在同一方向重复上一次搜索命令
  64. N:------------------------在反方向上重复上一次搜索命令
  65. s/p1/p2/g:------------------------将当前行中所有p1均用p2替代
  66. n1,n2s/p1/p2/g:------------------------将第n1n2行中所有p1均用p2替代
  67. g/p1/s//p2/g:------------------------将文件中所有p1均用p2替换
  68. 选项设置
  69. all:------------------------列出所有选项设置情况<br />term:------------------------设置终端类型<br />ignorance:------------------------在搜索中忽略大小写<br />list:------------------------显示制表位(Ctrl+I)和行尾标志($)<br />number:------------------------显示行号<br />report:------------------------显示由面向行的命令修改过的数目<br />terse:------------------------显示简短的警告信息<br />warn:------------------------在转到别的文件时若没保存当前文件则显示NO write信息<br />nomagic:------------------------允许在搜索模式中,使用前面不带“\”的特殊字符<br />nowrapscan:------------------------禁止vi在搜索到达文件两端时,又从另一端开始<br />mesg:------------------------允许vi显示其他用户用write写到自己终端上的信息
  70. 最后行方式命令<br />:n1,n2 co n3:------------------------将n1行到n2行之间的内容拷贝到第n3行下
  71. n1,n2 m n3:------------------------将n1行到n2行之间的内容移至到第n3行下
  72. n1,n2 d :------------------------将n1行到n2行之间的内容删除
  73. w :------------------------保存当前文件
  74. e filename:------------------------打开文件filename进行编辑
  75. x:------------------------保存当前文件并退出
  76. q:------------------------退出vi
  77. q!:------------------------不保存文件并退出vi
  78. :!command:------------------------执行shell命令command
  79. n1,n2 w!command:------------------------将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1n2,则表示将整个文件内容作为command的输入
  80. r!command:------------------------将命令command的输出结果放到当前行
  81. 寄存器操作
  82. "?nyy:------------------------将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
  83. "?nyw:------------------------将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
  84. "?nyl:------------------------将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
  85. "?p:------------------------取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
  86. ndd:------------------------将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
  87. **_ 常用命令累计 _
  88. 1). ps aux --------------------> 查看所有的进程.
  89. 2). ps auxwww ------------------> 查看所有进程的完整信息, 最多加三个w.
  90. 3). last -----------------------> 查看服务器的用户登录情况.(可以查看登录的时间, 登录的用户名, 在线的累计时长, 登录的IP)
  91. 4). cat 1.log | tee new.log ----> tee 重定向并显示重定向的内容.
  92. 5). ls | tr 'a-z' 'A-Z' --------> tr 替换, 将小写替换为大写.
  93. 6). for i in `seq 1 10000`; do cat /etc/passwd >> 1.txt ; done ------->
  94. 7). du -sh 1.txt ---------------> 查看文件大小, du -sb 1.txt , 参数不同, 显示的单位不同.
  95. 8). ls aming* | xargs -i mv {} {}.txt -------------> 给符合条件的文件加上.txt后缀名.
  96. 9). cd /opt/ourpalm ; ls -----------> 多个命令可以在一行执行, 中间用;隔开
  97. 10). & 符号 --------------------------> 将命令放在后台执行, 如: sleep 100 &
  98. 11). -------> 主机之间拷贝文件.

cd /data // data目录下有我们要拷贝的目标文件目录 test

tar cvf - test| ssh 10.0.1.11 “cd /copy1/; tar xvf -“ //首先将要拷贝的目录test打包,”-“ 代表标准输出,然后再ssh 到目标主机 10.0.1.11 ,运行相应的命令。其中tar xvf - 意思是,将前面的标准输出内容作为解包的对象。

总结:其实就是想拷贝的目录先打包,然后将打包好的文件拷贝到目标主机,最后在目标主机上解包。只不过,我们用一条命令实现了边打包边解包的过程。

  1. 12). set noai nosi ----------> 取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。

:set paste ——————> 后来发现了更好用的设置:

进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形。这个真是灰常好用,情不自禁看了一下帮助,发现它做了这么多事: •textwidth设置为0 •wrapmargin设置为0 •set noai •set nosi •softtabstop设置为0 •revins重置 •ruler重置 •showmatch重置 •formatoptions使用空值

  1. 13). seq 命令详解: seq命令用于产生从某个数到另外一个数之间的所有整数。
  1. seq [选项]… 尾数 : seq 10 ——————> 默认生成从1 到 10的整数

    seq [选项]… 首数 尾数 : seq 5 15 ————> 生成从 5 到 15 之间的整数.

    seq [选项]… 首数 增量 尾数 : seq 10 2 20 ———-> 以2位步长,生成连续的整数, 12,14,16,18,20.

  1. -f选项:指定格式

    seq -f”%3g” 9 11 : ———————-> 生成9到11之间整数, %后面指定数字的位数 默认是%g,%3g那么数字位数不足部分是空格。

    sed -f”str%03g” 9 11 : ———————> 这样的话数字位数不足部分是0,%前面制定字符串。

  2. -w选项:指定输出数字同宽

    seq -w 98 101 : ————————-> 098 099 100 101 , 不足位数的在前面补0 ```

14). yes命令: 在命令行中输出指定的字符串,直到yes进程被杀死。不带任何参数输入yes命令默认的字符串就是y.

  1. eg : yes hello ----> 将一直在命令行, 输出hello字样 , 直到ctrl+c终止当前进程.

15). rename oldname newname namelist —————-> 根据名字列表,将老的名字,替换为新的名字, 支持正则表达式.

  1. oldname: 原字符串:将文件名需要替换的字符串;
  2. newname: 目标字符串:将文件名中含有的原字符替换成目标字符串;
  3. namelist: 文件:指定要改变文件名的文件列表。
  4. eg: rename name1.log name.log name1.log ----------> name1.log重命名为name.log
  5. 正则:
  6. ? 可替代单个字符
  7. * 可替代多个字符
  8. eg: rename foo foo0 foo? -------> 会把foo1foo9的文件重命名为foo01foo09,重命名的文件只是有4个字符长度名称的文件,
  9. 文件名中的foo被替换为foo0

16). comm命令:(比较的两个文件是排序之后的文件)

  1. comm命令可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
  2. 交集:打印出两个文件所共有的行。
  3. 求差:打印出指定文件所包含的且不相同的行。
  4. 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
  5. 选项:
  6. -1:不显示在第一个文件出现的内容(删除第一列);
  7. -2:不显示在第二个文件中出现的内容(删除第二列)
  8. -3:不显示同时在两个文件中都出现的内容(删除第三列)
  9. cat a.log ----->22222
  10. 33333
  11. 44444
  12. aaaaa
  13. ccccc
  14. cat b.log ----->11111
  15. 22222
  16. 33333
  17. 44444
  18. ccccc
  19. ddddd
  20. eg :
  21. 1). comm a.log b.log
  22. 11111
  23. 22222
  24. 33333
  25. 44444
  26. aaaaa
  27. ccccc
  28. ddddd
  29. 第一列 第二列 第三列.
  30. ======> 第一列只包含在a.log中出现的行;
  31. 第二列包含在b.log中出现的行;
  32. 第三列包含在a.logb.log中相同的行。
  33. 各列是以制表符(\t)作为定界符。
  34. 2). comm a.log b.log -3 | sed 's/^\t//' -------> 删除第三列, 求两个文件中不相同的行, 两列合并为一列.
  35. 3). comm a.log b.log -1 -2 -------------------> 删除第一,第二列, 求两个文件的交集 .
  36. 4). 通过删除不需要的列,可以得到a.logb.log的差集:

17). curl 命令:

  1. ①. curl -d "jsonStr={\"common\":{\"interfaceId\":\"0005\",\"pCode\":\"10000538310143000003101430031014300000001\"}}"
  2. "http://pay.0708.com/billingcenter2.0/platform/main.do"
  3. --------> linux命令行模拟post请求