用winscp 可以方便的将window的文件上传到linux机器上。
今天学习的linux命令:
ls:(列出当前目录下的文件和文件夹)
ls -lt:(列出文件,并按照时间降序显示)
ls -ltr:(列出文件,并按照时间升序显示)
cd :
cd -(回到进入当前目录之前所在的目录,比如刚开始在/home/test目录,然后我执行了cd /var进入/var目录下,此时我执行cd -就可以回到/home/test目录了。类似浏览器页面回退的功能)
pwd:(显示当前目录)
mkdir:创建目录
touch:创建文件
rmdir : 删除文件夹 ,文件夹不为空的时候删除不了,要用rm -rf dir1(r:recursive递归,f:force 直接删除,不询问)
rm :删除文件或者文件夹(rm -rf dir1 删除文件夹,rm a.txt 删除文件)
cp:拷贝 (cp d1 d2 把文件d1拷贝一份,生成文件d2, cp -r dir1 dir2 拷贝文件夹dir1,生成文件夹dir2)
mv:移动(移动文件和文件夹都一样,mv d1 dir1 把文件或者文件夹d1移动到文件夹dir1下)
vi:文件操作:示例:
vi a.txt (进入a.txt文件的操作中,如果文件不存在则创建,首先进入命令模式)
a (进入编辑模式,append)
(执行编辑操作)
按ESC键结束编辑,返回命令模式
通过:w(冒号+w 表示保存)
:q(冒号+q 表示退出)
:q!(冒号+q+感叹号 表示退出但不保存)
返回之后,通过more a.txt 查看内容
vi其他命令:(shift+小写字母表示大写字母)
:set nu(显示行号)
:set nonu(隐藏行号)
20G(跳到第20行)
15->(调到当前行的第15个字符处)
gg(调到第一行)
1G(和gg一样,调到第一行)
G(调到最后一行)
Vim常用操作: 插入命令: 命令 作用 O 在光标下插入新行 o 在光标所在行行首插入 I 在光标所在字符前插入 i 在光标所在行尾插入 A 在光标所在字符后插入 a 在光标上插入新行 定位命令: 命令 作用 : set nu 设置行号 : set nonu 取消行号 gg 到第一行 G 到最后一行 nG 到第n行 : n 到第n行 $ 移至行尾 0 移至行首 删除命令: 命令 作用 x 删除光标所在处字符 nx 删除光标所在处后n个字符 dd 删除光标所在行,ndd删除n行 dG 删除光标所在行到文件末尾内容 D 删除光标所在处到行尾内容 :n1,n2d 删除指定范围的行 复制和剪切命令: 命令 作用 yy 复制当前行 nyy 复制当前行以下n行 dd 剪切当前行 ndd 剪切当前行以下n行 p、P 粘贴在当前光标所在行下或行上 替换和取消命令: 命令 作用 r 取代光标所在处字符 R 从光标所在处开始替换字符,按Esc结束 u 取消上一步操作 搜索和搜索替换命令: 命令 作用 /string 搜索指定字符串,搜索时忽略大小写 :set ic n 搜索指定字符串的下一个出现位置 :%s/old/new/g 全文替换指定字符串 :n1,n2s/old/new/g 在一定范围内替换指定字符串 保存和退出命令: 命令 作用 :w 保存修改 :w new_filename 另存为指定文件 :wq 保存修改并退出 ZZ 快捷键,保存修改并退出 :q! 不保存修改退出 :wq! 保存修改并退出(文件所有者及root可使用) Vim使用技巧: 导入命令执行结果 :r !命令 定义快捷键 :map 快捷键 触发命令 范例: : map ^P I#: map ^B 0x 连续行注释 :n1,n2s/^/#/g :n1,n2s/^#//g :n1,n2s/^/\/\//g 替换 :ab mymail [email protected]
vi: undo/redo
撤销/重做
在命令模式,假如我们通过dd删除了一行,想要撤销该删除操作,通过 u 即可(undo),如果撤销之后,我们又想重做该操作,通过ctrl + r 即可(redo)。
vi filename 进入命令模式,a/A/i/I/o/O 进入编辑模式, ESC返回命令模式。
在shell里面直接进行数字计算(加减乘除):
echo $((2*5))
就可以得到结果啦。
cat:直接看例子:
cat a.txt (查看a.txt内容 结果跟more a.txt 一样)
tac a.txt(倒序显示a.txt内容)
head -3 a.txt (显示a.txt的前三行)
tail -3 a.txt(显示a.txt的最后3行)
find:查找
例如:find /demo -name a.txt(在根目录的demo文件夹下查找名字为a.txt的文件)
crontab -e:
进入定时任务编辑窗口。(通常使用一个shell脚本存储要做的操作,例如:* * * * * /home/my_crontab_task.sh,具体的操作都在这个shell中)
crontab -r:
删除所有定时任务。
crontab -l:
列出所有的定时任务。
netstat -anp:
显示出全部的网络信息及其进程号(-p)。
ps -ef:
显示全部进程。
ps -aux:
显示全部进程的详细信息
查看某个进程是否存在:
ps -ef | grep mysql
查看mysql进程是否存在。
ifconfig eth0 192.168.1.111
临时修改ip
top:
动态显示内存,CPU,等信息的使用情况
top -d 10
每10秒刷新一次
date
显示或设置系统时间
date MMDDHHMMCCYY.SS
月月日日时时分分年年年年.秒秒
traceroute www.xx.com
追踪完整路由信息
route
查看路由表
rpm(Red Hat PackageManager)
安装软件:
rpm -ivh xxx.rpm
rpm command and options
- -i : install a package
- -v : verbose
- -h : print hash marks as the package archive is unpacked.
查看安装的软件:
rpm -qa
- -q query operation
- -a queries all installed packages
查看是否安装了MySQL:
rpm -qa | grep mysql
如果没有安装telnet服务,可以执行 :
yum install telnet-server
安装服务
yum install telnet
安装命令
然后编辑vi /etc/xinetd.d/telnet 文件,激活telnet,默认是禁用的(disabled改为no)
然后重启服务,执行命令 service xinetd restart
参考:安装telnet
使用 vi 编辑器的时候,要显示行号,可以在命令模式下执行:
:set nu 或者 :set number
取消显示行号:
:set nu!
或者:
:set nonu
即可
RPM/YUM用法
RPM不会帮我们解决包的以来问题,YUM会帮我们解决包依赖的问题。
查询全部已经安装的软件:
rpm -qa
查询是否已经安装了mysql:
rpm -qa | grep mysql
使用yum list/info查看包信息:
yum list mysql
yum info mysql
使用rpm -e(erase)删除包:(如果这个包被其他包依赖,就不能被删除)
rpm -e xxx
可以使用yum remove删除
yum remove xxx
升级包:
升级所有mysql开头的包:
yum update 'mysql*'
使用rpm -i 安装:
rpm -i xxx.rpm
rpm :
-i :install 的意思
-v :察看更细部的安装资讯画面
-h :以安装资讯列显示安装进度
所以通常用:
rpm -ivh xxx.rpm 安装包
使用yum install安装:
yum install mysql
CentOS 下mount share folder:(假设在setting中share folder里面配置的share folder 名字是 myShareFolder)
1. cd /mnt
2. mkdir vm_share(名字可自己决定)
3. mount -t vboxsf myShareFolder vm_share
就可以了。
su:
su表示切换到指定的账号。
如果直接输入su,默认表示切换到root。
su user1表示切换到user1账号,但是环境变量和目录仍旧保持不变。
su - user1表示切换到user1账号,同时环境变量和目录也切换过去,就跟user1自己登陆进来一样。
不同方式执行shell 的区别:
假如我们有一个shell:
#!/bin/bash # Program: # User inputs his first name and last name. Program shows his full name. # History: # 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH read -p "Please input your first name: " firstname read -p "Please input your last name: " lastname echo -e "\nYour full name is: $firstname $lastname"
无论我们通过 绝对路径(/xxx/xxx/sh02.sh),还是相对路径(./sh02.sh),还是通过 bash 执行脚本(sh sh02.sh),执行完成之后,在父程序bash环境下是拿不到 firstname lastname 变量值的。
但是如果我们通过 source sh02.sh的方式执行的话,执行完之后,我们仍可以拿到 firstname lastname 变量值。因为这种方式是在父程序bash环境下执行的,所以我们可以拿到里面的变量。
翻页:
在linux命令行中通过 shift + pageup/pagedown 翻页,通过 shift + home/end 跳到顶部/底部
在vi编辑器里面,vi进入之后,通过 ctrl + f/b 向下/上翻页,通过 shift + g 跳到底部,通过gg跳到顶部。
where: whereis ls/find/vi/mv/cp 显示这些命令对于的执行文件的位置
ln: 硬链接/软链接
ln a.txt b.txt (复制了一份到b.txt,同时建立了a.txt和b.txt的链接,修改其中任一文件,另一文件也会改变,称为硬链接,此时删除其中一份文件,不会影响另外文件)
ln -s a.txt b.txt(建立一个快捷方式b.txt指向了a.txt,修改任一文件,另外文件也会修改,但是删除源文件的话,链接文件会变红色,表示指向的文件不存在)
useradd(或者adduser): 添加用户:
useradd testuser1(添加新用户testuser1,会在home目录下面创建一个testuser1文件夹,删除的时候要一并删除)
userdel : 删除用户
userdel testuser1
然后切换到home下,rm -rf testuser1 删除创建的文件夹
passwd: 修改用户密码 : 首先指定要修改的用户: passwd testuser1 然后按照提示是输入密码即可
在etc目录下的passwd文件实际上记录的是所有的用户:more passwd 即可查看所有用户 ,最后一列对应的是使用的shell类别(如 bash , csh , bsh ,ksh 等)
在etc目录下的group文件记录的是所有的用户组, more group 即可查看所有的组
可以通过
groupadd testgroup 添加一个用户组
userdel: 删除用户 ,userdel testuser1 删除用户 testuser1,然后还要删除home目录下面对于的文件夹 rm -rf testuser1 即可完全删除该用户及其信息
su:切换用户 (switch user) :
su testuser1切换到testuser1
echo $$(查看shell的进程号)
我们常用一些ssh客户端在windows上远程登录到Linux上去操作,有时候会需要配置一些login scripts 或者 tunneling等设置,来方便平时操作:
login scripts:
比如:
Expect: password:
Send: 123456
表示当收到我们期望的字符串(password:)的时候, XShell自动发送我们设置的内容(123456),经常用于自动登录使用。
Tunneling:
比如我们add了一个Tunneling(按照下面的Forwarding Rule):
Type: Local
Source Host:localhost
Listening Port: 12345(本地映射端口)
Destination Host: 192.168.1.111
Destination Port:22(目标映射端口)
通过上面的Tunneling配置,我们就做了一个端口映射,本地监听在12345端口,同时映射到192.168.1.111的22端口(用22端口常用于本地上传资料到远程服务器上面)。
假如192.168.1.111机器上面同时又有一个MySQL数据库(监听端口默认是3306),我们可以通过add一个Tunneling映射到该机器的3306端口:
Type: Local
Source Host:localhost
Listening Port: 13306(本地映射端口)
Destination Host: 192.168.1.111
Destination Port:3306(目标映射端口)
这样在本地通过访问13306端口就可以访问目标机器的MySQL数据库了。
linux 中,引号里面也可以使用 $ 符号,但是单引号和双引号是有区别的(参考:鸟哥linux私房菜):
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
date --date='2 days ago' +%Y%m%d
现实结果是:20150617
date:
--date: 显示后面字符串里面描述的时间。(2 days ago, 即两天前的时间)
+FORMAT: 时间显示的格式。
date1=$(date --date='2 days ago' +%Y%m%d)
echo $date1
现实结果是:20150617
上面date1=$(date --date='2 days ago' +%Y%m%d)的意思是首先将$(exp) 小括号里面的语句执行,类似javascript里面的 eval(“alert('aaa')”) 一样的意思。然后将执行的结果赋给变量date1,这样就可以通过echo $date1 看到该变量的值了(参考:鸟哥linux私房菜)。
ubuntu 启用 root 账号:
Ubuntu 12.04 root用户登录设置
Ubuntu 12.04默认是不允许root登录的,在登录窗口只能看到普通用户和访客登录。以普通身份登陆Ubuntu后我们需要做一些修改,普通用户登录后,修改系统配置文件需要切换到超级用户模式,在终端窗口里面输入: sudo -s.然后输入普通用户登陆的密码,回车即可进入 root用户权限模式。
然后执行: vi /etc/lightdm/lightdm.conf
增加 greeter-show-manual-login=true allow-guest=false . 修改完的整个配置文件是
[SeatDefaults]
greeter-session=unity-greeter
user-session=Ubuntu
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码
allow-guest=false #不允许guest登录
然后我们启动root帐号:
sudo passwd root
根据提示输入roott帐号密码。
重启Ubuntu,登录窗口会有“登录”选项,这时候我们就可以通过root登录了。
ubuntu 切换图形界面和命令行界面:ctrl+alt + f1/f2/f7(f7是图形界面,另外两个是命令行界面)
ubuntu 上下左右和delete键盘问题
在ubuntu下,初始使用vi的时候有点问题,就是在编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现[A [B [C [D之类的字母,而且编辑错误的话,就连平时关于的退格键(Backspace键)都使用不了,只能用Delete来删除。针对这个问题,网上的答案有很多,例如是安装完整版的vim啊,编辑/etc/vim/vimrc.tiny等方法,很杂很乱,在这里我就做个详细的总结吧:
一、编辑/etc/vim/vimrc.tiny
由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改。很简单,这个文件里面的倒数第二句话是“set compatible”,如下所示:
将“compatible”改成“nocompatible”非兼容模式就可以解决方向键变ABCD的问题了。接下来要解决Backspace键的问题也很简单,在刚才那句话后面再加一句:
- set backspace=2
就可以解决问题了。这个时候,无论对于哪个用户,使用vi都能很方便的按照我们的习惯去编辑文件了。