su:Swith user  切换用户,切换到root用户

cat: Concatenate  串联(cat(Concatenate)命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。)

  cat主要有三大功能:

  1.一次显示整个文件:cat filename

  2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.

  3.将几个文件合并为一个文件:cat file1 file2 > file

uname: Unix name  系统名称

  • -a或--all  显示全部的信息。
  • -m或--machine  显示电脑类型。
  • -n或-nodename  显示在网络上的主机名称。
  • -r或--release  显示操作系统的发行编号。
  • -s或--sysname  显示操作系统名称。
  • -v  显示操作系统的版本。
  • --help  显示帮助。
  • --version  显示版本信息。

df: Disk free  空余硬盘(Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。-h或--human-readable 以K,M,G为单位,提高信息的可读性。)

# df -h 

du: Disk usage 硬盘使用率(Linux du命令用于显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。)

# du -h test

chown: Change owner 改变所有者(实例:将文件 file1.txt 的拥有者设为 runoob 群体的使用者 runoobgroup :

chown runoob:runoobgroup file1.txt

chgrp: Change group 改变用户组(实例1:改变文件的群组属性:

chgrp -v bin log2012.log

)

ps:Process Status  进程状态(Linux ps命令用于显示当前进程 (process) 的状态。)

  • ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
  • -A 列出所有的行程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的资讯
  • -aux 显示所有包含其他使用者的行程
  • au(x) 输出格式 :
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的记忆体使用率
  • VSZ: 占用的虚拟记忆体大小
  • RSS: 占用的记忆体大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:
  • D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
  • R: 正在执行中
  • S: 静止状态
  • T: 暂停执行
  • Z: 不存在但暂时无法消除
  • W: 没有足够的记忆体分页可分配
  • <: 高优先序的行程
  • N: 低优先序的行程
  • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • START: 行程开始时间
  • TIME: 执行的时间
  • COMMAND:所执行的指令

显示指定用户信息

# ps -u root //显示root进程用户信息

tar:Tape archive 解压文件(Linux 常用的压缩与解压缩命令有:tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar 等。)

压缩文件 非打包

# touch a.c
# tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c

列出压缩文件内容

# tar -tzvf test.tar.gz
-rw-r--r-- root/root 0 2010-05-24 16:51:59 a.c

解压文件

# tar -xzvf test.tar.gz
a.c

chmod: Change mode 改变模式

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  • --help : 显示辅助说明
  • --version : 显示版本

将文件 file1.txt 设为所有人皆可读取 :

chmod ugo+r file1.txt

将文件 file1.txt 设为所有人皆可读取 :

chmod a+r file1.txt

将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

chmod ug+w,o-w file1.txt file2.txt

将 ex1.py 设定为只有该文件拥有者可以执行 :

chmod u+x ex1.py

将目前目录下的所有文件与子目录皆设为任何人可读取 :

chmod -R a+r *

此外chmod也可以用数字来表示权限如 :

chmod 777 file

语法为:

chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

  • 若要rwx属性则4+2+1=7;
  • 若要rw-属性则4+2=6;
  • 若要r-x属性则4+1=5。
chmod a=rwx file

chmod 777 file

效果相同

chmod ug=rwx,o=x file

chmod 771 file

umount: Unmount 卸载(Linux umount命令用于卸除文件系统。umount可卸除目前挂在Linux目录中的文件系统。)

下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:

# umount -v /dev/sda1          通过设备名卸载
/dev/sda1 umounted
# umount -v /mnt/mymount/ 通过挂载点卸载
/tmp/diskboot.img umounted

ldd:List dynamic dependencies 列出动态相依(ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库。)

# ldd a.out
# ldd /bin/ls

insmod:Install module 安装模块(Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。)


rmmod:Remove module 删除模块(执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,无须把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。)

lsmod:List module 列表模块(执行lsmod(list modules)指令,会列出所有已载入系统的模块)

显示已安装的模块

# lsmod

卸载模块

# rmmod -v pppoe //卸载模块pppoe
Checking ppoe for persistent data

安装模块

# insmod -v pppoe >1.log //安装模块

~# tail -b 30 1.log //显示文件信息

alias :Create your own name for a command(用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在.profile或.cshrc中设定指令的别名。)

bash :GNU Bourne-Again Shell  linux内核 (在Linux下,Bash的地位无可忽视,日常中涉及到Linux下的管理与操作基本都是在Bash中进行,因此,为了提高Linux下工作效率,自然而然的就变成了如何高效使用Bash的问题。使用Bash上的一些快捷键是提高效率的最简单也是最直接方式。)

快捷键 快捷键说明
CTRL-A 将光标移到行首(在命令行下)
CTRL-B 退格 (非破坏性的),这个只是将光标位置往回移动一个位置。
CTRL-C 中断,终结一个前台作业。
CTRL-D “EOF” (文件结尾:end of file)。它用于表示标准输入(stdin)的结束。在控制台或xterm 窗口输入文本时,CTRL-D 删除在光标下的字符。

从一个shell中退出 (类似于exit)。如果没有字符存在,CTRL-D 则会登出该会话。在一个xterm窗口中,则会产生关闭此窗口的效果。

CTRL-E 将光标移动到行尾(在命令行下)
CTRL-F 将光标向前移动一个字符(在命令行下)
CTRL-G BEL。在一些老式打印机终端上,这会引发一个响铃。在xterm终端上可能是哔的一声。
CTRL-H 擦除(Rubout)(破坏性的退格)。在光标往回移动的时候,同时擦除光标前的一个字符。
CTRL-I 水平制表符。
CTRL-J 新行(换行[line feed]并到行首)。在脚本中,也可能表示为八进制形式(‘/012′)或十六进制形式(‘/x0a’)。
CTRL-K 垂直制表符(Vertical tab)。在控制台或 xterm 窗口输入文本时,CTRL-K会删除从光标所在处到行尾的所有字符。

在脚本中,也可能表示为八进制形式(‘/013′)或十六进制形式(‘/x0b’)。在脚本中,CTRL-K可能会有不一样的行为,下面的例子给出其不一样的行为:

#!/bin/bash
## 一个CTRL-K垂直制表符的例子 var=$'/x0aBottom Line/x0bTop line/x0a'
## 直接输出
echo "$var"
## 使用col来过滤控制字符
echo "$var" | col ## 上面的显示将会不一样 exit 0
CTRL-L 跳纸,换页(Formfeed),清屏。

清空终端屏幕。在终端上,这个命令的作用和clear命令一样。但当这个命令发送到打印机时,Ctrl-L会直接跳到纸张(Paper sheet)的末尾。

CTRL-M 回车(Carriage return)。
CTRL-N 擦除从history缓冲区召回的一行文本(在命令行下)。如果当前输入是历史记录中选择的时候,这个是从这个历史记录开始,每按一次,是更接近的一条命令。
CTRL-O 产生一个新行(在命令行下)。
CTRL-P 从history缓冲区召回上一次的命令(在命令行下)。此快捷键召回的顺序是由近及远的召回,即按一次,召回的是前一次的命令,再按一次,是召回上一次之前的命令,这和CTRL-N都是以当前的输入为起点,但是两个命令操作刚好相反,CTRL-N是从起点开始由远及近(如果起点是历史命令的话)。
CTRL-Q Resume (XON)。恢复/解冻,这个命令是恢复终端的stdin用的,可参见CTRL-S。
CTRL-R 回溯搜索(Backwards search)history缓冲区内的文本(在命令行下)。注意:按下之后,提示符会变成(reverse-i-search)”:输入的搜索内容出现在单引号内,同时冒号后面出现最近最匹配的历史命令。
CTRL-S Suspend(XOFF),挂起。这个是冻结终端的stdin。要恢复可以按CTRL-Q。
CTRL-T 交换光标位置与光标的前一个位置的字符内容(在命令行下)。比如:echo $var;,假设光标在a上,那么,按下C-T之后,v和a将会交换位置:echo $avr;。
CTRL-U 擦除从光标位置开始到行首的所有字符内容。在某些设置下,CTRL-U会不以光标位置为参考而删除整行的输入。
CTRL-V 在输入文本的时候,按下C-V之后,可以插入控制字符。比如:echo -e '/x0a’;和echo <CTRL-V><CTRL-J>;这两种效果一样。这点功能在文本编辑器内非常有效。
CTRL-W 当在控制台或一个xterm窗口敲入文本时, CTRL-W 会删除从在光标处往后(回)的第一个空白符之间的内容。在某些设置里, CTRL-W 删除光标往后(回)到第一个非文字和数字之间的字符。
CTRL-X 在某些文字处理程序中,这个控制字符将会剪切高亮的文本并且将它复制到剪贴板中。
CTRL-Y 将之前已经清除的文本粘贴回来(主要针对CTRL-U或CTRL-W)。
CTRL-Z 暂停一个前台的作业;在某些文本处理程序中也作为替换操作;在MSDOS文件系统中作为EOF(End-of-file)字符。
CTRL-/ 退出。和CTRL-C差不多,也可能dump一个”core”文件到你的工作目录下(这个文件可能对你没用)。
CTRL-/ 撤消操作,Undo。
CTRL-_ 撤消操作。
CTRL-xx 在行首和光标两个位置间进行切换,此处是两个”x”字符。
ALT-B 光标往回跳一个词,词以非字母为界(跳动到当前光标所在词的开头)。
ALT-F 光标往前跳一个词(移动到光标所在词的末尾)。
ALT-D 删除光标所在位置到光标所在词的结尾位置的所有内容(如果光标是在词开头,则删除整个词)。
ALT-BASKSPACE 删除光标所在位置到词开头的所有内容。
ALT-C 将光标所在位置的字母转为大写(如果光标在一个词的起始位置或之前,则词首字母大写)。
ALT-U 将光标所在位置到词尾的所有字母转为大写。
ALT-L 将光标位置到词尾的所有字母转为小写。
ALT-R 取消所有变更,并将当前行恢复到在历史记录中的原始状态(前提是当前命令是从历史记录中来的,如果是手动输入,则会清空行)。
ALT-T 当光标两侧都存在词的时候,交换光标两侧词的位置。如:abc <ALT-T>bcd -> bcd abc
ALT-. 使用前一次命令的最后一个词(命令本身也是一个词,参见后一篇的Bang命令中的词指示符概念)。
ALT-_ 同ALT-.。
ALT-数值 这个数值可以是正或者是负,这个键单独没有作用,必须后面再接其他内容,如果后面是字符,则表示重复次数。如:[ALT-10,k]则光标位置会插入10个k字符(负值在这种情况下无效);如果后面接的是命令,则数字会影响后面命令的执行结果,如:[ALT--10,CTRL-D]则向CTRL-D默认方向相反(负数)的方向执行10次操作。
ALT-< 移动到历史记录中的第一行命令。
ALT-> 移动到历史的最后一行,即当前正在输入的行(没有输入的情况下为空)。
ALT-P 从当前行开始向前搜索,有必要则向”上”移动,移动时,使用非增量搜索查找用户提供的字符串。
ALT-N 从当前行开始向后搜索,如果有必要向”下”移动,移动时,使用非增量搜索查找用户提供的字符串。
ALT-CTRL-Y 在标志点上插入前一个命令的第一个参数(一般是前一行的第二个词)。如果有参数n,则插入前一个命令的第n个词(前一行的词编号从0开始,见历史扩展)。负的参数将插入冲前一个命令的结尾开始的第n个词。参数n通过M-No.的方式传递,如:[ALT-0,ALT-CTRL-Y]插入前一个命令的第0个词(命令本身)。
ALT-Y 轮询到删除环,并复制新的顶端文本。只能在yank[CTRL-Y]或者yank-pop[M-Y]之后使用这个命令。
ALT-? 列出能够补全标志点前的条目。
ALT-* 把能够补全[ALT-?]命令能生成的所有文本条目插入到标志点前。
ALT-/ 试图对标志点前的文本进行文件名补全。[CTRL-X,/]把标志点前的文本当成文件名并列出可以补全的条目。
ALT-~ 把标志点前的文本当成用户名并试图进行补全。[CTRL-X,~]列出可以作为用户名补全标志点前的条目。
ALT-$ 把标志点前的文本当成Shell变量并试图进行补全。[CTRL-X,$]列出可以作为变量补全标志点前的条目。
ALT-@ 把标志点前的文本当成主机名并试图进行补全。[CTRL-X,@]列出可以作为主机补全标志点前的条目。
ALT-! 把标志点前的文本当成命令名并试图进行补全。进行命令名补全时会依次使用别名、保留字、Shell函数、shell内部命令,最后是可执行文件名。[CTRL-X,!]把标志点前的文本当成命令名并列出可补全的条目。
ALT-TAB 把标志点前的文本与历史记录中的文本进行比较以寻找匹配的并试图进行补全。
ALT-{ 进行文件名补全,把可以补全的条目列表放在大括号之间,让shell可以使用。

在Bash下,如果能够妥善的使用快捷键,在Linux系统的操作会变得非常快捷,比如我们在使用cat创建一个文件时,我们可以使用快捷键[CTRL-D]:

grep:global regular expression print(grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为"-",则grep指令会从标准输入设备读取数据。)

1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file 

2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi 

httpd :Start Apache(httpd为Apache HTTP服务器程序。直接执行程序可启动服务器的服务。)

ipcalc :Calculate IP information for a host(是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。)

-b:由给定的IP地址和网络掩码计算出广播地址;
-h:显示给定UP地址所对应的主机名;
-m:由给定的IP地址计算器网络掩码;
-p:显示给定的掩码或IP地址的前缀;
-n:由给定的IP地址和网络掩码计算网络地址;
-s:安静模式;
--help:显示帮助信息。

实例

[root@localhost ~]# ipcalc -p 192.168.2.1 255.255.255.0
PREFIX=24 [root@localhost ~]# ipcalc -n 192.168.2.1 255.255.255.0
NETWORK=192.168.2.0 [root@localhost ~]# ipcalc -h 127.0.0.1
hostname=localhost.localdomain [root@localhost ~]# ipcalc -m 192.168.2.1
NETMASK=255.255.255.0 [root@localhost ~]# ipcalc -pnbm 192.168.2.1 255.255.255.0
NETMASK=255.255.255.0
PREFIX=24
BROADCAST=192.168.2.255
NETWORK=192.168.2.0

ping :Send ICMP ECHO_Request to network hosts(执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。)

reboot: Restart your computer(Linux reboot命令用于用来重新启动计算机。若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown 指令(加上 -r 参数)来取代)

语法

reboot [-n] [-w] [-d] [-f] [-i]

参数

  • -n : 在重开机前不做将记忆体资料写回硬盘的动作
  • -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
  • -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
  • -f : 强迫重开机,不呼叫 shutdown 这个指令
  • -i : 在重开机之前先把所有网络相关的装置先停止

sudo:Superuser do(Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。使用权限:在 /etc/sudoers 中有出现的使用者。)

/bin = BINaries

/dev = DEVices

/etc = ETCetera

/lib = LIBrary

/proc = PROCesses

/sbin = Superuser BINaries

/tmp = TeMPorary

/usr = Unix Shared Resources

/var = VARiable ?

FIFO = First In, First Out

GRUB = GRand Unified Bootloader

IFS = Internal Field Seperators

LILO = LInux LOader

MySQL = My最初作者的名字SQL = Structured Query Language

PHP = Personal Home Page Tools = PHP Hypertext Preprocessor

PS = Prompt String

Perl = "Pratical Extraction and Report Language" = "Pathologically Eclectic Rubbish Lister"

Python Monty Python's Flying Circus

Tcl = Tool Command Language

Tk = ToolKit

VT = Video Terminal

YaST = Yet Another Setup Tool

apache = "a patchy" server

apt = Advanced Packaging Tool

ar = archiver

as = assembler

bash = Bourne Again SHell

bc = Basic (Better) Calculator

bg = BackGround

cal = CALendar

cat = CATenate

cd = Change Directory

chgrp = CHange GRouP

chmod = CHange MODe

chown = CHange OWNer

chsh = CHange SHell

cmp = compare

cobra = Common Object Request Broker Architecture

comm = common

cp = CoPy

cpio = CoPy In and Out

cpp = C Pre Processor

cups = Common Unix Printing System

cvs = Current Version System

daemon = Disk And Execution MONitor

dc = Desk Calculator

dd = Disk Dump

df = Disk Free

diff = DIFFerence

dmesg = diagnostic message

du = Disk Usage

ed = editor

egrep = Extended GREP

elf = Extensible Linking Format

elm = ELectronic Mail

emacs = Editor MACroS

eval = EVALuate

ex = EXtended

exec = EXECute

fd = file descriptors

fg = ForeGround

fgrep = Fixed GREP

fmt = format

fsck = File System ChecK

fstab = FileSystem TABle

fvwm = F*** Virtual Window Manager

gawk = GNU AWK

gpg = GNU Privacy Guard

groff = GNU troff

hal = Hardware Abstraction Layer

joe = Joe's Own Editor

ksh = Korn SHell

lame = Lame Ain't an MP3 Encoder

lex = LEXical analyser

lisp = LISt Processing = Lots of Irritating Superfluous Parentheses

ln = LiNk

lpr = Line PRint

ls = list

lsof = LiSt Open Files

m4 = Macro processor Version 4

man = MANual pages

mawk = Mike Brennan's AWK

mc = Midnight Commander

mkfs = MaKe FileSystem

mknod = MaKe NODe

motd = Message of The Day

mozilla = MOsaic GodZILLa

mtab = Mount TABle

mv = MoVe

nano = Nano's ANOther editor

nawk = New AWK

nl = Number of Lines

nm = names

nohup = No HangUP

nroff = New ROFF

od = Octal Dump

passwd = PASSWorD

pg = pager

pico = PIne's message COmposition editor

pine = "Program for Internet News & Email" = "Pine is not Elm"

ping =  Packet InterNet Grouper

pirntcap = PRINTer CAPability

popd = POP Directory

pr = pre

printf = PRINT Formatted

ps = Processes Status

pty = pseudo tty

pushd = PUSH Directory

pwd = Print Working Directory

rc = runcom = run command, shell

rev = REVerse

rm = ReMove

rn = Read News

roff = RunOFF

rpm = RPM Package Manager = RedHat Package Manager

rsh, rlogin, = Remote

rxvt = ouR XVT

sed = Stream EDitor

seq = SEQuence

shar = SHell ARchive

slrn = S-Lang rn

ssh = Secure SHell

ssl = Secure Sockets Layer

stty = Set TTY

su = Substitute User

svn = SubVersioN

tar = Tape ARchive

tcsh = TENEX C shell

telnet = TEminaL over Network

termcap = terminal capability

terminfo = terminal information

tr = traslate

troff = Typesetter new ROFF

tsort = Topological SORT

tty = TeleTypewriter

twm = Tom's Window Manager

tz = TimeZone

udev = Userspace DEV

ulimit = User's LIMIT

umask = User's MASK

uniq = UNIQue

vi = VIsual = Very Inconvenient

vim = Vi IMproved

wall = write all

wc = Word Count

wine = WINE Is Not an Emulator

xargs = eXtended ARGuments

xdm = X Display Manager

xlfd = X Logical Font Description

xmms = X Multimedia System

xrdb = X Resources DataBase

xwd = X Window Dump

yacc = yet another compiler compiler

转(https://www.zhaokeli.com/article/8410.html

最新文章

  1. Struts2+Spring+Hibernate框架整合总结详细教程
  2. .Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]
  3. 微信小程序wafer
  4. Understanding theory (1)
  5. 未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u010259408]
  6. win7 安装 memcached
  7. linux系统各目录存储的文件类型
  8. STM32F4_USART配置及细节描述
  9. apache开源项目 -- VXQuery
  10. boost之ThreadPool
  11. crawler_爬虫开发的曲线图
  12. FZU 2095 水面高度
  13. SSH架构实现在线支付功能
  14. SQL - Order By如何处理NULL
  15. gprinter佳博打印机androidSDK
  16. Breathe me
  17. 从零開始学Xamarin.Forms(一) 概述
  18. [转]Rancher 1.6 Docs
  19. JQuery官方学习资料(译):遍历
  20. 字符串转码中文乱码问题的进一步理解 UTF-8 GBK转码

热门文章

  1. vue不常用到的v-model修饰符
  2. 使用Jenkins进行前端UVE项目部署
  3. 为WPF, UWP 及 Xamarin实现一个简单的消息组件
  4. Git将一个项目同时从本地推送到GitHub和Gitee
  5. (分块)GukiZ and GukiZiana CodeForces - 551E
  6. windows下远程访问Linux系统中mysql
  7. 51Nod 2026 Gcd and Lcm
  8. SSM前后端分离/不分离对比Demo
  9. [HNOI2008]明明的烦恼(prufer序列,高精度,质因数分解)
  10. 理解Javascript的柯里化