Cover inequalities are a special kind of linear inequalities that are satisfied by the feasible solutions to knapsack problems. Although initially defined in the context of knapsack problems, cover inequalities and their variants can be used as cutting planes for a variety of integer programming and combinatorial optimization problems. We review the theory of these inequalities, discuss certain algorithmic aspects of them, and survey some of the applications.