涉及的内容情况参看下面的目录:
- 操作系统的发展史
- Unix
- Minix
- Linux
- 操作系统的发展
- Minix没有火起来的原因
- Linux介绍
- Linux内核&发行版
- Linux内核版本
- Linux发行版本
- 类Unix系统目录结构
- Linux目录
- 用户目录
- 命令行基本操作
- 命令使用方法
- 查看帮助文档
- help
- man(manual)
- tab键自动补全
- history游览历史
- 命令行中的ctrl组合键
- Linux命令
- 权限管理
- 列出目录的内容:ls
- 显示inode的内容:stat
- 文件访问权限
- 修改文件权限:chmod
- 修改文件所有者:chown
- 修改文件所属组:chgrp
- 文件内容查看
- 基本显示:cat、tac
- 显示行号:nl
- 分屏显示:more、less
- 取首尾n行:head、tail
- 文件管理
- 输出重定向:>
- 管道:|
- 清屏:clear
- 切换工作目录: cd
- 显示当前路径:pwd
- 创建目录:mkdir
- 删除文件:rm
- 建立链接文件:ln
- 文本搜索:grep
- 查找文件:find
- 拷贝文件:cp
- 移动文件:mv
- 归档管理:tar
- 文件压缩解压:gzip、bzip2
- 文件压缩解压:zip、unzip
- 查看命令位置:which
- 用户和用户组管理
- 查看当前用户:whoami
- 查看登录用户:who
- 退出登录账户: exit
- 添加用户账号:useradd
- 修改用户:usermod
- 设置用户密码:passwd
- 删除用户:userdel
- 切换用户:su
- 以root身份执行指令:sudo
- 添加、删除组账号:groupadd、groupdel
- 用户组管理:groupmod
- 系统管理
- 查看当前日历:cal
- 显示或设置时间:date
- 查看网络状态:netstat
- 查看进程信息:ps
- 以树状图显示进程关系:pstree
- 动态显示进程:top
- 终止进程:kill
- 关机重启:reboot、shutdown、init
- 检测磁盘空间:df
- 检测目录所占磁盘空间:du
- 查看或配置网卡信息:ifconfig
- 测试远程主机连通性:ping
- Linux 磁盘管理
- df
- du
- fdisk
- 磁盘格式化
- 磁盘检验
- 磁盘挂载与卸除
- Linux管道命令
- wc - 统计字数
- cut - 列选取命令
- grep - 行选取命令
- sort - 排序
- uniq - 去重
- tee - 同时输出多个文件
- tr - 替换指定的字符
- join - 文件按行连接
- paste-将多个文件对应行链接在一起
- split - 文件切割
- xargs - 参数代换
- linux命令练习
- 常用命令
- 系统命令
- 用户和组
- 权限
- 帮助文档
- VIM
- 查找
- 打包与压缩
- 正则表达式
- 输入输出重定向
- 进程控制
- 其他命令
- 远程文件复制:scp
- locate查找
- which命令
- echo
- 设置或显示环境变量:export
- 修改主机名&ip地址
- mount挂载
- ssh免密登陆
- 批量添加用户
- 与用户账号有关的系统文件
- 实操
- crontab的使用
- 特殊权限
- 三种特殊的权限
- SetUID(suid)
- setGID(sgid)
- sticky(sbit)粘滞位
- chattr权限
- lsattr:查看特殊权限
- chattr:设置特殊权限
- 掩码umask
- umask的作用
- umask是如何改变新文件的权限
- 永久修改umask
- linux软件安装
- Ubuntu软件安装与卸载
- 更新Ubuntu软件下载地址
- Ubuntu软件操作的相关命令
- yum安装命令
- 更新国内yum源
- yum常用命令
- yum在线安装MySQL5.7
- rpm
- Linux的基本配置
- 安装JDK
- 制作本地YUM源
- Shell编程
- 入门
- 运行Shell脚本
- 编写一个快捷创建shell脚本的命令
- echo命令
- 显示换行
- 显示不换行
- printf 命令
- Shell 注释
- Shell变量
- 定义变量
- 使用变量
- 只读变量
- 删除变量
- 变量类型
- Shell 函数
- 文件包含
- shell数据类型
- 字符串
- 数组
- 定义数组
- 读取数组
- 获取数组的长度
- Shell传递参数
- Shell基本运算符
- 算术运算符
- 关系运算符
- 布尔运算符
- 逻辑运算符
- 字符串运算符
- 文件测试运算符
- test命令
- 数值测试
- 字符串测试
- 文件测试
- Shell 流程控制
- if else判断语句
- for循环
- while循环
- 无限循环
- until 循环
- case
- 跳出循环
- Shell输入/输出重定向
- 输出重定向
- 输入重定向
- 重定向深入讲解
- Here Document
- /dev/null 文件
- 实例
- 杨辉三角:
- sum()&max():
- 99乘法表:
- 文本编辑命令
- cut命令
- sed命令
- 元字符集
- a|i:在指定行位置添加行
- d:删除指定行
- c:替换指定行
- p:仅显示指定行
- s:字符串替换
- y:单字符替换
- `hHgG`模式空间&保持空间
- 多次指定`-e`选项进行多点编辑
- 选项`-i`直接修改文件内容
- awk命令
- 基本用法
- `-F`指定分割字符
- `-v`设置变量
- `-f`指定awk脚本
- AWK工作原理
- 运算符
- 输出顺序号 NR, 匹配文本行号
- 指定输出分割符
- 忽略大小写
- 正则字符串匹配
- 一些实例
- awk编程
- 条件语句IF&ELSE
- 循环语句For&While
- awk数组
- AWK 用户自定义函数
- AWK 内置函数
- 算数函数
- 字符串函数
- 时间函数
- 位操作函数
- 其他函数
- vim全套笔记
- VIM快速复习
- 什么是 vim?
- 按:冒号即可进入last line mode
- 从command mode进入Insert mode
- 按ESC键退回command mode
- 多行编辑,vim支持,vi不支持
- vim练习
- vi/vim的三种模式
- 命令模式
- 输入模式
- 底行模式
- vim基础操作
- 进入输入模式(Insert mode)
- 进入替换模式(Replace mode)
- 命令模式下常用命令
- 移动光标
- 删除操作
- 撤销&复原&重复
- 复制&粘贴
- 合成行
- 搜索
- 替换
- 底行命令模式的常用操作
- 可视模式
- Linux系统启动过程
- 加载内核
- 启动初始化进程init
- 确定运行级别
- 加载开机启动程序
- 用户登录
- 图形模式与文字模式的切换方式
- login shell
- Linux关机
- 计算机启动的流程
- 第一阶段:BIOS
- 第二阶段: 主引加粗样式导记录
- 第三阶段:硬盘启动
- 第四阶段:操作系统
- 单用户模式修改Centos系统root密码
- 救援模式修改Ubuntu系统root密码
- 虚拟机
- 三种网络模式
- 常见问题
- 修改静态地址后发现无法ping外网
- 虚拟机克隆后eth0消失
- 1965年之前,电脑只有军事或者学院的研究机构碰的起,当时大型主机至多能提供30台终端(30个键盘、显示器)的连接。
- 1965年左后由贝尔实验室、麻省理工学院 以及 通用电气共同发起了Multics项目,想让大型主机支持300台终端
- 1969年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究
- 1969年从这个项目中退出的Ken Thompson当时在实验室无聊时,为了让一台空闲的电脑上能够运行“星际旅行”游行,在8月份左右趁着其妻子探亲的时间,用了1个月的时间编写出了 Unix操作系统的原型
- 1970年,美国贝尔实验室的 Ken Thompson,以 BCPL语言 为基础,设计出很简单且很接近硬件的 B语言(取BCPL的首字母),并且他用B语言写了第一个UNIX操作系统。
因为B语言的跨平台性较差,为了能够在其他的电脑上也能够运行这个非常棒的Unix操作系统,Dennis Ritchie和Ken Thompson 从B语言的基础上准备研究一个更好的语言 - 1972年,美国贝尔实验室的 Dennis Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言
- 1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了现在大名鼎鼎的Unix操作系统
因为AT&T(通用电气)的政策改变,在Version 7 Unix推出之后,发布新的使用条款,将UNIX源代码私有化,在大学中不再能使用UNIX源代码。Andrew S. Tanenbaum(塔能鲍姆)教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不使用任何AT&T的源代码前提下,自行开发与UNIX兼容的操作系统,以避免版权上的争议。他以小型UNIX(mini-UNIX)之意,将它称为MINIX。
Linux因为Minix只是教学使用,因此功能并不强,因此Torvalds利用GNU的bash当做开发环境,gcc当做编译工具,编写了Linux内核-v0.02,但是一开始Linux并不能兼容Unix,即Unix上跑的应用程序不能在Linux上跑,即应用程序与内核之间的接口不一致,因为Unix是遵循POSIX规范的,因此Torvalds修改了Linux,并遵循POSIX(Portable Operating System Interface,他规范了应用程序与内核的接口规范); 一开始Linux只适用于386,后来经过全世界的网友的帮助,最终能够兼容多种硬件
操作系统的发展
Linux介绍 Linux内核&发行版 Linux内核版本Minix的创始人说,MINIX 3没有统治世界是源于他在1992年犯下的一个错误,当时他认为BSD必然会一统天下,因为它是一个更稳定和更成熟的系统,其它操作系统难以与之竞争。因此他的MINIX的重心集中在教育上。四名BSD开发者已经成立了一家公司销售BSD系统,他们甚至还有一个有趣的电话号码1-800-ITS-UNIX。然而他们正因为这个电话号码而惹火上身。美国电话电报公司因电话号码而提起诉讼。官司打了三年才解决。在此期间,BSD陷于停滞,而Linux则借此一飞冲天。他的错误在于没有意识官司竟然持续了如此长的时间,以及BSD会因此受到削弱。如果美国电话电报公司没有起诉,Linux永远不会流行起来,BSD将统治世界。
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
- 开发版:由于要试验各种解决方案,所以变化很快。
内核源码网址:http://www.kernel.org 所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。
Linux发行版本Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
类Unix系统目录结构Unix没有盘符这个概念,只有一个根目录/,所有文件都在它下面
Linux目录- /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
- /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
- /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
- /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
- /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
- /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。
- /lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
- /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
- /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
- /opt:给主机额外安装软件所摆放的目录。
- /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net1表示
第2列表示小时0~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。command表示要执行的命令。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,以此类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,以此类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,以此类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,以此类推
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
20 0-23/2 * * * echo "haha"
示例1:
45 4 1,10,22 * * /etc/init.d/smb restart 每月1、10、22日的4 : 45重启smb 10 1 * * 6,0 /etc/init.d/smb restart 每周六、周日的1 : 10重启smb 0,30 18-23 * * * /etc/init.d/smb restart 每天18 : 00至23 : 00之间每隔30分钟重启smb 0 23 * * 6 /etc/init.d/smb restart 每星期六的晚上11 : 00 pm重启smb * */1 * * * /etc/init.d/smb restart 每一小时重启smb * 23-7/1 * * * /etc/init.d/smb restart 晚上11点到早上7点之间,每隔一小时重启smb
示例2:
0 */2 * * * /sbin/service httpd restart 每两个小时重启一次apache 50 7 * * * /sbin/service sshd start 每天7:50开启ssh服务 50 22 * * * /sbin/service sshd stop 每天22:50关闭ssh服务 0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} ; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。 30 6 */10 * * ls 每月的1、11、21、31日是的6:30执行一次ls命令环境变量问题:
有时创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh #!/bin/sh source /etc/profile export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf /usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时,可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
特殊权限linux共12位权限,除了9位基础权限还有3个特殊权限。
三种特殊的权限 SetUID(suid)命令功能: **临时使用命令的属主权限执行该命令。**即如果文件有suid权限时,那么普通用户去执行该文件时,会以该文件的所属用户的身份去执行。
SetUID(简写suid):会在属主权限位的执行权限上写个s。 如果该属主权限位上有执行权限,则会在属主权限位的执行权限上写个s(小写); 如果该属主权限位上没有执行权限,则会在属主权限位的执行权限上写个S(大写)。
suid数字权限是4000,设置方法:
方式1: [root@centos7 ~]# chmod u+s filename 方式2: [root@centos7 ~]# chmod 4755 filename
查看passwd命令的权限
`[root@localhost ftl]``# ll /usr/bin/passwd ` `问题: ``passwd``文件的属组是root,表示只有root用户可以访问的文件,为什么普通用户依然可以使用该命令更改自己的密码?``答案:当普通用户[omd]使用``passwd``命令的时候,系统看到``passwd``命令文件的属性有大写s后,表示这个命令的属主权限被omd用户获得,也就是omd用户获得文件``/etc/shadow``的root的rwx权限`
由于passwd具有s权限,普通用户使用该命令的时候,就会以该命令的属主身份root执行该命令,于是能够顺利修改普通用户不具备修改权限的/etc/shadow文件。
希望普通用户user1可以删除某个自己没有权限删除的文件的操作方法:
- sudo给user1授权rm权限
- rm设置suid
- 修改被删除文件上级目录的权限
SetUID(简称suid)总结:
- 让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限;
- 如果设置的二进制文件没有执行权限,那么suid的权限显示就是S(大写字母S);
- 特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
- suid极其危险,如果给vim或者rm命令设置了setUID,那么任何文件都能编辑或者删除了,相当于有root权限了。
**命令功能:**使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组。
如果该属组权限位上有执行权限,则会在属组主权限位的执行权限上写个s(小写字母); 如果该属组权限位上没有执行权限,则会在属组主权限位的执行权限上写个S(大写字母S)。
write命令的权限:
[root@VM_0_9_centos ~]# ll /bin/write -rwxr-sr-x 1 root tty 19544 Aug 9 11:10 /bin/write
sgid数字权限是2000,设置方法:
方式1: [root@VM_0_9_centos ~]# chmod 2755 test/ 方式2: [root@VM_0_9_centos ~]# chmod g+s test/ [root@VM_0_9_centos ~]# ll -d test/ drwxr-sr-x 2 root root 4096 Nov 22 21:02 test/
在设置SetGID的文件夹创建文件的属组是父目录的属组:
[root@VM_0_9_centos ~]# cd test/ [root@VM_0_9_centos test]# su aaa [aaa@VM_0_9_centos test]$ touch bbb [aaa@VM_0_9_centos test]$ ll -rw-rw-r-- 1 aaa root 0 Nov 22 21:14 bbb
sticky(sbit)粘滞位**命令功能:**粘滞位,只对目录有效,对某目录设置粘滞位后,普通用户就算有w权限也只能删除该目录下自己建立的文件,而不能删除其他用户建立的文件。
如果该其他用户权限位上有执行权限,则会在其他用户权限位的执行权限上写个t(小写); 如果该其它用户权限位上没有执行权限,则会在其他用户权限位的执行权限上写个T(大写)。
系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
[aaa@VM_0_9_centos ~]$ ll -d /tmp/ drwxrwxrwt. 9 root root 4096 Nov 22 21:15 /tmp/
sbit数字权限是1000,设置方法:
方法1: [root@VM_0_9_centos ~]# chmod 1755 test/ 方法2: [root@VM_0_9_centos ~]# chmod o+t test/ 查看权限: [root@VM_0_9_centos ~]# ll -d test/ drwxr-xr-t 2 root root 4096 Nov 22 21:15 test/
chattr权限chattr概述:凌驾于r、w、x、suid、sgid之上的权限。
lsattr:查看特殊权限[root@VM_0_9_centos ~]# lsattr /etc/passwd -------------e-- /etc/passwd
chattr:设置特殊权限权限说明 -i 锁定文件,不能编辑,不能修改,不能删除,不能移动,可以执行 -a 仅可以追加文件,不能编辑,不能删除,不能移动,可以执行 防止系统中某个关键文件被修改:
[root@VM_0_9_centos ~]# chattr +i /etc/fstab [root@VM_0_9_centos ~]# lsattr /etc/fstab ----i--------e-- /etc/fstab
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
[root@VM_0_9_centos ~]# chattr +a user_act.log [root@VM_0_9_centos ~]# lsattr user_act.log -----a-------e-- user_act.log
掩码umask umask的作用umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。
[root@VM_0_9_centos ~]# umask 0022
umask是如何改变新文件的权限umask值一共有4组数字,其中第1组数字用于定义特殊权限,一般不予考虑,与一般权限有关的是后3组数字。
默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。因为x执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x执行权限。
对于root用户,他的umask值是022。当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755;当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644。
通过umask命令可以修改umask值,比如将umask值设为0077。
[root@VM_0_9_centos ~]# umask 0077 [root@VM_0_9_centos ~]# umask 0077
永久修改umaskumask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,可修改/etc/bashrc或/etc/profile文件。
例如要将默认umask值设置为027,那么可以在文件中增加一行umask 027。
linux软件安装 Ubuntu软件安装与卸载 更新Ubuntu软件下载地址开源软件镜像站 :https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像。
ubuntu版本: 16.04 LTS
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
然后
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
再sudo vim /etc/apt/sources.list修改为以上内容
Ubuntu软件操作的相关命令sudo apt-get update 更新源 sudo apt-get install package 安装包 sudo apt-get remove package 删除包 sudo apt-cache search package 搜索软件包 sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package --reinstall 重新安装包 sudo apt-get -f install 修复安装 sudo apt-get remove package --purge 删除包,包括配置文件等 sudo apt-get build-dep package 安装相关的编译环境 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 sudo apt-cache depends package 了解使用该包依赖那些包 sudo apt-cache rdepends package 查看该包被哪些包依赖 sudo apt-get source package 下载该包的源代码 sudo apt-get clean && sudo apt-get autoclean 清理无用的包 sudo apt-get check 检查是否有损坏的依赖
yum安装命令yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
更新国内yum源网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。
将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本 repo 文件, 放入 /etc/yum.repos.d/
- CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
- CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
- CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo mv CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo
运行以下命令生成缓存
yum clean all yum makecache
除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。
中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html
yum常用命令yum 语法:
yum [options] [command] [package ...]
选项:
- **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
- **command:**要进行的操作。
- **package:**操作的对象。
实例:
- 列出所有可更新的软件清单命令:yum check-update
- 更新所有软件命令:yum update
- 仅安装指定的软件命令:yum install
- 仅更新指定的软件命令:yum update
- 显示包信息:yum info
- 列出所有可安裝的软件清单命令:yum list
- 删除软件包命令:yum remove
- 查找软件包 命令:yum search
- 清除缓存命令:
- yum clean packages: 清除缓存目录下的软件包
- yum clean headers: 清除缓存目录下的 headers
- yum clean oldheaders: 清除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
Step1: 检测系统是否自带安装mysql
yum list installed | grep mysql
Step2: 删除系统自带的mysql及其依赖
yum -y remove mysql-libs.x86_64
Step3: 给CentOS添加rpm源,并且选择较新的源
wget dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm yum localinstall mysql-community-release-el7-5.noarch.rpm yum repolist all | grep mysql yum-config-manager --disable mysql55-community yum-config-manager --disable mysql56-community yum-config-manager --enable mysql57-community-dmr yum repolist enabled | grep mysql
Step4:安装mysql 服务器
yum install mysql-community-server
Step5: 启动mysql
service mysqld start
grep “password” /var/log/mysqld.log(查看临时密码)
SET PASSWORD = PASSWORd('your new password'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; flush privileges;默认的要求必须的设置格式:
包含数字、小写或大写字母以及特殊字符默认的要求必须的设置格式:
包含数字、小写或大写字母以及特殊字符如果不想复杂,可以使用以下方式
set global validate_password_policy=0; set global validate_password_length=1;
Step6: 查看mysql是否自启动,并且设置开启自启动
# chkconfig --list | grep mysqld # chkconfig mysqld on
Step7: mysql安全设置
mysql_secure_installation
rpmRPM是Red Hat公司随Redhat Linux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。
常见用法:
- rpm -ivh
安装软件 - rpm -e
卸载安装 - rpm -qi
显示软件安装信息 - rpm -qa | grep xxx 查询软件是否安装(包括相关依赖)
- rpm -Uvh
升级一个rpm
具体参数详解:
-i, --install 安装包
-v, --verbose 列出更多详细信息,安装进度
-h, --hash 安装时列出hash标记 (与 -v连用)
-e, --erase 卸载安装包
-U, --upgrade=+ 升级包
–replacepkge 无论软件包是否已被安装,都强行安装软件包
–test 安装测试,并不实际安装
–nodeps 忽略软件包的依赖关系强行安装
–force 忽略软件包及文件的冲突
-q,–query:
-a, --all 查询/校验所有的安装包
-p, --package 查询/校验一个安装文件
-l, --list 列出安装文件
-d, --docfiles 列出所有文档文件
-f, --file 查询/校验安装包中所包含的文件安装软件:
# rpm -hvi dejagnu-1.4.2-10.noarch.rpm 警告:dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名:NOKEY, key ID db42a60e 准备... ########################################### [100%]
显示软件安装信息:
# rpm -qi dejagnu-1.4.2-10.noarch.rpm 【第1次更新 教程、类似命令关联】
Linux的基本配置1.修改主机名
vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=hadoop1
2.修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.100.101 NETMASK=255.255.255.0 service network restart
3.修改ip地址和主机名的映射关系
vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.100.101 hadoop1
4.关闭iptables并设置其开机启动/不启动
service iptables stop chkconfig iptables on chkconfig iptables off
安装JDK1.上传jdk-7u45-linux-x64.tar.gz到Linux上 2.解压jdk到/usr/local目录 tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local/ 3.设置环境变量,在/etc/profile文件最后追加相关内容(技巧r:!pwd) vi /etc/profile export JAVA_HOME=/usr/local/jdk1.7.0_45 export PATH=$PATH:$JAVA_HOME/bin 4.刷新环境变量 source /etc/profile 5.测试java命令是否可用 java -version
制作本地YUM源上传CentOS-6.7-x86_64-bin-DVD1.iso到服务器
将CentOS-6.7-x86_64-bin-DVD1.iso镜像挂载到某个目录:
mkdir /var/iso mount -o loop CentOS-6.7-x86_64-bin-DVD1.iso /var/iso
安装并启动Apache服务器:
yum install -y httpd service httpd start
使用浏览器访问http://192.168.100.101(如果访问不通,检查防火墙是否开启了80端口或关闭防火墙)
将YUM源配置到httpd中:
cp -r /var/iso/ /var/www/html/CentOS-6.7 umount /var/iso
在浏览器中访问http://192.168.100.101/CentOS-6.7/
配置使用YUM源:
备份原有的YUM源的配置文件
cd /etc/yum.repos.d/ rename .repo .repo.bak *
修改YUM源配置文件
vi CentOS-Local.repo [base] name=CentOS-Local baseurl=http://192.168.100.101/CentOS-6.7 gpgcheck=1 enabled=1 #很重要,1才启用 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
重建yum缓存
#清除yum缓存文件,重新新建 yum clean all && yum makecache #列出可用的YUM源 yum repolist
rpm包生成yum源目录
如果已经下载好了rpm包,可以自行制作一个yum源(yum仓库)。将下载的rpm包上传到centos服务器上(比如/data/rpm目录下),然后进入存放rpm包的目录,执行以下命令:
# cd /data/rpm # createrepo .
这样,rpm包存放的目录就可以作为yum源目录使用。
Shell编程
如果提示找不到createrepo命令,可以使用yum install createrepo安装该程序。这里说的Shell 脚本(shell script),是在Linux 环境下运行的脚本程序
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
Bash是大多数Linux 系统默认的 Shell,本文也仅关注Bash Shell。
在一般情况下,并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
入门 运行Shell脚本编写shell脚本:
vi test.sh #!/bin/bash echo "Hello World !"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
运行 Shell 脚本有两种方法:
1、作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
默认情况下,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样。
除非将当前目录.加入到PATH环境变量中,配置方法:
sudo vi /etc/profile 加入一行 export PATH=$PATH:. 保存之后,执行 source /etc/profile
2、作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名:
/bin/sh test.sh
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
编写一个快捷创建shell脚本的命令#!/bin/bash if test -z $1;then newfile="./script_`date +%m%d_%s`" else newfile=$1 fi echo $newfile if ! grep "^#!" $newfile &>/dev/null; then cat >> $newfile << EOF #!/bin/bash # Author: # Date & Time: `date +"%F %T"` #Description: EOF fi vim +5 $newfile chmod +x $newfile
将以上内容编写好之后保存为shell文件,然后执行
chmod u+x shell sudo mv shell /usr/bin/
echo命令Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo It is a test
显示转义字符:
echo ""It is a test""
结果将是:
"It is a test"
同样,双引号也可以省略
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
显示换行echo -e "OK! n" # -e 开启转义 echo "It is a test"
输出结果:
OK! It is a test
显示不换行#!/bin/sh echo -e "OK! c" # -e 开启转义 c 不换行 echo "It is a test"
输出结果:
OK! It is a test
printf 命令printf 命令的语法:
printf format-string [arguments...]
参数说明:
- format-string: 为格式控制字符串
- arguments: 为参数列表。
实例如下:
#!/bin/bash printf "%-10s %-8s %-4sn" 姓名 性别 体重kg printf "%-10s %-8s %-4.2fn" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2fn" 杨过 男 48.6543 printf "%-10s %-8s %-4.2fn" 郭芙 女 47.9876
执行脚本,输出结果如下所示:
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
- %s %c %d %f都是格式替代符
- %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
- %-4.2f 指格式化为小数,其中.2指保留2位小数。
printf的转义序列:
序列 说明 a 警告字符,通常为ASCII的BEL字符 b 后退 c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 f 换页(formfeed) n 换行 r 回车(Carriage return) t 水平制表符 v 垂直制表符 一个字面上的反斜杠字符 ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效


